summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjk7744.park <jk7744.park@samsung.com>2015-09-08 22:08:27 +0900
committerjk7744.park <jk7744.park@samsung.com>2015-09-08 22:08:27 +0900
commit990ea211013af6cfc2353b9e324ed84741f59981 (patch)
treed6814e0b06c41adf029ba4ea844fb7ece62192d7
parentf9da34d8d37d591db18bd6a19f0fe029cef35965 (diff)
downloadbluetooth-tizen_2.3.1.tar.gz
bluetooth-tizen_2.3.1.tar.bz2
bluetooth-tizen_2.3.1.zip
-rw-r--r--CMakeLists.txt32
-rw-r--r--TC/READAME.txt5
-rwxr-xr-xTC/_export_env.sh9
-rwxr-xr-xTC/_export_target_env.sh8
-rwxr-xr-xTC/build.sh16
-rwxr-xr-xTC/clean.sh11
-rw-r--r--TC/config4
-rwxr-xr-xTC/execute.sh15
-rwxr-xr-xTC/push.sh13
-rwxr-xr-xTC/run.sh15
-rw-r--r--TC/testcase/Makefile24
-rw-r--r--TC/testcase/tslist28
-rwxr-xr-xTC/testcase/utc_network_bluetooth_adapter_negative.c429
-rwxr-xr-xTC/testcase/utc_network_bluetooth_adapter_positive.c797
-rwxr-xr-xTC/testcase/utc_network_bluetooth_audio_negative.c383
-rwxr-xr-xTC/testcase/utc_network_bluetooth_audio_positive.c667
-rw-r--r--TC/testcase/utc_network_bluetooth_avrcp_negative.c174
-rwxr-xr-xTC/testcase/utc_network_bluetooth_avrcp_positive.c398
-rw-r--r--TC/testcase/utc_network_bluetooth_common_negative.c84
-rwxr-xr-xTC/testcase/utc_network_bluetooth_common_positive.c122
-rw-r--r--TC/testcase/utc_network_bluetooth_device_discovery_negative.c191
-rwxr-xr-xTC/testcase/utc_network_bluetooth_device_discovery_positive.c262
-rwxr-xr-xTC/testcase/utc_network_bluetooth_device_negative.c300
-rwxr-xr-xTC/testcase/utc_network_bluetooth_device_positive.c695
-rwxr-xr-xTC/testcase/utc_network_bluetooth_gatt_negative.c298
-rwxr-xr-xTC/testcase/utc_network_bluetooth_gatt_positive.c407
-rw-r--r--TC/testcase/utc_network_bluetooth_hdp_negative.c201
-rwxr-xr-xTC/testcase/utc_network_bluetooth_hdp_positive.c242
-rwxr-xr-xTC/testcase/utc_network_bluetooth_hid_negative.c142
-rwxr-xr-xTC/testcase/utc_network_bluetooth_hid_positive.c159
-rwxr-xr-xTC/testcase/utc_network_bluetooth_opp-client_negative.c136
-rwxr-xr-xTC/testcase/utc_network_bluetooth_opp-client_positive.c261
-rwxr-xr-xTC/testcase/utc_network_bluetooth_opp-server_negative.c191
-rwxr-xr-xTC/testcase/utc_network_bluetooth_opp-server_positive.c224
-rw-r--r--TC/testcase/utc_network_bluetooth_pan_negative.c166
-rwxr-xr-xTC/testcase/utc_network_bluetooth_pan_positive.c265
-rw-r--r--TC/testcase/utc_network_bluetooth_service_search_negative.c179
-rwxr-xr-xTC/testcase/utc_network_bluetooth_service_search_positive.c407
-rw-r--r--TC/testcase/utc_network_bluetooth_socket_negative.c268
-rwxr-xr-xTC/testcase/utc_network_bluetooth_socket_positive.c478
-rwxr-xr-xTC/tet_scen7
-rw-r--r--TC/tetbuild.cfg5
-rw-r--r--TC/tetclean.cfg5
-rw-r--r--TC/tetexec.cfg5
-rw-r--r--TC/tetware.conf5
-rw-r--r--bluetooth-gatt-test.manifest12
-rw-r--r--bluetooth-infinite-spp-test-client.manifest12
-rw-r--r--bluetooth-infinite-spp-test-server.manifest12
-rw-r--r--bluetooth-test.manifest12
-rw-r--r--bluetooth.manifest5
-rw-r--r--debian/README0
-rw-r--r--debian/capi-network-bluetooth-dev.install4
-rw-r--r--debian/capi-network-bluetooth-dev.postinst1
-rw-r--r--debian/capi-network-bluetooth.install1
-rw-r--r--debian/capi-network-bluetooth.postinst1
-rw-r--r--debian/changelog304
-rw-r--r--debian/compat1
-rw-r--r--debian/control21
-rwxr-xr-xdebian/rules68
-rw-r--r--doc/bluetooth_doc.h696
-rw-r--r--include/bluetooth.h2917
-rw-r--r--include/bluetooth_private.h304
-rwxr-xr-xinclude/mobile/bluetooth.h5621
-rw-r--r--include/mobile/bluetooth_internal.h1601
-rw-r--r--include/mobile/bluetooth_type.h1829
-rw-r--r--include/mobile/bluetooth_type_internal.h254
-rwxr-xr-xinclude/wearable/bluetooth.h5039
-rw-r--r--include/wearable/bluetooth_internal.h2276
-rw-r--r--include/wearable/bluetooth_type.h1608
-rw-r--r--include/wearable/bluetooth_type_internal.h582
-rw-r--r--packaging/capi-network-bluetooth.spec190
-rw-r--r--src/bluetooth-adapter.c2700
-rw-r--r--src/bluetooth-audio.c1084
-rw-r--r--src/bluetooth-avrcp.c534
-rw-r--r--src/bluetooth-common.c1735
-rw-r--r--src/bluetooth-device.c417
-rwxr-xr-xsrc/bluetooth-gatt.c2481
-rw-r--r--src/bluetooth-hdp.c60
-rw-r--r--src/bluetooth-hid.c67
-rw-r--r--src/bluetooth-opp-client.c78
-rw-r--r--src/bluetooth-opp-server.c95
-rw-r--r--src/bluetooth-pan.c73
-rw-r--r--src/bluetooth-pbap.c282
-rw-r--r--src/bluetooth-socket.c138
-rw-r--r--test/CMakeLists.txt8
-rw-r--r--test/bt_chat_client.c453
-rw-r--r--test/bt_chat_server.c281
-rw-r--r--test/bt_infinite_spp_test.c512
-rw-r--r--test/bt_infinite_spp_test_client.service11
-rw-r--r--test/bt_infinite_spp_test_server.service11
-rw-r--r--test/bt_onoff.c131
-rw-r--r--test/bt_unit_test.c5440
-rw-r--r--test/bt_unit_test.h354
-rw-r--r--test/capi.network.bluetooth.infinite.spp.test.rule4
-rw-r--r--test/capi.network.bluetooth.test.rule2
-rw-r--r--test/gatt_profile_test_suite/CMakeLists.txt22
-rw-r--r--test/gatt_profile_test_suite/bt_unit_test_gatt.c121
-rw-r--r--test/gatt_profile_test_suite/bt_unit_test_gatt.h43
-rw-r--r--test/gatt_profile_test_suite/bt_unit_test_gatt_hr_profile.c472
-rw-r--r--test/gatt_profile_test_suite/bt_unit_test_gatt_hr_profile.h64
-rw-r--r--test/gatt_profile_test_suite/capi.network.bluetooth.test.gatt.rule2
-rw-r--r--test_scripts/bt_on_test_while_infinite.service13
-rwxr-xr-xtest_scripts/check_bt_during_infinite_boot.sh39
-rwxr-xr-xtest_scripts/check_bt_during_infinite_boot_by_sdb.sh71
104 files changed, 45202 insertions, 4700 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index dfdcb5a..98e31fb 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -8,9 +8,18 @@ SET(PREFIX ${CMAKE_INSTALL_PREFIX})
SET(INC_DIR include)
INCLUDE_DIRECTORIES(${INC_DIR})
-
-SET(dependents "dlog glib-2.0 capi-base-common bluetooth-api bluetooth-media-control")
-SET(pc_dependents "capi-base-common")
+IF (TIZEN_WEARABLE)
+ INCLUDE_DIRECTORIES(${INC_DIR}/wearable)
+ELSE ()
+ INCLUDE_DIRECTORIES(${INC_DIR}/mobile)
+ENDIF (TIZEN_WEARABLE)
+
+IF (TIZEN_WEARABLE)
+SET(dependents "dlog glib-2.0 capi-base-common bluetooth-api privacy-manager-client")
+ELSE ()
+SET(dependents "dlog glib-2.0 capi-base-common bluetooth-api")
+ENDIF (TIZEN_WEARABLE)
+SET(pc_dependents "capi-base-common glib-2.0")
INCLUDE(FindPkgConfig)
pkg_check_modules(${fw_name} REQUIRED ${dependents})
@@ -42,7 +51,11 @@ src/bluetooth-hdp.c
src/bluetooth-hid.c
src/bluetooth-audio.c
src/bluetooth-avrcp.c
+src/bluetooth-gatt.c
)
+IF (TIZEN_WEARABLE)
+LIST(APPEND SOURCES src/bluetooth-pbap.c)
+ENDIF (TIZEN_WEARABLE)
ADD_LIBRARY(${fw_name} SHARED ${SOURCES})
@@ -62,6 +75,19 @@ INSTALL(
PATTERN "*_private.h" EXCLUDE
PATTERN "${INC_DIR}/*.h"
)
+IF (TIZEN_WEARABLE)
+INSTALL(
+ DIRECTORY ${INC_DIR}/wearable/ DESTINATION include/network
+ FILES_MATCHING
+ PATTERN "${INC_DIR}/wearable/*.h"
+ )
+ELSE ()
+INSTALL(
+ DIRECTORY ${INC_DIR}/mobile/ DESTINATION include/network
+ FILES_MATCHING
+ PATTERN "${INC_DIR}/mobile/*.h"
+ )
+ENDIF (TIZEN_WEARABLE)
SET(PC_NAME ${fw_name})
SET(PC_REQUIRED ${pc_dependents})
diff --git a/TC/READAME.txt b/TC/READAME.txt
new file mode 100644
index 0000000..f0edad5
--- /dev/null
+++ b/TC/READAME.txt
@@ -0,0 +1,5 @@
+Before run DTS of bluetooth, BT should be disabled.
+This DTS needs another target and it must be set as the following:
+ 1) BT is activated.
+ 2) BT is discoverable.
+ 3) BT name is set as "dts_test".
diff --git a/TC/_export_env.sh b/TC/_export_env.sh
new file mode 100755
index 0000000..ac8f4a1
--- /dev/null
+++ b/TC/_export_env.sh
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+. ./config
+export TET_INSTALL_PATH=$TET_INSTALL_HOST_PATH # tetware root path
+export TET_TARGET_PATH=$TET_INSTALL_PATH/tetware-target # tetware target path
+#export TET_TARGET_PATH=$TET_INSTALL_PATH/tetware-simulator # tetware simulator path
+export PATH=$TET_TARGET_PATH/bin:$PATH
+export LD_LIBRARY_PATH=$TET_TARGET_PATH/lib/tet3:$LD_LIBRARY_PATH
+export TET_ROOT=$TET_TARGET_PATH
diff --git a/TC/_export_target_env.sh b/TC/_export_target_env.sh
new file mode 100755
index 0000000..c693f83
--- /dev/null
+++ b/TC/_export_target_env.sh
@@ -0,0 +1,8 @@
+#!/bin/sh
+. ./config
+export TET_INSTALL_PATH=$TET_INSTALL_TARGET_PATH # path to path
+export TET_TARGET_PATH=$TET_INSTALL_PATH/tetware-target
+#export TET_TARGET_PATH=$TET_INSTALL_PATH/tetware-simulator # tetware simulator path
+export PATH=$TET_TARGET_PATH/bin:$PATH
+export LD_LIBRARY_PATH=$TET_TARGET_PATH/lib/tet3:$LD_LIBRARY_PATH
+export TET_ROOT=$TET_TARGET_PATH
diff --git a/TC/build.sh b/TC/build.sh
new file mode 100755
index 0000000..72aad6c
--- /dev/null
+++ b/TC/build.sh
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+. ./_export_env.sh # setting environment variables
+
+export TET_SUITE_ROOT=`pwd`
+FILE_NAME_EXTENSION=`date +%s`
+
+RESULT_DIR=results
+HTML_RESULT=$RESULT_DIR/build-tar-result-$FILE_NAME_EXTENSION.html
+JOURNAL_RESULT=$RESULT_DIR/build-tar-result-$FILE_NAME_EXTENSION.journal
+
+mkdir -p $RESULT_DIR
+
+tcc -c -p ./
+tcc -b -j $JOURNAL_RESULT -p ./
+grw -c 7 -f chtml -o $HTML_RESULT $JOURNAL_RESULT
diff --git a/TC/clean.sh b/TC/clean.sh
new file mode 100755
index 0000000..29743e0
--- /dev/null
+++ b/TC/clean.sh
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+. ./_export_env.sh # setting environment variables
+
+export TET_SUITE_ROOT=`pwd`
+RESULT_DIR=results
+
+tcc -c -p ./ # executing tcc, with clean option (-c)
+rm -r $RESULT_DIR
+rm -r tet_tmp_dir
+rm testcase/tet_captured
diff --git a/TC/config b/TC/config
new file mode 100644
index 0000000..bdfec87
--- /dev/null
+++ b/TC/config
@@ -0,0 +1,4 @@
+PKG_NAME=capi-network-bluetooth
+TET_INSTALL_HOST_PATH=/var/tmp/dts_fw/TC/TETware
+TET_INSTALL_TARGET_PATH=/opt/home/$PKG_NAME/TETware
+
diff --git a/TC/execute.sh b/TC/execute.sh
new file mode 100755
index 0000000..0fe02e2
--- /dev/null
+++ b/TC/execute.sh
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+. ./_export_target_env.sh # setting environment variables
+
+export TET_SUITE_ROOT=`pwd`
+FILE_NAME_EXTENSION=`date +%s`
+
+RESULT_DIR=results
+HTML_RESULT=$RESULT_DIR/exec-tar-result-$FILE_NAME_EXTENSION.html
+JOURNAL_RESULT=$RESULT_DIR/exec-tar-result-$FILE_NAME_EXTENSION.journal
+
+mkdir -p $RESULT_DIR
+
+tcc -e -j $JOURNAL_RESULT -p ./
+grw -c 7 -f chtml -o $HTML_RESULT $JOURNAL_RESULT
diff --git a/TC/push.sh b/TC/push.sh
new file mode 100755
index 0000000..5eb9510
--- /dev/null
+++ b/TC/push.sh
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+. ./config
+
+TC_PATH=/opt/home/$PKG_NAME
+
+echo $TC_PATH
+
+sdb shell "mkdir -p $TC_PATH"
+
+sdb push . $TC_PATH
+
+
diff --git a/TC/run.sh b/TC/run.sh
new file mode 100755
index 0000000..cec5778
--- /dev/null
+++ b/TC/run.sh
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+source ./_export_target_env.sh
+
+export TET_SUITE_ROOT=`pwd`
+FILE_NAME_EXTENSION=`date +%s`
+
+RESULT_DIR=results
+HTML_RESULT=$RESULT_DIR/exec-tar-result-$FILE_NAME_EXTENSION.html
+JOURNAL_RESULT=$RESULT_DIR/exec-tar-result-$FILE_NAME_EXTENSION.journal
+
+mkdir -p $RESULT_DIR
+
+tcc -e -j $JOURNAL_RESULT -p ./
+grw -c 7 -f chtml -o $HTML_RESULT $JOURNAL_RESULT
diff --git a/TC/testcase/Makefile b/TC/testcase/Makefile
new file mode 100644
index 0000000..7d86802
--- /dev/null
+++ b/TC/testcase/Makefile
@@ -0,0 +1,24 @@
+CC ?= gcc
+
+C_FILES = $(shell ls *.c)
+
+PKGS = capi-network-bluetooth glib-2.0
+
+LDFLAGS = `pkg-config --libs $(PKGS)`
+LDFLAGS += $(TET_ROOT)/lib/tet3/tcm_s.o
+LDFLAGS += -L$(TET_ROOT)/lib/tet3 -ltcm_s
+LDFLAGS += -L$(TET_ROOT)/lib/tet3 -lapi_s
+
+CFLAGS = -I. `pkg-config --cflags $(PKGS)`
+CFLAGS += -I$(TET_ROOT)/inc/tet3
+CFLAGS += -Wall
+
+TCS := $(shell ls -1 *.c | cut -d. -f1)
+
+all: $(TCS)
+
+%: %.c
+ $(CC) -o $@ $< $(CFLAGS) $(LDFLAGS)
+
+clean:
+ rm -f $(TCS)
diff --git a/TC/testcase/tslist b/TC/testcase/tslist
new file mode 100644
index 0000000..c3d5dd0
--- /dev/null
+++ b/TC/testcase/tslist
@@ -0,0 +1,28 @@
+/testcase/utc_network_bluetooth_adapter_positive
+/testcase/utc_network_bluetooth_adapter_negative
+/testcase/utc_network_bluetooth_audio_negative
+/testcase/utc_network_bluetooth_audio_positive
+/testcase/utc_network_bluetooth_device_positive
+/testcase/utc_network_bluetooth_device_negative
+/testcase/utc_network_bluetooth_device_discovery_positive
+/testcase/utc_network_bluetooth_device_discovery_negative
+/testcase/utc_network_bluetooth_service_search_positive
+/testcase/utc_network_bluetooth_service_search_negative
+/testcase/utc_network_bluetooth_socket_positive
+/testcase/utc_network_bluetooth_socket_negative
+/testcase/utc_network_bluetooth_gatt_negative
+/testcase/utc_network_bluetooth_gatt_positive
+/testcase/utc_network_bluetooth_hid_negative
+/testcase/utc_network_bluetooth_hid_positive
+/testcase/utc_network_bluetooth_hdp_negative
+/testcase/utc_network_bluetooth_hdp_positive
+/testcase/utc_network_bluetooth_opp-server_negative
+/testcase/utc_network_bluetooth_opp-server_positive
+/testcase/utc_network_bluetooth_opp-client_negative
+/testcase/utc_network_bluetooth_opp-client_positive
+/testcase/utc_network_bluetooth_pan_negative
+/testcase/utc_network_bluetooth_pan_positive
+/testcase/utc_network_bluetooth_avrcp_negative
+/testcase/utc_network_bluetooth_avrcp_positive
+/testcase/utc_network_bluetooth_common_negative
+/testcase/utc_network_bluetooth_common_positive \ No newline at end of file
diff --git a/TC/testcase/utc_network_bluetooth_adapter_negative.c b/TC/testcase/utc_network_bluetooth_adapter_negative.c
new file mode 100755
index 0000000..a7e2750
--- /dev/null
+++ b/TC/testcase/utc_network_bluetooth_adapter_negative.c
@@ -0,0 +1,429 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include <tet_api.h>
+#include <bluetooth.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <glib.h>
+#include <time.h>
+
+enum {
+ POSITIVE_TC_IDX = 0x01,
+ NEGATIVE_TC_IDX,
+};
+
+static void startup(void);
+static void cleanup(void);
+bt_adapter_visibility_mode_e adapter_visibility_mode =
+ BT_ADAPTER_VISIBILITY_MODE_LIMITED_DISCOVERABLE;
+char adapter_name[128] = "dts_test";
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+
+static void utc_network_bluetooth_deinitialize_n(void);
+static void utc_network_bluetooth_adapter_set_state_changed_cb_n(void);
+static void utc_network_bluetooth_adapter_set_name_changed_cb_n(void);
+static void utc_network_bluetooth_adapter_set_visibility_mode_changed_cb_n(void);
+static void utc_network_bluetooth_adapter_set_connectable_changed_cb_n(void);
+static void utc_network_bluetooth_adapter_enable_n(void);
+static void utc_network_bluetooth_adapter_get_state_n(void);
+static void utc_network_bluetooth_adapter_get_address_n(void);
+static void utc_network_bluetooth_adapter_set_name_n(void);
+static void utc_network_bluetooth_adapter_get_name_n(void);
+static void utc_network_bluetooth_adapter_set_visibility_n(void);
+static void utc_network_bluetooth_adapter_get_visibility_n(void);
+static void utc_network_bluetooth_adapter_add_white_list_n(void);
+static void utc_network_bluetooth_adapter_clear_white_list_n(void);
+static void utc_network_bluetooth_adapter_remove_white_list_n(void);
+static void utc_network_bluetooth_adapter_set_connectable_n(void);
+static void utc_network_bluetooth_adapter_get_connectable_n(void);
+static void utc_network_bluetooth_adapter_disable_n(void);
+static void utc_network_bluetooth_adapter_unset_state_changed_cb_n(void);
+static void utc_network_bluetooth_adapter_unset_name_changed_cb_n(void);
+static void utc_network_bluetooth_adapter_unset_visibility_mode_changed_cb_n(void);
+static void utc_network_bluetooth_adapter_unset_connectable_changed_cb_n(void);
+static void utc_network_bluetooth_adapter_set_le_state_changed_cb_n(void);
+static void utc_network_bluetooth_adapter_unset_le_state_changed_cb_n(void);
+static void utc_network_bluetooth_adapter_le_enable_n(void);
+static void utc_network_bluetooth_adapter_get_le_state_n(void);
+static void utc_network_bluetooth_adapter_le_disable_n(void);
+
+void adapter_state_changed_cb_for_adapter_n(int result,
+ bt_adapter_state_e adapter_state,
+ void *user_data);
+gboolean timeout_func(gpointer data);
+
+struct tet_testlist tet_testlist[] = {
+ {utc_network_bluetooth_adapter_disable_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_set_state_changed_cb_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_set_name_changed_cb_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_set_visibility_mode_changed_cb_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_set_connectable_changed_cb_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_get_state_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_get_address_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_set_name_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_get_name_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_get_visibility_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_set_visibility_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_le_disable_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_add_white_list_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_remove_white_list_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_clear_white_list_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_get_connectable_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_deinitialize_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_set_connectable_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_enable_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_unset_connectable_changed_cb_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_unset_state_changed_cb_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_unset_name_changed_cb_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_unset_visibility_mode_changed_cb_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_set_le_state_changed_cb_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_get_le_state_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_le_enable_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_unset_le_state_changed_cb_n, NEGATIVE_TC_IDX},
+ {NULL, 0},
+};
+
+static void startup(void)
+{
+ /* start of TC */
+ tet_printf("TC start.");
+ bt_initialize();
+}
+
+static void cleanup(void)
+{
+ /* end of TC */
+ tet_printf("TC end");
+}
+
+/**
+ * @brief Negative test case of bt_deinitialize()
+ */
+static void utc_network_bluetooth_deinitialize_n(void)
+{
+ int ret = bt_deinitialize();
+
+ if (ret == BT_ERROR_NONE) {
+ ret = bt_deinitialize();
+ dts_check_eq("bt_deinitialize", ret, BT_ERROR_NOT_INITIALIZED,
+ "BT_ERROR_NOT_INITIALIZED must be returned.");
+ } else {
+ dts_fail("bt_deinitialize", "bt_deinitialize() failed.");
+ }
+}
+
+/**
+ * @brief Negative test case of bt_adapter_disable()
+ */
+static void utc_network_bluetooth_adapter_disable_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_adapter_disable();
+ dts_check_eq("bt_adapter_disable", ret, BT_ERROR_NOT_ENABLED,
+ "BT_ERROR_NOT_ENABLED must be returned when BT is disabled");
+}
+
+/**
+ * @brief Negative test case of bt_adapter_set_state_changed_cb()
+ */
+static void utc_network_bluetooth_adapter_set_state_changed_cb_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_adapter_set_state_changed_cb(NULL, NULL);
+ dts_check_eq("bt_adapter_set_state_changed_cb", ret,
+ BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned when parameter is NULL.");
+}
+
+/**
+ * @brief Negative test case of bt_adapter_set_name_changed_cb()
+ */
+static void utc_network_bluetooth_adapter_set_name_changed_cb_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_adapter_set_name_changed_cb(NULL, NULL);
+ dts_check_eq("bt_adapter_set_name_changed_cb", ret,
+ BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned when parameter is NULL.");
+}
+
+/**
+ * @brief Negative test case of bt_adapter_set_visibility_mode_changed_cb()
+ */
+static void utc_network_bluetooth_adapter_set_visibility_mode_changed_cb_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_adapter_set_visibility_mode_changed_cb(NULL, NULL);
+ dts_check_eq("bt_adapter_set_visibility_mode_changed_cb", ret,
+ BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned when parameter is NULL.");
+}
+
+/**
+ * @brief Negative test case of bt_adapter_set_connectable_changed_cb()
+ */
+static void utc_network_bluetooth_adapter_set_connectable_changed_cb_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_adapter_set_connectable_changed_cb(NULL, NULL);
+ dts_check_eq("bt_adapter_set_connectable_changed_cb", ret,
+ BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned when parameter is NULL.");
+}
+
+/**
+ * @brief Negative test case of bt_adapter_get_state()
+ */
+static void utc_network_bluetooth_adapter_get_state_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_adapter_get_state(NULL);
+ dts_check_eq("bt_adapter_get_state", ret, BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned when parameter is NULL.");
+}
+
+/**
+ * @brief Negative test case of bt_adapter_get_address().
+ */
+static void utc_network_bluetooth_adapter_get_address_n(void)
+{
+ char *address = NULL;
+ int ret = bt_adapter_get_address(&address);
+
+ dts_check_eq("bt_adapter_get_address", ret, BT_ERROR_NOT_ENABLED,
+ "BT_ERROR_NOT_ENABLED must be returned when BT is not enabled.");
+}
+
+/**
+ * @brief Negative test case of bt_adapter_get_name().
+ */
+static void utc_network_bluetooth_adapter_get_name_n(void)
+{
+ char *name = NULL;
+ int ret = bt_adapter_get_name(&name);
+
+ dts_check_eq("bt_adapter_get_name", ret, BT_ERROR_NOT_ENABLED,
+ "BT_ERROR_NOT_ENABLED must be returned when BT is not enabled.");
+}
+
+/**
+ * @brief Negative test case of bt_adapter_get_visibility().
+ */
+static void utc_network_bluetooth_adapter_get_visibility_n(void)
+{
+ int dur = 10;
+ int ret = bt_adapter_get_visibility(NULL, &dur);
+
+ dts_check_eq("bt_adapter_get_visibility", ret, BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned when parameter is NULL.");
+}
+
+/**
+ * @brief Negative test case of bt_adapter_set_name().
+ */
+static void utc_network_bluetooth_adapter_set_name_n(void)
+{
+ int ret = bt_adapter_set_name(NULL);
+ dts_check_eq("bt_adapter_set_name", ret, BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned when parameter is NULL.");
+}
+
+/**
+ * @brief Negative test case of bt_adapter_set_visibility().
+ */
+static void utc_network_bluetooth_adapter_set_visibility_n(void)
+{
+ int ret = bt_adapter_set_visibility(adapter_visibility_mode, 180);
+
+ dts_check_eq("bt_adapter_set_visibility", ret, BT_ERROR_NOT_ENABLED,
+ "BT_ERROR_NOT_ENABLED must be returned when BT is not enabled.");
+}
+
+/**
+ * @brief Negative test case of bt_adapter_le_add_white_list
+ */
+static void utc_network_bluetooth_adapter_add_white_list_n(void)
+{
+ int ret = bt_adapter_le_add_white_list(NULL);
+ dts_check_eq("bt_adapter_le_add_white_list", ret, BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned when parameter is NULL.");
+}
+
+/**
+ * @brief Negative test case of bt_adapter_clear_white_list
+ */
+static void utc_network_bluetooth_adapter_clear_white_list_n(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_adapter_clear_white_list();
+ dts_check_eq("bt_adapter_clear_white_list", ret, BT_ERROR_NOT_ENABLED,
+ "BT_ERROR_NOT_ENABLED must be returned when BT is not enabled.");
+}
+
+/**
+ * @brief Negative test case of bt_adapter_le_add_white_list
+ */
+static void utc_network_bluetooth_adapter_remove_white_list_n(void)
+{
+ int ret = bt_adapter_le_remove_white_list(NULL);
+ dts_check_eq("bt_adapter_le_remove_white_list", ret, BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned when parameter is NULL.");
+}
+
+/**
+ * @brief Negative test case of bt_adapter_get_connectable
+ */
+static void utc_network_bluetooth_adapter_get_connectable_n(void)
+{
+ int ret = bt_adapter_get_connectable(NULL);
+ dts_check_eq("bt_adapter_get_connectable", ret, BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned when parameter is NULL.");
+}
+
+/**
+ * @brief Negative test case of bt_adapter_set_connectable
+ */
+static void utc_network_bluetooth_adapter_set_connectable_n(void)
+{
+ int ret = bt_adapter_set_connectable(NULL);
+ dts_check_eq("bt_adapter_set_connectable", ret, BT_ERROR_NOT_INITIALIZED,
+ "BT_ERROR_NOT_INITIALIZED must be returned when BT is not initialized.");
+}
+
+/**
+ * @brief Negative test case of bt_adapter_unset_state_changed_cb()
+ */
+static void utc_network_bluetooth_adapter_unset_state_changed_cb_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_adapter_unset_state_changed_cb();
+ dts_check_eq("bt_adapter_unset_state_changed_cb", ret,
+ BT_ERROR_NOT_INITIALIZED,
+ "BT_ERROR_NOT_INITIALIZED must be returned when BT service is not initialized.");
+}
+
+/**
+ * @brief Negative test case of bt_adapter_unset_name_changed_cb()
+ */
+static void utc_network_bluetooth_adapter_unset_name_changed_cb_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_adapter_unset_name_changed_cb();
+ dts_check_eq("bt_adapter_unset_name_changed_cb", ret,
+ BT_ERROR_NOT_INITIALIZED,
+ "BT_ERROR_NOT_INITIALIZED must be returned when BT service is not initialized.");
+}
+
+/**
+ * @brief Negative test case of bt_adapter_unset_visibility_mode_changed_cb()
+ */
+static void
+utc_network_bluetooth_adapter_unset_visibility_mode_changed_cb_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_adapter_unset_visibility_mode_changed_cb();
+ dts_check_eq("bt_adapter_unset_visibility_mode_changed_cb", ret,
+ BT_ERROR_NOT_INITIALIZED,
+ "BT_ERROR_NOT_INITIALIZED must be returned when BT service is not initialized.");
+}
+
+/**
+ * @brief Negative test case of bt_adapter_enable()
+ */
+static void utc_network_bluetooth_adapter_enable_n(void)
+{
+ bt_error_e ret = bt_adapter_enable();
+ dts_check_eq("bt_adapter_enable", ret, BT_ERROR_NOT_INITIALIZED,
+ "BT_ERROR_NOT_INITIALIZED must be returned.");
+}
+
+/**
+ * @brief Negative test case of bt_adapter_unset_connectable_changed_cb()
+ */
+static void utc_network_bluetooth_adapter_unset_connectable_changed_cb_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_adapter_unset_connectable_changed_cb();
+ dts_check_eq("bt_adapter_unset_connectable_changed_cb", ret,
+ BT_ERROR_NOT_INITIALIZED,
+ "bt_adapter_unset_connectable_changed_cb() failed.");
+}
+
+/**
+ * @brief Negative test case of bt_adapter_le_set_state_changed_cb()
+ */
+static void utc_network_bluetooth_adapter_set_le_state_changed_cb_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_adapter_le_set_state_changed_cb(NULL, NULL);
+ dts_check_eq("bt_adapter_le_set_state_changed_cb", ret,
+ BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned when parameter is NULL.");
+}
+
+static void utc_network_bluetooth_adapter_le_enable_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_adapter_le_enable();
+ dts_check_eq("bt_adapter_le_enable", ret,
+ BT_ERROR_NOT_INITIALIZED,
+ "BT_ERROR_NOT_INITIALIZED must be returned.");
+}
+
+static void utc_network_bluetooth_adapter_le_disable_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_adapter_le_disable();
+ dts_check_eq("bt_adapter_disable", ret, BT_ERROR_NOT_ENABLED,
+ "BT_ERROR_NOT_ENABLED must be returned when BT is disabled");
+}
+
+static void utc_network_bluetooth_adapter_get_le_state_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_adapter_le_get_state(NULL);
+ dts_check_eq("bt_adapter_get_state", ret, BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned when parameter is NULL.");
+}
+
+static void utc_network_bluetooth_adapter_unset_le_state_changed_cb_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_adapter_le_unset_state_changed_cb();
+ dts_check_eq("bt_adapter_unset_state_changed_cb", ret,
+ BT_ERROR_NOT_INITIALIZED,
+ "BT_ERROR_NOT_INITIALIZED must be returned");
+}
diff --git a/TC/testcase/utc_network_bluetooth_adapter_positive.c b/TC/testcase/utc_network_bluetooth_adapter_positive.c
new file mode 100755
index 0000000..7a6ac13
--- /dev/null
+++ b/TC/testcase/utc_network_bluetooth_adapter_positive.c
@@ -0,0 +1,797 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include <tet_api.h>
+#include <bluetooth.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <glib.h>
+#include <time.h>
+
+#define CONFIG_FILE_PATH "/opt/home/capi-network-bluetooth/tetware.conf"
+
+enum {
+ POSITIVE_TC_IDX = 0x01,
+ NEGATIVE_TC_IDX,
+};
+
+static void startup(void);
+static void cleanup(void);
+char *remote_address;
+static GMainLoop *mainloop;
+static bool callback_result = false;
+bt_adapter_visibility_mode_e adapter_visibility_mode =
+ BT_ADAPTER_VISIBILITY_MODE_LIMITED_DISCOVERABLE;
+char adapter_name[128] = "dts_test";
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_network_bluetooth_initialize_p(void);
+static void utc_network_bluetooth_deinitialize_p(void);
+static void utc_network_bluetooth_adapter_set_state_changed_cb_p(void);
+static void utc_network_bluetooth_adapter_set_name_changed_cb_p(void);
+static void utc_network_bluetooth_adapter_set_visibility_mode_changed_cb_p(void);
+static void utc_network_bluetooth_adapter_set_connectable_changed_cb_p(void);
+static void utc_network_bluetooth_adapter_enable_p(void);
+static void utc_network_bluetooth_adapter_get_state_p(void);
+static void utc_network_bluetooth_adapter_get_address_p(void);
+static void utc_network_bluetooth_adapter_set_name_p(void);
+static void utc_network_bluetooth_adapter_get_name_p(void);
+static void utc_network_bluetooth_adapter_set_visibility_p(void);
+static void utc_network_bluetooth_adapter_get_visibility_p(void);
+static void utc_network_bluetooth_adapter_add_white_list_p(void);
+static void utc_network_bluetooth_adapter_remove_white_list_p(void);
+static void utc_network_bluetooth_adapter_clear_white_list_p(void);
+static void utc_network_bluetooth_adapter_set_connectable_p(void);
+static void utc_network_bluetooth_adapter_get_connectable_p(void);
+static void utc_network_bluetooth_adapter_disable_p(void);
+static void utc_network_bluetooth_adapter_unset_state_changed_cb_p(void);
+static void utc_network_bluetooth_adapter_unset_name_changed_cb_p(void);
+static void utc_network_bluetooth_adapter_unset_visibility_mode_changed_cb_p(void);
+static void utc_network_bluetooth_adapter_unset_connectable_changed_cb_p(void);
+static void utc_network_bluetooth_adapter_set_le_state_changed_cb_p(void);
+static void utc_network_bluetooth_adapter_le_enable_p(void);
+static void utc_network_bluetooth_adapter_get_le_state_p(void);
+static void utc_network_bluetooth_adapter_le_disable_p(void);
+static void utc_network_bluetooth_adapter_unset_le_state_changed_cb_p(void);
+
+void adapter_state_changed_cb_for_adapter_p(int result,
+ bt_adapter_state_e adapter_state,
+ void *user_data);
+void adapter_state_changed_cb_for_adapter_p(int result,
+ bt_adapter_state_e adapter_state,
+ void *user_data);
+void adapter_name_changed_cb_for_adapter_p(char *device_name, void *user_data);
+void adapter_visibility_mode_changed_cb_for_adpater_p(int result,
+ bt_adapter_visibility_mode_e visibility_mode,
+ void *user_data);
+void device_discovery_state_changed_cb_for_adapter_p(int result,
+ bt_adapter_device_discovery_state_e discovery_state,
+ bt_device_info_s *device_info,
+ void *user_data);
+void adapter_connectable_changed_cb_for_adpater_p(int result,
+ bool connectable, void *user_data);
+gboolean timeout_func(gpointer data);
+
+struct tet_testlist tet_testlist[] = {
+ {utc_network_bluetooth_initialize_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_enable_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_set_state_changed_cb_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_unset_state_changed_cb_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_get_state_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_get_address_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_get_name_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_set_name_changed_cb_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_unset_name_changed_cb_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_set_connectable_changed_cb_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_set_name_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_set_visibility_mode_changed_cb_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_unset_visibility_mode_changed_cb_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_get_visibility_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_set_visibility_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_get_connectable_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_set_connectable_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_unset_connectable_changed_cb_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_le_enable_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_add_white_list_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_remove_white_list_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_clear_white_list_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_set_le_state_changed_cb_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_unset_le_state_changed_cb_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_get_le_state_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_le_disable_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_adapter_disable_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_deinitialize_p, POSITIVE_TC_IDX},
+ {NULL, 0},
+};
+
+int get_value_from_file(void)
+{
+ FILE *fp;
+ char *token;
+ char buf[100];
+
+ fp = fopen(CONFIG_FILE_PATH, "r");
+ if (fp == NULL) {
+ tet_printf("Default configuration is used\n");
+ return -1;
+ }
+ while (fgets(buf, sizeof(buf), fp)) {
+ if (buf[0] == '#' || buf[0] == '\n')
+ continue;
+
+ token = strrchr(buf, '\n');
+ if (token == NULL) {
+ tet_printf("g_conf is too long\n");
+ break;
+ }
+ *token = '\0';
+
+ token = strtok(buf, "=");
+ if (token == NULL) {
+ continue;
+ }
+ if (strcasecmp(token, "BT_ADDR_MOBILE") == 0) {
+ token = strtok(NULL, "=");
+ remote_address = strdup(token);
+ fclose(fp);
+ return 0;
+ }
+ }
+ fclose(fp);
+ return -1;
+}
+
+static void startup(void)
+{
+ if(get_value_from_file() == -1) {
+ tet_printf("Failed to read.");
+ }
+
+ /* start of TC */
+ tet_printf("TC start.");
+ mainloop = g_main_loop_new(NULL, FALSE);
+}
+
+static void cleanup(void)
+{
+ /* end of TC */
+ tet_printf("TC end");
+}
+
+gboolean timeout_func(gpointer data)
+{
+ tet_printf("Callback: Timeout.");
+ g_main_loop_quit((GMainLoop *)data);
+ return FALSE;
+}
+
+/**
+ * @brief Callback funtions
+ */
+void adapter_state_changed_cb_for_adapter_p(int result,
+ bt_adapter_state_e adapter_state,
+ void *user_data)
+{
+ if (user_data != NULL && !strcmp((char *)user_data, "enable")) {
+ if (adapter_state == BT_ADAPTER_ENABLED && result == BT_ERROR_NONE) {
+ tet_printf("Callback: BT was enabled.");
+ callback_result = true;
+ } else {
+ tet_printf("Callback: BT was not enabled.");
+ }
+
+ if (mainloop)
+ g_main_loop_quit(mainloop);
+ } else if (user_data != NULL && !strcmp((char *)user_data, "disable")) {
+ if (adapter_state == BT_ADAPTER_DISABLED && result == BT_ERROR_NONE) {
+ tet_printf("Callback: BT was disabled.");
+ callback_result = true;
+ } else {
+ tet_printf("Callback: BT was not disabled.");
+ }
+
+ if (mainloop) {
+ g_main_loop_quit(mainloop);
+ }
+ }
+}
+
+void adapter_le_state_changed_cb_for_adapter_p(int result,
+ bt_adapter_le_state_e adapter_le_state,
+ void *user_data)
+{
+ if (user_data != NULL && !strcmp((char *)user_data, "enable")) {
+ if (adapter_le_state == BT_ADAPTER_LE_ENABLED && result == BT_ERROR_NONE) {
+ tet_printf("Callback: BT LE was enabled.");
+ callback_result = true;
+ } else {
+ tet_printf("Callback: BT LE was not enabled.");
+ }
+
+ if (mainloop)
+ g_main_loop_quit(mainloop);
+ } else if (user_data != NULL && !strcmp((char *)user_data, "disable")) {
+ if (adapter_le_state == BT_ADAPTER_LE_DISABLED && result == BT_ERROR_NONE) {
+ tet_printf("Callback: BT LEwas disabled.");
+ callback_result = true;
+ } else {
+ tet_printf("Callback: BT LE was not disabled.");
+ }
+
+ if (mainloop) {
+ g_main_loop_quit(mainloop);
+ }
+ }
+}
+
+void device_discovery_state_changed_cb_for_adapter_p(int result,
+ bt_adapter_device_discovery_state_e discovery_state,
+ bt_device_info_s *device_info,
+ void *user_data)
+{
+ tet_printf("bt_adapter_device_discovery_state_changed_cb was called");
+
+ if (user_data != NULL && !strcmp((char *)user_data, "enable")) {
+ if (discovery_state == BT_ADAPTER_DEVICE_DISCOVERY_FINISHED) {
+ tet_printf("Callback: bt_adapter_device_discovery_state_changed_cb_for_adapter_p was called \
+ and device discovery ends.");
+ if (mainloop) {
+ g_main_loop_quit(mainloop);
+ }
+ }
+ }
+}
+
+void adapter_name_changed_cb_for_adapter_p(char *device_name, void *user_data)
+{
+ tet_printf("bt_adapter_name_changed_cb_for_adapter_p was called: %s",
+ (char *)device_name);
+
+ if (user_data != NULL && !strcmp((char *)user_data, "set_name")) {
+ if (!strcmp(device_name, adapter_name))
+ callback_result = true;
+ }
+
+ if (mainloop)
+ g_main_loop_quit(mainloop);
+
+}
+
+void adapter_visibility_mode_changed_cb_for_adpater_p(int result,
+ bt_adapter_visibility_mode_e visibility_mode,
+ void *user_data)
+{
+ tet_printf("bt_adapter_visibility_mode_changed_cb was called: %d", visibility_mode);
+
+ if (user_data != NULL && !strcmp((char *)user_data, "set_visibility")) {
+ if (result == BT_ERROR_NONE) {
+ if (visibility_mode == adapter_visibility_mode) {
+ callback_result = true;
+ } else {
+ tet_printf("Callback: adapter_visibility_mode_changed_cb_for_adpater_p() was called but visibility mode is not same.");
+ tet_printf("Callback: actual visibility mode : %d", visibility_mode);
+ callback_result = false;
+ }
+ } else {
+ tet_printf("\n Callback: adapter_visibility_mode_changed_cb_for_adpater_p() was called but failed.");
+ callback_result = false;
+ }
+ }
+
+ if (mainloop)
+ g_main_loop_quit(mainloop);
+}
+
+void adapter_connectable_changed_cb_for_adpater_p(int result, bool connectable,
+ void *user_data)
+{
+ tet_printf("adapter_connectable_changed_cb_for_adapter_p was called.");
+ if (result == BT_ERROR_NONE) {
+ tet_printf("Callback: Connectable Changed");
+ tet_printf("%s", connectable ? "Connectable" : "Non-connectable");
+ callback_result = true;
+ } else {
+ tet_printf("Callback: adapter_connectable_changed_cb_for_adpater_p() was called but failed.");
+ callback_result = false;
+ }
+ if (mainloop)
+ g_main_loop_quit(mainloop);
+}
+
+/**
+ * @brief Positive test case of bt_initialize()
+ */
+static void utc_network_bluetooth_initialize_p(void)
+{
+ int ret = bt_initialize();
+ dts_check_eq("bt_initialize", ret, BT_ERROR_NONE,
+ "bt_initialize() failed.");
+}
+
+/**
+ * @brief Positive test case of bt_deinitialize()
+ */
+static void utc_network_bluetooth_deinitialize_p(void)
+{
+ int ret = bt_deinitialize();
+ dts_check_eq("bt_deinitialize", ret,
+ BT_ERROR_NONE, "bt_deinitialize() failed.");
+}
+
+/**
+ * @brief Positive test case of bt_adapter_set_state_changed_cb()
+ */
+static void utc_network_bluetooth_adapter_set_state_changed_cb_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_adapter_set_state_changed_cb(adapter_state_changed_cb_for_adapter_p, NULL);
+ dts_check_eq("bt_adapter_set_state_changed_cb", ret, BT_ERROR_NONE,
+ "bt_adapter_set_state_changed_cb failed.");
+}
+
+/**
+ * @brief Positive test case of bt_adapter_set_name_changed_cb()
+ */
+static void utc_network_bluetooth_adapter_set_name_changed_cb_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ int timeout_id = 0;
+
+ ret = bt_adapter_set_name_changed_cb(adapter_name_changed_cb_for_adapter_p, NULL);
+ if (ret == BT_ERROR_NONE) {
+ timeout_id = g_timeout_add(10000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ }
+ dts_check_eq("bt_adapter_set_name_changed_cb", ret, BT_ERROR_NONE,
+ "bt_adapter_set_name_changed_cb failed.");
+}
+
+/**
+ * @brief Positive test case of bt_adapter_set_visibility_mode_changed_cb()
+ */
+static void utc_network_bluetooth_adapter_set_visibility_mode_changed_cb_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ int timeout_id = 0;
+
+ ret = bt_adapter_set_visibility_mode_changed_cb(
+ adapter_visibility_mode_changed_cb_for_adpater_p, NULL);
+ if (ret == BT_ERROR_NONE) {
+ timeout_id = g_timeout_add(10000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ }
+ dts_check_eq("bt_adapter_set_visibility_mode_changed_cb", ret,
+ BT_ERROR_NONE,
+ "bt_adapter_set_visibility_mode_changed_cb failed.");
+}
+
+static void utc_network_bluetooth_adapter_set_connectable_changed_cb_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_adapter_set_connectable_changed_cb(
+ adapter_connectable_changed_cb_for_adpater_p, NULL);
+ dts_check_eq("bt_adapter_set_connectable_changed_cb", ret,
+ BT_ERROR_NONE,
+ "bt_adapter_set_connectable_changed_cb failed.");
+}
+
+/**
+ * @brief Positive test case of bt_adapter_enable()
+ */
+static void utc_network_bluetooth_adapter_enable_p(void)
+{
+ int timeout_id = 0;
+ callback_result = false;
+ bt_error_e ret = BT_ERROR_NONE;
+
+ if (bt_adapter_set_state_changed_cb(adapter_state_changed_cb_for_adapter_p, "enable") != BT_ERROR_NONE) {
+ dts_fail("bt_adapter_enable",
+ "bt_adapter_set_state_changed_cb() failed.");
+ }
+
+ ret = bt_adapter_enable();
+ if (ret == BT_ERROR_NONE) {
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ } else if (ret == BT_ERROR_ALREADY_DONE) {
+ callback_result = true;
+ } else {
+ dts_fail("bt_adapter_enable", "bt_adapter_enable() failed.");
+ bt_adapter_unset_state_changed_cb();
+ return;
+ }
+
+ tet_printf("callback_result: %d", callback_result);
+ bt_adapter_unset_state_changed_cb();
+ dts_check_eq("bt_adapter_enable", callback_result, true,
+ "BT was not enabled.");
+}
+
+/**
+ * @brief Positive test case of bt_adapter_get_state()
+ */
+static void utc_network_bluetooth_adapter_get_state_p(void)
+{
+ bt_adapter_state_e adapter_state = BT_ADAPTER_DISABLED;
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_adapter_get_state(&adapter_state);
+ if (ret == BT_ERROR_NONE && adapter_state == BT_ADAPTER_ENABLED) {
+ dts_pass("bt_adapter_get_state",
+ "bt_adapter_get_state() succeeded.");
+ } else {
+ dts_fail("bt_adapter_get_state",
+ "bt_adapter_get_state() failed.");
+ }
+}
+
+/**
+ * @brief Positive test case of bt_adapter_get_address().
+ */
+static void utc_network_bluetooth_adapter_get_address_p(void)
+{
+ char *address = NULL;
+ int ret = bt_adapter_get_address(&address);
+
+ if (address != NULL)
+ tet_printf("device address: %s", address);
+
+ dts_check_eq("bt_adapter_get_address", ret, BT_ERROR_NONE,
+ "bt_adapter_get_address() failed.");
+}
+
+/**
+ * @brief Positive test case of bt_adapter_get_name().
+ */
+static void utc_network_bluetooth_adapter_get_name_p(void)
+{
+ char *name = NULL;
+ int ret = bt_adapter_get_name(&name);
+
+ if (name != NULL)
+ tet_printf("device name : %s", name);
+
+ memset(adapter_name, 0x00, sizeof(adapter_name));
+ g_strlcpy(adapter_name, name, sizeof(adapter_name));
+
+ dts_check_eq("bt_adapter_get_name", ret, BT_ERROR_NONE, \
+ "bt_adapter_get_name() failed.");
+}
+
+/**
+ * @brief Positive test case of bt_adapter_get_visibility().
+ */
+static void utc_network_bluetooth_adapter_get_visibility_p(void)
+{
+ bt_adapter_visibility_mode_e mode = BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE;
+ int dur = 1;
+ int ret = bt_adapter_get_visibility(&mode, &dur);
+
+ tet_printf("visibility mode : %d", mode);
+ if (mode == BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE) {
+ adapter_visibility_mode = BT_ADAPTER_VISIBILITY_MODE_LIMITED_DISCOVERABLE;
+ } else if (mode == BT_ADAPTER_VISIBILITY_MODE_GENERAL_DISCOVERABLE) {
+ adapter_visibility_mode = BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE;
+ } else
+ adapter_visibility_mode = BT_ADAPTER_VISIBILITY_MODE_GENERAL_DISCOVERABLE;
+
+ dts_check_eq("bt_adapter_get_visibility", ret, BT_ERROR_NONE,
+ "bt_adapter_get_visibility() failed.");
+}
+
+/**
+ * @brief Positive test case of bt_adapter_set_name().
+ */
+static void utc_network_bluetooth_adapter_set_name_p(void)
+{
+ int timeout_id = 0;
+ char name[128] = "";
+
+ snprintf(name, 128, "%s_1", adapter_name);
+ strncpy(adapter_name, name, 128);
+
+ if (bt_adapter_set_name_changed_cb(adapter_name_changed_cb_for_adapter_p, "set_name") != BT_ERROR_NONE) {
+ dts_fail("bt_adapter_set_name",
+ "bt_adapter_set_name_changed_cb() failed.");
+ }
+
+ if (bt_adapter_set_name(adapter_name) == BT_ERROR_NONE) {
+ tet_printf("adapter_name_changed_cb_for_adapter_p() will be called");
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ bt_adapter_unset_name_changed_cb();
+ dts_check_eq("bt_adapter_set_name", callback_result, true,
+ "The local adapter name was not set.");
+ } else {
+ dts_fail("bt_adapter_set_name", "bt_adapter_set_name() failed");
+ }
+}
+
+/**
+ * @brief Positive test case of bt_adapter_set_visibility().
+ */
+static void utc_network_bluetooth_adapter_set_visibility_p(void)
+{
+ callback_result = false;
+ int timeout = 0;
+ int timeout_id = 0;
+
+ if (bt_adapter_set_visibility_mode_changed_cb(adapter_visibility_mode_changed_cb_for_adpater_p, "set_visibility") != BT_ERROR_NONE) {
+ dts_fail("bt_adapter_set_visibility",
+ "bt_adapter_set_visibility_mode_changed_cb() failed.");
+ }
+
+ tet_printf("set visibility mode: %d", adapter_visibility_mode);
+ if (adapter_visibility_mode == BT_ADAPTER_VISIBILITY_MODE_LIMITED_DISCOVERABLE) {
+ timeout = 90;
+ tet_printf("set timeout: %d", timeout);
+ }
+
+ if (bt_adapter_set_visibility(adapter_visibility_mode, timeout) == BT_ERROR_NONE) {
+ tet_printf("bt_adapter_visibility_changed_cb() will be called");
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ bt_adapter_unset_visibility_mode_changed_cb();
+ dts_check_eq("bt_adapter_set_visibility", callback_result, true,
+ "The visibility of BT was not set.");
+ } else {
+ dts_fail("bt_adapter_set_visibility",
+ "bt_adapter_set_visibility() failed");
+ }
+}
+
+/**
+ * @brief Positive test case of bt_adapter_le_add_white_list
+ */
+static void utc_network_bluetooth_adapter_add_white_list_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_adapter_le_add_white_list(remote_address);
+ dts_check_eq("bt_adapter_le_add_white_list", ret, BT_ERROR_NONE,
+ "bt_adapter_le_add_white_list() failed.");
+}
+
+/**
+ * @brief Positive test case of bt_adapter_le_clear_white_list
+ */
+static void utc_network_bluetooth_adapter_clear_white_list_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_adapter_le_clear_white_list();
+ dts_check_eq("bt_adapter_le_clear_white_list", ret, BT_ERROR_NONE,
+ "bt_adapter_le_clear_white_list() failed.");
+}
+
+/**
+ * @brief Positive test case of bt_adapter_le_remove_white_list
+ */
+static void utc_network_bluetooth_adapter_remove_white_list_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_adapter_le_remove_white_list(remote_address);
+ dts_check_eq("bt_adapter_le_remove_white_list", ret, BT_ERROR_NONE,
+ "bt_adapter_le_remove_white_list() failed.");
+}
+
+/**
+ * @brief Positive test case of bt_adapter_get_connectable
+ */
+static void utc_network_bluetooth_adapter_get_connectable_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ bool connectable = false;
+ ret = bt_adapter_get_connectable(&connectable);
+ dts_check_eq("bt_adapter_get_connectable", ret, BT_ERROR_NONE,
+ "bt_adapter_get_connectable() failed.");
+}
+
+/**
+ * @brief Positive test case of bt_adapter_set_connectable
+ */
+static void utc_network_bluetooth_adapter_set_connectable_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ bool connectable = false;
+ int timeout_id = 0;
+ callback_result = false;
+
+ ret = bt_adapter_get_connectable(&connectable);
+ ret = bt_adapter_set_connectable(!connectable);
+ if (ret == BT_ERROR_NONE) {
+ tet_printf("adapter_connectable_changed_cb will be called");
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ dts_check_eq("bt_adapter_set_connectable", ret, BT_ERROR_NONE,
+ "bt_adapter_set_connectable() failed.");
+ }
+}
+
+/**
+ * @brief Positive test case of bt_adapter_disable()
+ */
+static void utc_network_bluetooth_adapter_disable_p(void)
+{
+ callback_result = false;
+ int timeout_id = 0;
+
+ if (bt_adapter_set_state_changed_cb(adapter_state_changed_cb_for_adapter_p, "disable") != BT_ERROR_NONE) {
+ dts_fail("bt_adapter_disable",
+ "bt_adapter_set_state_changed_cb() failed.");
+ }
+
+ if (bt_adapter_disable() == BT_ERROR_NONE) {
+ tet_printf("bt_adapter_state_changed_cb() will be called");
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ bt_adapter_unset_state_changed_cb();
+ dts_check_eq("bt_adapter_disable", callback_result, true,
+ "BT was not disabled");
+ } else {
+ dts_fail("bt_adapter_disable", "bt_adapter_disable() failed");
+ }
+}
+
+/**
+ * @brief Positive test case of bt_adapter_unset_state_changed_cb()
+ */
+static void utc_network_bluetooth_adapter_unset_state_changed_cb_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_adapter_unset_state_changed_cb();
+ dts_check_eq("bt_adapter_unset_state_changed_cb", ret, BT_ERROR_NONE,
+ "bt_adapter_unset_state_changed_cb() failed.");
+}
+
+/**
+ * @brief Positive test case of bt_adapter_unset_name_changed_cb()
+ */
+static void utc_network_bluetooth_adapter_unset_name_changed_cb_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_adapter_unset_name_changed_cb();
+ dts_check_eq("bt_adapter_unset_name_changed_cb", ret, BT_ERROR_NONE,
+ "bt_adapter_unset_name_changed_cb() failed.");
+}
+
+/**
+ * @brief Positive test case of bt_adapter_unset_visibility_mode_changed_cb()
+ */
+static void utc_network_bluetooth_adapter_unset_visibility_mode_changed_cb_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_adapter_unset_visibility_mode_changed_cb();
+ dts_check_eq("bt_adapter_unset_visibility_mode_changed_cb", ret,
+ BT_ERROR_NONE,
+ "bt_adapter_unset_visibility_mode_changed_cb() failed.");
+}
+
+/**
+ * @brief Positive test case of bt_adapter_unset_connectable_changed_cb()
+ */
+static void utc_network_bluetooth_adapter_unset_connectable_changed_cb_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_adapter_unset_connectable_changed_cb();
+ dts_check_eq("bt_adapter_unset_connectable_changed_cb", ret,
+ BT_ERROR_NONE,
+ "bt_adapter_unset_connectable_changed_cb() failed.");
+}
+
+/**
+ * @brief Positive test case of bt_adapter_le_set_state_changed_cb()
+ */
+static void utc_network_bluetooth_adapter_set_le_state_changed_cb_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_adapter_le_set_state_changed_cb(
+ adapter_le_state_changed_cb_for_adapter_p, NULL);
+ dts_check_eq("bt_adapter_le_set_state_changed_cb", ret, BT_ERROR_NONE,
+ "bt_adapter_set_state_le_state_changed_cb failed.");
+}
+
+static void utc_network_bluetooth_adapter_le_enable_p(void)
+{
+ int timeout_id = 0;
+ callback_result = false;
+ bt_error_e ret = BT_ERROR_NONE;
+
+ if (bt_adapter_le_set_state_changed_cb(adapter_le_state_changed_cb_for_adapter_p, "enable") != BT_ERROR_NONE) {
+ dts_fail("bt_adapter_le_enable",
+ "bt_adapter_le_set_state_changed_cb() failed.");
+ }
+
+ ret = bt_adapter_le_enable();
+ if (ret == BT_ERROR_NONE) {
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ } else if (ret == BT_ERROR_ALREADY_DONE) {
+ callback_result = true;
+ } else {
+ dts_fail("bt_adapter_le_enable", "bt_adapter_le_enable() failed.");
+ bt_adapter_le_unset_state_changed_cb();
+ return;
+ }
+
+ tet_printf("callback_result: %d", callback_result);
+ bt_adapter_le_unset_state_changed_cb();
+ dts_check_eq("bt_adapter_le_enable", callback_result, true,
+ "BT LE was not enabled.");
+}
+
+static void utc_network_bluetooth_adapter_le_disable_p(void)
+{
+ callback_result = false;
+ int timeout_id = 0;
+
+ if (bt_adapter_le_set_state_changed_cb(adapter_le_state_changed_cb_for_adapter_p, "disable") != BT_ERROR_NONE) {
+ dts_fail("bt_adapter_le_disable",
+ "bt_adapter_le_set_state_changed_cb() failed.");
+ }
+
+ if (bt_adapter_le_disable() == BT_ERROR_NONE) {
+ tet_printf("bt_adapter_le_state_changed_cb() will be called");
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ bt_adapter_le_unset_state_changed_cb();
+ dts_check_eq("bt_adapter_le_disable", callback_result, true,
+ "BT LE was not disabled");
+ } else {
+ dts_fail("bt_adapter_le_disable", "bt_adapter_le_disable() failed");
+ }
+}
+
+static void utc_network_bluetooth_adapter_get_le_state_p(void)
+{
+ bt_adapter_le_state_e adapter_le_state = BT_ADAPTER_LE_DISABLED;
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_adapter_le_get_state(&adapter_le_state);
+ if (ret == BT_ERROR_NONE && adapter_le_state == BT_ADAPTER_LE_ENABLED) {
+ dts_pass("bt_adapter_le_get_state",
+ "bt_adapter_le_get_state() succeeded.");
+ } else {
+ dts_fail("bt_adapter_le_get_state",
+ "bt_adapter_le_get_state() failed.");
+ }
+}
+
+static void utc_network_bluetooth_adapter_unset_le_state_changed_cb_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_adapter_le_unset_state_changed_cb();
+ dts_check_eq("bt_adapter_le_unset_state_changed_cb", ret, BT_ERROR_NONE,
+ "bt_adapter_unset_state_le_changed_cb() failed.");
+}
diff --git a/TC/testcase/utc_network_bluetooth_audio_negative.c b/TC/testcase/utc_network_bluetooth_audio_negative.c
new file mode 100755
index 0000000..438b166
--- /dev/null
+++ b/TC/testcase/utc_network_bluetooth_audio_negative.c
@@ -0,0 +1,383 @@
+/*
+ * utc_network_bluetooth_audio_negative.c
+ *
+ * Created on: 19-Sep-2013
+ * Author: mrinal.m
+ */
+
+#include <tet_api.h>
+#include <bluetooth.h>
+#include <glib.h>
+
+enum {
+ POSITIVE_TC_IDX = 0x01,
+ NEGATIVE_TC_IDX,
+};
+
+static void startup(void);
+static void cleanup(void);
+
+static GMainLoop *mainloop;
+
+void (*tet_startup) (void) = startup;
+void (*tet_cleanup) (void) = cleanup;
+
+static void utc_network_bluetooth_audio_connect_n(void);
+static void utc_network_bluetooth_audio_disconnect_n(void);
+static void utc_network_bluetooth_audio_set_connection_n(void);
+static void utc_network_bluetooth_ag_get_speaker_gain_n(void);
+static void utc_network_bluetooth_ag_is_nrec_enabled_n(void);
+static void utc_network_bluetooth_ag_set_microphone_gain_changed_n(void);
+static void utc_network_bluetooth_ag_set_speaker_gain_changed_n(void);
+static void utc_network_bluetooth_ag_is_sco_opened_n(void);
+static void utc_network_bluetooth_ag_set_sco_state_changed_n(void);
+static void utc_network_bluetooth_ag_notify_call_event_n(void);
+static void utc_network_bluetooth_ag_notify_call_list_n(void);
+static void utc_network_bluetooth_ag_set_call_handling_event_cb_n(void);
+static void utc_network_bluetooth_ag_set_multi_call_handling_event_cb_n(void);
+static void utc_network_bluetooth_ag_set_vendor_cmd_cb_n(void);
+static void utc_network_bluetooth_ag_unset_vendor_cmd_cb_n(void);
+static void utc_network_bluetooth_ag_unset_multi_call_handling_event_cb_n(void);
+static void utc_network_bluetooth_ag_unset_dtmf_transmitted_cb_n(void);
+static void utc_network_bluetooth_ag_call_list_destroy_n(void);
+static void utc_network_bluetooth_ag_call_list_reset_n(void);
+static void utc_network_bluetooth_ag_call_list_add_n(void);
+static void utc_network_bluetooth_ag_set_dtmf_transmitted_cb_n(void);
+
+void adapter_state_changed_cb_for_audio_negative(int result,
+ bt_adapter_state_e adapter_state,
+ void *user_data);
+gboolean timeout_func(gpointer data);
+
+struct tet_testlist tet_testlist[] = {
+ {utc_network_bluetooth_audio_connect_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_audio_disconnect_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_audio_set_connection_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_ag_get_speaker_gain_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_ag_is_nrec_enabled_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_ag_set_microphone_gain_changed_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_ag_set_speaker_gain_changed_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_ag_is_sco_opened_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_ag_set_sco_state_changed_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_ag_notify_call_event_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_ag_notify_call_list_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_ag_set_call_handling_event_cb_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_ag_set_multi_call_handling_event_cb_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_ag_set_vendor_cmd_cb_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_ag_set_dtmf_transmitted_cb_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_ag_call_list_destroy_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_ag_call_list_reset_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_ag_call_list_add_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_ag_unset_vendor_cmd_cb_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_ag_unset_multi_call_handling_event_cb_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_ag_unset_dtmf_transmitted_cb_n, NEGATIVE_TC_IDX},
+ {NULL, 0},
+};
+
+static void startup(void)
+{
+ int ret = BT_ERROR_NONE;
+ int timeout_id = 0;
+
+ /* start of TC */
+ mainloop = g_main_loop_new(NULL, FALSE);
+
+ bt_initialize();
+
+ if (bt_audio_initialize() != BT_ERROR_NONE)
+ tet_printf("bt_audio_initialize failed");
+
+ if (bt_adapter_set_state_changed_cb(adapter_state_changed_cb_for_audio_negative, "startup") != BT_ERROR_NONE) {
+ tet_printf("DTS may fail because bt_adapter_set_state_changed_cb() failed");
+ }
+
+ tet_printf("bt_adapter_disable() was called.");
+ ret = bt_adapter_disable();
+ if (ret == BT_ERROR_NONE) {
+ tet_printf("bt_adapter_disable() succeeded.");
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ } else if (ret == BT_ERROR_NOT_ENABLED) {
+ tet_printf("Bluetooth adapter is not enabled.");
+ } else {
+ tet_printf("DTS may fail because bt_adapter_disable() failed");
+ }
+
+ if (bt_adapter_unset_state_changed_cb() != BT_ERROR_NONE) {
+ tet_printf("bt_adapter_set_state_changed_cb() failed.");
+ }
+
+ tet_printf("TC start");
+}
+
+static void cleanup(void)
+{
+ /* end of TC */
+ bt_deinitialize();
+ tet_printf("TC end.");
+}
+
+gboolean timeout_func(gpointer data)
+{
+ tet_printf("Callback: Timeout.");
+ g_main_loop_quit((GMainLoop *) data);
+ return FALSE;
+}
+
+/**
+ * @brief Callback funtions
+ */
+void adapter_state_changed_cb_for_audio_negative(int result,
+ bt_adapter_state_e adapter_state,
+ void *user_data)
+{
+ tet_printf("Callback: bt_adapter_state_changed_cb was called.");
+ if (user_data != NULL && !strcmp((char *)user_data, "startup")) {
+ if (adapter_state == BT_ADAPTER_DISABLED && result == BT_ERROR_NONE) {
+ tet_printf("Callback: BT was disabled. DTS will be started.");
+ } else {
+ tet_printf("Callback: BT was not disabled. DTS will be started but DTS may fail.");
+ }
+
+ if (mainloop) {
+ g_main_loop_quit(mainloop);
+ }
+ }
+}
+
+/**
+ * @brief Negative test case of bt_audio_connect()
+ */
+static void utc_network_bluetooth_audio_connect_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_audio_connect(NULL, BT_AUDIO_PROFILE_TYPE_HSP_HFP);
+ dts_check_eq("bt_audio_connect", ret,
+ BT_ERROR_INVALID_PARAMETER, "bt_audio_connect() failed.");
+}
+
+/**
+ * @brief Negative test case of bt_audio_disconnect()
+ */
+static void utc_network_bluetooth_audio_disconnect_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_audio_disconnect(NULL, BT_AUDIO_PROFILE_TYPE_A2DP);
+ dts_check_eq("bt_audio_disconnect", ret,
+ BT_ERROR_INVALID_PARAMETER,
+ "bt_audio_disconnect() failed.");
+}
+
+/**
+ * @brief Negative test case of bt_audio_set_connection_state_changed_cb()
+ */
+static void utc_network_bluetooth_audio_set_connection_n(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_audio_set_connection_state_changed_cb(NULL, NULL);
+ dts_check_eq("bt_audio_set_connection_state_changed_cb", ret,
+ BT_ERROR_INVALID_PARAMETER,
+ "bt_audio_set_connection_state_changed_cb() failed.");
+}
+
+/**
+ * @brief Negative test case of bt_ag_get_speaker_gain()
+ */
+static void utc_network_bluetooth_ag_get_speaker_gain_n(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_ag_get_speaker_gain(NULL);
+ dts_check_eq("bt_ag_get_speaker_gain", ret,
+ BT_ERROR_INVALID_PARAMETER,
+ "bt_ag_get_speaker_gain() failed.");
+}
+
+/**
+ * @brief Negative test case of bt_ag_is_nrec_enabled()
+ */
+static void utc_network_bluetooth_ag_is_nrec_enabled_n(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_ag_is_nrec_enabled(NULL);
+ dts_check_eq("bt_ag_is_nrec_enabled", ret,
+ BT_ERROR_INVALID_PARAMETER,
+ "bt_ag_is_nrec_enabled() failed.");
+}
+
+/**
+ * @brief Negative test case of bt_ag_set_microphone_gain_changed_cb()
+ */
+static void utc_network_bluetooth_ag_set_microphone_gain_changed_n(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_ag_set_microphone_gain_changed_cb(NULL, NULL);
+ dts_check_eq("bt_ag_set_microphone_gain_changed_cb", ret,
+ BT_ERROR_INVALID_PARAMETER,
+ "bt_ag_set_microphone_gain_changed_cb() failed.");
+}
+
+/**
+ * @brief Negative test case of bt_ag_set_speaker_gain_changed_cb()
+ */
+static void utc_network_bluetooth_ag_set_speaker_gain_changed_n(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_ag_set_speaker_gain_changed_cb(NULL, NULL);
+ dts_check_eq("bt_ag_set_speaker_gain_changed_cb", ret,
+ BT_ERROR_INVALID_PARAMETER,
+ "bt_ag_set_speaker_gain_changed_cb() failed.");
+}
+
+/**
+ * @brief Negative test case of bt_ag_is_sco_opened()
+ */
+static void utc_network_bluetooth_ag_is_sco_opened_n(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_ag_is_sco_opened(NULL);
+ dts_check_eq("bt_ag_is_sco_opened", ret,
+ BT_ERROR_INVALID_PARAMETER,
+ "bt_ag_is_sco_opened() failed.");
+}
+
+/**
+ * @brief Negative test case of bt_ag_set_sco_state_changed_cb()
+ */
+static void utc_network_bluetooth_ag_set_sco_state_changed_n(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_ag_set_sco_state_changed_cb(NULL, NULL);
+ dts_check_eq("bt_ag_set_sco_state_changed_cb", ret,
+ BT_ERROR_INVALID_PARAMETER,
+ "bt_ag_set_sco_state_changed_cb() failed.");
+}
+
+/**
+ * @brief Negative test case of bt_ag_notify_call_event()
+ */
+static void utc_network_bluetooth_ag_notify_call_event_n(void)
+{
+ int ret = BT_ERROR_NONE;
+ unsigned int call_id = 0;
+ ret = bt_ag_notify_call_event(BT_AG_CALL_EVENT_INCOMING, call_id, NULL);
+ dts_check_eq("bt_ag_notify_call_event", ret,
+ BT_ERROR_INVALID_PARAMETER,
+ "bt_ag_notify_call_event() failed.");
+}
+
+/**
+ * @brief Negative test case of bt_ag_notify_call_list()
+ */
+static void utc_network_bluetooth_ag_notify_call_list_n(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_ag_notify_call_list(NULL);
+ dts_check_eq("bt_ag_notify_call_list", ret,
+ BT_ERROR_INVALID_PARAMETER,
+ "bt_ag_notify_call_list() failed.");
+}
+
+/**
+ * @brief Negative test case of bt_ag_set_call_handling_event_cb()
+ */
+static void utc_network_bluetooth_ag_set_call_handling_event_cb_n(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_ag_set_call_handling_event_cb(NULL, NULL);
+ dts_check_eq("bt_ag_set_call_handling_event_cb", ret,
+ BT_ERROR_INVALID_PARAMETER,
+ "bt_ag_set_call_handling_event_cb() failed.");
+}
+
+/**
+ * @brief Negative test case of bt_ag_set_multi_call_handling_event_cb()
+ */
+static void utc_network_bluetooth_ag_set_multi_call_handling_event_cb_n(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_ag_set_multi_call_handling_event_cb(NULL, NULL);
+ dts_check_eq("bt_ag_set_multi_call_handling_event_cb", ret,
+ BT_ERROR_INVALID_PARAMETER,
+ "bt_ag_set_multi_call_handling_event_cb() failed.");
+}
+
+/**
+ * @brief Negative test case of bt_ag_set_dtmf_transmitted_cb()
+ */
+static void utc_network_bluetooth_ag_set_dtmf_transmitted_cb_n(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_ag_set_dtmf_transmitted_cb(NULL, NULL);
+ dts_check_eq("bt_ag_set_dtmf_transmitted_cb", ret,
+ BT_ERROR_INVALID_PARAMETER,
+ "bt_ag_set_dtmf_transmitted_cb() failed.");
+
+}
+
+/**
+ * @brief Negative test case of bt_ag_unset_multi_call_handling_event_cb()
+ */
+static void utc_network_bluetooth_ag_unset_multi_call_handling_event_cb_n(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_deinitialize();
+ ret = bt_ag_unset_multi_call_handling_event_cb();
+ dts_check_eq("bt_ag_unset_multi_call_handling_event_cb", ret,
+ BT_ERROR_NOT_INITIALIZED,
+ "BT_ERROR_NOT_INITIALIZED must be returned when BT is not initialized.");
+}
+
+/**
+ * @brief Negative test case of bt_ag_unset_dtmf_transmitted_cb()
+ */
+static void utc_network_bluetooth_ag_unset_dtmf_transmitted_cb_n(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_deinitialize();
+ ret = bt_ag_unset_dtmf_transmitted_cb();
+ dts_check_eq("bt_ag_unset_dtmf_transmitted_cb", ret,
+ BT_ERROR_NOT_INITIALIZED,
+ "BT_ERROR_NOT_INITIALIZED must be returned when BT is not initialized.");
+}
+
+/**
+ * @brief Negative test case of bt_call_list_destroy()
+ */
+static void utc_network_bluetooth_ag_call_list_destroy_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_call_list_destroy(NULL);
+ dts_check_eq("bt_call_list_destroy", ret, BT_ERROR_INVALID_PARAMETER,
+ "bt_call_list_destroy() failed.");
+}
+
+/**
+ * @brief Negative test case of bt_call_list_reset()
+ */
+static void utc_network_bluetooth_ag_call_list_reset_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_call_list_reset(NULL);
+ dts_check_eq("bt_call_list_reset", ret, BT_ERROR_INVALID_PARAMETER,
+ "bt_call_list_reset() failed.");
+}
+
+/**
+ * @brief Negative test case of bt_call_list_add()
+ */
+static void utc_network_bluetooth_ag_call_list_add_n(void)
+{
+ int ret = BT_ERROR_NONE;
+ unsigned int call_id = 0;
+ const char *phone_number = "9663868998";
+
+ ret = bt_call_list_add(NULL, call_id, BT_AG_CALL_STATE_INCOMING, phone_number);
+ dts_check_eq("bt_call_list_add", ret, BT_ERROR_INVALID_PARAMETER,
+ "bt_call_list_add() failed.");
+
+}
diff --git a/TC/testcase/utc_network_bluetooth_audio_positive.c b/TC/testcase/utc_network_bluetooth_audio_positive.c
new file mode 100755
index 0000000..186bdb2
--- /dev/null
+++ b/TC/testcase/utc_network_bluetooth_audio_positive.c
@@ -0,0 +1,667 @@
+/*
+ * utc_network_bluetooth_audio_positive.c
+ *
+ * Created on: 19-Sep-2013
+ * Author: mrinal.m
+ */
+
+#include <tet_api.h>
+#include <bluetooth.h>
+#include <glib.h>
+
+#define CONFIG_FILE_PATH "/opt/home/capi-network-bluetooth/tetware.conf"
+
+enum {
+ POSITIVE_TC_IDX = 0x01,
+ NEGATIVE_TC_IDX,
+};
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup) (void) = startup;
+void (*tet_cleanup) (void) = cleanup;
+
+char *remote_address;
+static GMainLoop *mainloop;
+
+static void utc_network_bluetooth_audio_initialize_p(void);
+static void utc_network_bluetooth_audio_deinitialize_p(void);
+static void utc_network_bluetooth_audio_connect_p(void);
+static void utc_network_bluetooth_audio_disconnect_p(void);
+static void utc_network_bluetooth_audio_set_connection_p(void);
+static void utc_network_bluetooth_audio_unset_connection_p(void);
+static void utc_network_bluetooth_ag_notify_speaker_gain_p(void);
+static void utc_network_bluetooth_ag_get_speaker_gain_p(void);
+static void utc_network_bluetooth_ag_is_nrec_enabled_p(void);
+static void utc_network_bluetooth_ag_set_microphone_gain_changed_p(void);
+static void utc_network_bluetooth_ag_unset_microphone_gain_changed_p(void);
+static void utc_network_bluetooth_ag_set_speaker_gain_changed_p(void);
+static void utc_network_bluetooth_ag_unset_speaker_gain_changed_p(void);
+static void utc_network_bluetooth_ag_open_sco_p(void);
+static void utc_network_bluetooth_ag_close_sco_p(void);
+static void utc_network_bluetooth_ag_is_sco_opened_p(void);
+static void utc_network_bluetooth_ag_set_sco_state_changed_p(void);
+static void utc_network_bluetooth_ag_unset_sco_state_changed_p(void);
+static void utc_network_bluetooth_ag_notify_call_event_p(void);
+static void utc_network_bluetooth_ag_notify_call_list_p(void);
+static void utc_network_bluetooth_ag_notify_voice_recognition_state_p(void);
+static void utc_network_bluetooth_ag_set_call_handling_event_cb_p(void);
+static void utc_network_bluetooth_ag_unset_call_handling_event_cb_p(void);
+static void utc_network_bluetooth_ag_set_multi_call_handling_event_cb_p(void);
+static void utc_network_bluetooth_ag_unset_multi_call_handling_event_cb_p(void);
+static void utc_network_bluetooth_ag_set_dtmf_transmitted_cb_p(void);
+static void utc_network_bluetooth_ag_unset_dtmf_transmitted_cb_p(void);
+static void utc_network_bluetooth_ag_set_vendor_cmd_cb_p(void);
+static void utc_network_bluetooth_ag_unset_vendor_cmd_cb_p(void);
+static void utc_network_bluetooth_ag_call_list_create_p(void);
+static void utc_network_bluetooth_ag_call_list_destroy_p(void);
+static void utc_network_bluetooth_ag_call_list_reset_p(void);
+static void utc_network_bluetooth_ag_call_list_add_p(void);
+static void utc_network_bluetooth_ag_ca2dp_set_content_protection_p(void);
+
+void connection_state_changed_cb_for_audio_p(int result, bool connected,
+ const char *remote_address,
+ bt_audio_profile_type_e type,
+ void *user_data);
+void dtmf_transmitted_cb_for_ag_p(const char *dtmf, void *user_data);
+void multi_call_handling_event_cb_for_ag_p(bt_ag_multi_call_handling_event_e event, void *user_data);
+void call_handling_event_cb_for_ag_p(bt_ag_call_handling_event_e event,
+ unsigned int call_id, void *user_data);
+void sco_state_changed_cb_for_ag_p(int result, bool opened, void *user_data);
+void speaker_gain_changed_cb_for_ag_p(int gain, void *user_data);
+void microphone_gain_changed_cb_for_ag_p(int gain, void *user_data);
+void adapter_state_changed_cb_for_audio_p(int result,
+ bt_adapter_state_e adapter_state,
+ void *user_data);
+
+gboolean timeout_func(gpointer data);
+
+struct tet_testlist tet_testlist[] = {
+ {utc_network_bluetooth_audio_initialize_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_audio_set_connection_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_audio_connect_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_ag_open_sco_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_ag_set_microphone_gain_changed_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_ag_set_speaker_gain_changed_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_ag_notify_speaker_gain_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_ag_get_speaker_gain_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_ag_is_nrec_enabled_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_ag_unset_microphone_gain_changed_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_ag_unset_speaker_gain_changed_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_ag_set_sco_state_changed_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_ag_set_vendor_cmd_cb_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_ag_unset_vendor_cmd_cb_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_ag_is_sco_opened_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_ag_close_sco_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_ag_notify_call_event_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_ag_notify_call_list_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_ag_notify_voice_recognition_state_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_ag_set_call_handling_event_cb_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_ag_unset_call_handling_event_cb_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_ag_set_multi_call_handling_event_cb_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_ag_unset_multi_call_handling_event_cb_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_ag_set_dtmf_transmitted_cb_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_ag_unset_dtmf_transmitted_cb_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_ag_unset_sco_state_changed_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_ag_call_list_create_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_ag_call_list_destroy_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_ag_call_list_reset_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_ag_call_list_add_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_ag_ca2dp_set_content_protection_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_audio_disconnect_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_audio_unset_connection_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_audio_deinitialize_p, POSITIVE_TC_IDX},
+ {NULL, 0},
+};
+
+int get_value_from_file(void)
+{
+ FILE *fp;
+ char *token;
+ char buf[100];
+
+ fp = fopen(CONFIG_FILE_PATH, "r");
+ if (fp == NULL) {
+ tet_printf("Default configuration is used\n");
+ return -1;
+ }
+ while (fgets(buf, sizeof(buf), fp)) {
+ if (buf[0] == '#' || buf[0] == '\n')
+ continue;
+
+ token = strrchr(buf, '\n');
+ if (token == NULL) {
+ tet_printf("g_conf is too long\n");
+ break;
+ }
+ *token = '\0';
+
+ token = strtok(buf, "=");
+ if (token == NULL) {
+ continue;
+ }
+ if (strcasecmp(token, "BT_ADDR_HEADSET") == 0) {
+ token = strtok(NULL, "=");
+ remote_address = strdup(token);
+ fclose(fp);
+ return 0;
+ }
+ }
+ fclose(fp);
+ return -1;
+}
+
+static void startup(void)
+{
+ bt_error_e ret = BT_ERROR_NONE;
+ int timeout_id = 0;
+
+ if(get_value_from_file() == -1) {
+ tet_printf("Failed to read.");
+ }
+
+ /* start of TC */
+ tet_printf("TC start.");
+ mainloop = g_main_loop_new(NULL, FALSE);
+
+ bt_initialize();
+
+ if (bt_adapter_set_state_changed_cb(adapter_state_changed_cb_for_audio_p, "startup") != BT_ERROR_NONE) {
+ tet_printf("DTS may fail because bt_adapter_set_state_changed_cb() failed");
+ }
+
+ tet_printf("bt_adapter_enable() was called.");
+ ret = bt_adapter_enable();
+ if (ret == BT_ERROR_NONE) {
+ tet_printf("bt_adapter_enable() succeeded.");
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ } else if (ret != BT_ERROR_ALREADY_DONE) {
+ tet_printf("DTS may fail because bt_adapter_disable() failed");
+ }
+
+ if (bt_adapter_unset_state_changed_cb() != BT_ERROR_NONE) {
+ tet_printf("bt_adapter_set_state_changed_cb() failed.");
+ }
+
+ tet_printf("TC start");
+}
+
+static void cleanup(void)
+{
+ /* end of TC */
+ bt_deinitialize();
+ tet_printf("TC end.");
+}
+
+gboolean timeout_func(gpointer data)
+{
+ tet_printf("[%s] Callback: Timeout.", __FUNCTION__);
+ g_main_loop_quit((GMainLoop *) data);
+ return FALSE;
+}
+
+/**
+ * @brief Callback funtions
+ */
+
+void adapter_state_changed_cb_for_audio_p(int result,
+ bt_adapter_state_e adapter_state,
+ void *user_data)
+{
+
+}
+
+void connection_state_changed_cb_for_audio_p(int result, bool connected,
+ const char *remote_address,
+ bt_audio_profile_type_e type,
+ void *user_data)
+{
+
+}
+
+void microphone_gain_changed_cb_for_ag_p(int gain, void *user_data)
+{
+
+}
+
+void speaker_gain_changed_cb_for_ag_p(int gain, void *user_data)
+{
+
+}
+
+void sco_state_changed_cb_for_ag_p(int result, bool opened, void *user_data)
+{
+
+}
+
+void call_handling_event_cb_for_ag_p(bt_ag_call_handling_event_e event,
+ unsigned int call_id, void *user_data)
+{
+
+}
+
+void multi_call_handling_event_cb_for_ag_p(bt_ag_multi_call_handling_event_e event, void *user_data)
+{
+
+}
+
+void dtmf_transmitted_cb_for_ag_p(const char *dtmf, void *user_data)
+{
+
+}
+
+void vendor_cmd_event_cb_for_ag_p(char *cmd, void *user_data)
+{
+ tet_printf("Callback : vendor_cmd_cb was called.");
+ tet_printf("Vendor Command[%s]", cmd);
+}
+
+/**
+ * @brief Positive test case of bt_audio_initialize()
+ */
+static void utc_network_bluetooth_audio_initialize_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_audio_initialize();
+ dts_check_eq("bt_audio_initialize", ret, BT_ERROR_NONE,
+ "bt_audio_initialize() failed. %x", ret);
+
+}
+
+/**
+ * @brief Positive test case of bt_audio_connect()
+ */
+static void utc_network_bluetooth_audio_connect_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ const char *remote_address = "00:23:78:AB:C4:20";
+ ret = bt_audio_connect(remote_address, BT_AUDIO_PROFILE_TYPE_HSP_HFP);
+ dts_check_eq("bt_audio_connect", ret, BT_ERROR_NONE,
+ "bt_audio_connect() failed. %x", ret);
+}
+
+/**
+ * @brief Positive test case of bt_audio_disconnect()
+ */
+static void utc_network_bluetooth_audio_disconnect_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_audio_disconnect(remote_address, BT_AUDIO_PROFILE_TYPE_HSP_HFP);
+ dts_check_eq("bt_audio_disconnect", ret, BT_ERROR_NONE,
+ "bt_audio_disconnect() failed. %x", ret);
+}
+
+/**
+ * @brief Positive test case of bt_audio_set_connection_state_changed_cb()
+ */
+static void utc_network_bluetooth_audio_set_connection_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_audio_set_connection_state_changed_cb
+ (connection_state_changed_cb_for_audio_p, NULL);
+ dts_check_eq("bt_audio_set_connection_state_changed_cb", ret,
+ BT_ERROR_NONE,
+ "bt_audio_set_connection_state_changed_cb() failed.");
+}
+
+/**
+ * @brief Positive test case of bt_audio_unset_connection_state_changed_cb()
+ */
+static void utc_network_bluetooth_audio_unset_connection_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_audio_unset_connection_state_changed_cb();
+ dts_check_eq("bt_audio_set_connection_state_changed_cb", ret,
+ BT_ERROR_NONE,
+ "bt_audio_set_connection_state_changed_cb() failed.");
+}
+
+/**
+ * @brief Positive test case of bt_ag_notify_speaker_gain()
+ */
+static void utc_network_bluetooth_ag_notify_speaker_gain_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ int gain = 10;
+ ret = bt_ag_notify_speaker_gain(gain);
+ dts_check_eq("bt_ag_notify_speaker_gain", ret, BT_ERROR_NONE,
+ "bt_ag_notify_speaker_gain() failed.%x", ret);
+}
+
+/**
+ * @brief Positive test case of bt_ag_get_speaker_gain()
+ */
+static void utc_network_bluetooth_ag_get_speaker_gain_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ int gain = 0;
+ ret = bt_ag_get_speaker_gain(&gain);
+ dts_check_eq("bt_ag_get_speaker_gain", ret, BT_ERROR_NONE,
+ "bt_ag_get_speaker_gain() failed.");
+
+}
+
+/**
+ * @brief Positive test case of bt_ag_is_nrec_enabled()
+ */
+static void utc_network_bluetooth_ag_is_nrec_enabled_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ bool enabled = 1;
+ ret = bt_ag_is_nrec_enabled(&enabled);
+ dts_check_eq("bt_ag_is_nrec_enabled", ret, BT_ERROR_NONE,
+ "bt_ag_is_nrec_enabled() failed.");
+
+}
+
+/**
+ * @brief Positive test case of bt_ag_set_microphone_gain_changed_cb()
+ */
+static void utc_network_bluetooth_ag_set_microphone_gain_changed_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_ag_set_microphone_gain_changed_cb(microphone_gain_changed_cb_for_ag_p, NULL);
+ dts_check_eq("bt_ag_set_microphone_gain_changed_cb", ret, BT_ERROR_NONE,
+ "bt_ag_set_microphone_gain_changed_cb() failed.");
+
+}
+
+/**
+ * @brief Positive test case of bt_ag_unset_microphone_gain_changed_cb()
+ */
+static void utc_network_bluetooth_ag_unset_microphone_gain_changed_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_ag_unset_microphone_gain_changed_cb();
+ dts_check_eq("bt_ag_unset_microphone_gain_changed_cb", ret,
+ BT_ERROR_NONE,
+ "bt_ag_unset_microphone_gain_changed_cb() failed.");
+
+}
+
+/**
+ * @brief Positive test case of bt_ag_set_speaker_gain_changed_cb()
+ */
+static void utc_network_bluetooth_ag_set_speaker_gain_changed_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_ag_set_speaker_gain_changed_cb(speaker_gain_changed_cb_for_ag_p, NULL);
+ dts_check_eq("bt_ag_set_speaker_gain_changed_cb", ret, BT_ERROR_NONE,
+ "bt_ag_set_speaker_gain_changed_cb() failed.");
+
+}
+
+/**
+ * @brief Positive test case of bt_ag_unset_speaker_gain_changed_cb()
+ */
+static void utc_network_bluetooth_ag_unset_speaker_gain_changed_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_ag_unset_speaker_gain_changed_cb();
+ dts_check_eq("bt_ag_unset_speaker_gain_changed_cb", ret, BT_ERROR_NONE,
+ "bt_ag_unset_speaker_gain_changed_cb() failed.");
+
+}
+
+/**
+ * @brief Positive test case of bt_ag_open_sco()
+ */
+static void utc_network_bluetooth_ag_open_sco_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_ag_open_sco();
+ dts_check_eq("bt_ag_open_sco", ret, BT_ERROR_NONE,
+ "bt_ag_open_sco() failed.");
+
+}
+
+/**
+ * @brief Positive test case of bt_ag_close_sco()
+ */
+static void utc_network_bluetooth_ag_close_sco_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_ag_close_sco();
+ dts_check_eq("bt_ag_close_sco", ret, BT_ERROR_NONE,
+ "bt_ag_close_sco() failed.");
+
+}
+
+/**
+ * @brief Positive test case of bt_ag_is_sco_opened()
+ */
+static void utc_network_bluetooth_ag_is_sco_opened_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ bool opened = 1;
+ ret = bt_ag_is_sco_opened(&opened);
+ dts_check_eq("bt_ag_is_sco_opened", ret, BT_ERROR_NONE,
+ "bt_ag_is_sco_opened() failed.");
+
+}
+
+/**
+ * @brief Positive test case of bt_ag_set_sco_state_changed_cb()
+ */
+static void utc_network_bluetooth_ag_set_sco_state_changed_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_ag_set_sco_state_changed_cb(sco_state_changed_cb_for_ag_p, NULL);
+ dts_check_eq("bt_ag_set_sco_state_changed_cb", ret, BT_ERROR_NONE,
+ "bt_ag_set_sco_state_changed_cb() failed.");
+
+}
+
+/**
+ * @brief Positive test case of bt_ag_unset_sco_state_changed_cb()
+ */
+static void utc_network_bluetooth_ag_unset_sco_state_changed_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_ag_unset_sco_state_changed_cb();
+ dts_check_eq("bt_ag_unset_sco_state_changed_cb", ret, BT_ERROR_NONE,
+ "bt_ag_unset_sco_state_changed_cb() failed.");
+
+}
+
+/**
+ * @brief Positive test case of bt_ag_notify_call_event()
+ */
+static void utc_network_bluetooth_ag_notify_call_event_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ const char *phone_number = "9663868998";
+ unsigned int call_id = 0;
+ ret = bt_ag_notify_call_event(BT_AG_CALL_EVENT_INCOMING,
+ call_id, phone_number);
+ dts_check_eq("bt_ag_notify_call_event", ret, BT_ERROR_NONE,
+ "bt_ag_notify_call_event() failed.");
+
+}
+
+/**
+ * @brief Positive test case of bt_ag_notify_call_list()
+ */
+static void utc_network_bluetooth_ag_notify_call_list_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ bt_call_list_h handle;
+ const char *phone_number = "9663868998";
+
+ handle = g_malloc0(sizeof(bt_call_list_h));
+ bt_call_list_add(handle, 1, BT_AG_CALL_STATE_ACTIVE, phone_number);
+ ret = bt_ag_notify_call_list(handle);
+ dts_check_eq("bt_ag_notify_call_list", ret, BT_ERROR_NONE,
+ "bt_ag_notify_call_list() failed.");
+
+}
+
+/**
+ * @brief Positive test case of bt_ag_notify_voice_recognition_state()
+ */
+static void utc_network_bluetooth_ag_notify_voice_recognition_state_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ bool state = 1;
+
+ ret = bt_ag_notify_voice_recognition_state(state);
+ dts_check_eq("bt_ag_notify_voice_recognition_state", ret, BT_ERROR_NONE,
+ "bt_ag_notify_voice_recognition_state() failed.");
+
+}
+
+/**
+ * @brief Positive test case of bt_ag_set_call_handling_event_cb()
+ */
+static void utc_network_bluetooth_ag_set_call_handling_event_cb_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_ag_set_call_handling_event_cb(call_handling_event_cb_for_ag_p,
+ NULL);
+ dts_check_eq("bt_ag_set_call_handling_event_cb", ret, BT_ERROR_NONE,
+ "bt_ag_set_call_handling_event_cb() failed.");
+
+}
+
+/**
+ * @brief Positive test case of bt_ag_unset_call_handling_event_cb()
+ */
+static void utc_network_bluetooth_ag_unset_call_handling_event_cb_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_ag_unset_call_handling_event_cb();
+ dts_check_eq("bt_ag_unset_call_handling_event_cb", ret, BT_ERROR_NONE,
+ "bt_ag_unset_call_handling_event_cb() failed.");
+
+}
+
+/**
+ * @brief Positive test case of bt_ag_set_multi_call_handling_event_cb()
+ */
+static void utc_network_bluetooth_ag_set_multi_call_handling_event_cb_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_ag_set_multi_call_handling_event_cb(multi_call_handling_event_cb_for_ag_p, NULL);
+ dts_check_eq("bt_ag_set_multi_call_handling_event_cb", ret,
+ BT_ERROR_NONE,
+ "bt_ag_set_multi_call_handling_event_cb() failed.");
+
+}
+
+/**
+ * @brief Positive test case of bt_ag_unset_multi_call_handling_event_cb()
+ */
+static void utc_network_bluetooth_ag_unset_multi_call_handling_event_cb_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_ag_unset_multi_call_handling_event_cb();
+ dts_check_eq("bt_ag_unset_multi_call_handling_event_cb", ret,
+ BT_ERROR_NONE,
+ "bt_ag_unset_multi_call_handling_event_cb() failed.");
+
+}
+
+/**
+ * @brief Positive test case of bt_ag_set_dtmf_transmitted_cb()
+ */
+static void utc_network_bluetooth_ag_set_dtmf_transmitted_cb_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_ag_set_dtmf_transmitted_cb(dtmf_transmitted_cb_for_ag_p, NULL);
+ dts_check_eq("bt_ag_set_dtmf_transmitted_cb", ret, BT_ERROR_NONE,
+ "bt_ag_set_dtmf_transmitted_cb() failed.");
+
+}
+
+/**
+ * @brief Positive test case of bt_ag_unset_dtmf_transmitted_cb()
+ */
+static void utc_network_bluetooth_ag_unset_dtmf_transmitted_cb_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_ag_unset_dtmf_transmitted_cb();
+ dts_check_eq("bt_ag_unset_dtmf_transmitted_cb", ret, BT_ERROR_NONE,
+ "bt_ag_unset_dtmf_transmitted_cb() failed.");
+
+}
+
+/**
+ * @brief Positive test case of bt_call_list_create()
+ */
+static void utc_network_bluetooth_ag_call_list_create_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ bt_call_list_h handle;
+ const char *phone_number = "9663868998";
+
+ ret = bt_call_list_create(&handle);
+ ret = bt_call_list_add(handle, 1, BT_AG_CALL_STATE_ACTIVE, phone_number);
+
+ dts_check_eq("bt_call_list_create", ret, BT_ERROR_NONE,
+ "bt_call_list_create() failed.");
+}
+
+/**
+ * @brief Positive test case of bt_call_list_destroy()
+ */
+static void utc_network_bluetooth_ag_call_list_destroy_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ bt_call_list_h handle;
+ const char *phone_number = "9663868998";
+
+ handle = g_malloc0(sizeof(bt_call_list_h));
+ bt_call_list_add(handle, 1, BT_AG_CALL_STATE_ACTIVE, phone_number);
+ ret = bt_call_list_destroy(handle);
+ dts_check_eq("bt_call_list_destroy", ret, BT_ERROR_NONE,
+ "bt_call_list_destroy() failed.");
+}
+
+/**
+ * @brief Positive test case of bt_call_list_reset()
+ */
+static void utc_network_bluetooth_ag_call_list_reset_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ bt_call_list_h handle;
+ const char *phone_number = "9663868998";
+
+ handle = g_malloc0(sizeof(bt_call_list_h));
+ bt_call_list_add(handle, 1, BT_AG_CALL_STATE_ACTIVE, phone_number);
+ ret = bt_call_list_reset(handle);
+ dts_check_eq("bt_call_list_reset", ret, BT_ERROR_NONE,
+ "bt_call_list_reset() failed.");
+}
+
+/**
+ * @brief Positive test case of bt_call_list_add()
+ */
+static void utc_network_bluetooth_ag_call_list_add_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ unsigned int call_id = 0;
+ bt_call_list_h handle;
+ const char *phone_number = "9663868998";
+
+ handle = g_malloc0(sizeof(bt_call_list_h));
+ bt_call_list_add(handle, 1, BT_AG_CALL_STATE_ACTIVE, phone_number);
+ ret = bt_call_list_add(handle, call_id, BT_AG_CALL_STATE_INCOMING, phone_number);
+ dts_check_eq("bt_call_list_add", ret, BT_ERROR_NONE,
+ "bt_call_list_add() failed.");
+}
+
+/**
+ * @brief Positive test case of bt_audio_deinitialize()
+ */
+static void utc_network_bluetooth_audio_deinitialize_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_audio_deinitialize();
+ dts_check_eq("bt_audio_deinitialize", ret, BT_ERROR_NONE,
+ "bt_audio_deinitialize() failed.");
+}
diff --git a/TC/testcase/utc_network_bluetooth_avrcp_negative.c b/TC/testcase/utc_network_bluetooth_avrcp_negative.c
new file mode 100644
index 0000000..a62c7b4
--- /dev/null
+++ b/TC/testcase/utc_network_bluetooth_avrcp_negative.c
@@ -0,0 +1,174 @@
+/*
+ * utc_network_bluetooth_avrcp_negative.c
+ *
+ * Created on: 20-Sep-2013
+ * Author: mrinal.m
+ */
+
+#include "bluetooth.h"
+#include <tet_api.h>
+#include <glib.h>
+
+enum {
+ POSITIVE_TC_IDX = 0x01,
+ NEGATIVE_TC_IDX,
+};
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup) (void) = startup;
+void (*tet_cleanup) (void) = cleanup;
+
+const char target_name[128] = "dts_test";
+char target_address[18] = "";
+
+static GMainLoop *mainloop;
+
+static void utc_network_bluetooth_audio_initialize_n(void);
+static void utc_network_bluetooth_avrcp_set_equalizer_state_changed_n(void);
+static void utc_network_bluetooth_avrcp_set_repeat_mode_changed_n(void);
+static void utc_network_bluetooth_avrcp_set_shuffle_mode_changed_n(void);
+static void utc_network_bluetooth_avrcp_set_scan_mode_changed_n(void);
+
+
+void adapter_state_changed_cb_for_avrcp_n(int result,
+ bt_adapter_state_e adapter_state,
+ void *user_data);
+gboolean timeout_func(gpointer data);
+
+
+struct tet_testlist tet_testlist[] = {
+ {utc_network_bluetooth_audio_initialize_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_avrcp_set_equalizer_state_changed_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_avrcp_set_repeat_mode_changed_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_avrcp_set_shuffle_mode_changed_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_avrcp_set_scan_mode_changed_n, NEGATIVE_TC_IDX},
+ {NULL, 0},
+};
+
+
+static void startup(void)
+{
+ int ret = BT_ERROR_NONE;
+ int timeout_id = 0;
+
+ /* start of TC */
+ mainloop = g_main_loop_new(NULL, FALSE);
+
+ bt_initialize();
+ if (bt_adapter_set_state_changed_cb(adapter_state_changed_cb_for_avrcp_n, "startup") != BT_ERROR_NONE) {
+ tet_printf("DTS may fail because bt_adapter_set_state_changed_cb() failed");
+ }
+
+ tet_printf("bt_adapter_disable() was called.");
+ ret = bt_adapter_disable();
+ if (ret == BT_ERROR_NONE) {
+ tet_printf("bt_adapter_disable() succeeded.");
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ } else if (ret == BT_ERROR_NOT_ENABLED) {
+ tet_printf("Bluetooth adapter is not enabled.");
+ } else {
+ tet_printf("DTS may fail because bt_adapter_disable() failed");
+ }
+
+ if (bt_adapter_unset_state_changed_cb() != BT_ERROR_NONE) {
+ tet_printf("bt_adapter_set_state_changed_cb() failed.");
+ }
+
+ tet_printf("TC start");
+}
+
+static void cleanup(void)
+{
+ /* end of TC */
+ bt_deinitialize();
+ tet_printf("TC end.");
+}
+
+gboolean timeout_func(gpointer data)
+{
+ tet_printf("Callback: Timeout.");
+ g_main_loop_quit((GMainLoop *) data);
+ return FALSE;
+}
+
+/**
+ * @brief Negative test case of bt_avrcp_target_initialize()
+ */
+
+void adapter_state_changed_cb_for_avrcp_n(int result,
+ bt_adapter_state_e adapter_state,
+ void *user_data)
+{
+
+}
+
+static void utc_network_bluetooth_audio_initialize_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_avrcp_target_initialize(NULL, NULL);
+ dts_check_eq("bt_avrcp_target_initialize", ret,
+ BT_ERROR_INVALID_PARAMETER,
+ "bt_avrcp_target_initialize() failed.");
+
+}
+
+/**
+ * @brief Negative test case of bt_avrcp_set_equalizer_state_changed_cb()
+ */
+static void utc_network_bluetooth_avrcp_set_equalizer_state_changed_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_avrcp_set_equalizer_state_changed_cb(NULL, NULL);
+ dts_check_eq("bt_avrcp_set_equalizer_state_changed_cb", ret,
+ BT_ERROR_INVALID_PARAMETER,
+ "bt_avrcp_set_equalizer_state_changed_cb() failed.");
+
+}
+
+/**
+ * @brief Negative test case of bt_avrcp_set_repeat_mode_changed_cb()
+ */
+static void utc_network_bluetooth_avrcp_set_repeat_mode_changed_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_avrcp_set_repeat_mode_changed_cb(NULL, NULL);
+ dts_check_eq("bt_avrcp_set_repeat_mode_changed_cb", ret,
+ BT_ERROR_INVALID_PARAMETER,
+ "bt_avrcp_set_repeat_mode_changed_cb() failed.");
+
+}
+
+/**
+ * @brief Negative test case of bt_avrcp_set_shuffle_mode_changed_cb()
+ */
+static void utc_network_bluetooth_avrcp_set_shuffle_mode_changed_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_avrcp_set_shuffle_mode_changed_cb(NULL, NULL);
+ dts_check_eq("bt_avrcp_set_shuffle_mode_changed_cb", ret,
+ BT_ERROR_INVALID_PARAMETER,
+ "bt_avrcp_set_shuffle_mode_changed_cb() failed.");
+
+}
+
+/**
+ * @brief Negative test case of bt_avrcp_set_scan_mode_changed_cb()
+ */
+static void utc_network_bluetooth_avrcp_set_scan_mode_changed_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_avrcp_set_scan_mode_changed_cb(NULL, NULL);
+ dts_check_eq("bt_avrcp_set_scan_mode_changed_cb", ret,
+ BT_ERROR_INVALID_PARAMETER,
+ "bt_avrcp_set_scan_mode_changed_cb() failed.");
+
+}
diff --git a/TC/testcase/utc_network_bluetooth_avrcp_positive.c b/TC/testcase/utc_network_bluetooth_avrcp_positive.c
new file mode 100755
index 0000000..79e0688
--- /dev/null
+++ b/TC/testcase/utc_network_bluetooth_avrcp_positive.c
@@ -0,0 +1,398 @@
+/*
+ * utc_network_bluetooth_avrcp_positive.c
+ *
+ * Created on: 20-Sep-2013
+ * Author: mrinal.m
+ */
+
+#include <bluetooth.h>
+#include <tet_api.h>
+#include <glib.h>
+
+enum {
+ POSITIVE_TC_IDX = 0x01,
+ NEGATIVE_TC_IDX,
+};
+
+static void startup(void);
+static void cleanup(void);
+
+static GMainLoop *mainloop;
+
+void (*tet_startup) (void) = startup;
+void (*tet_cleanup) (void) = cleanup;
+
+void target_connection_state_changed_cb_for_avrcp_p(bool connected,
+ const char *remote_address,
+ void *user_data);
+void equalizer_state_changed_cb_for_avrcp_p(bt_avrcp_equalizer_state_e equalizer,
+ void *user_data);
+void repeat_mode_changed_cb_for_avrcp_p(bt_avrcp_repeat_mode_e repeat,
+ void *user_data);
+void shuffle_mode_changed_cb_for_avrcp_p(bt_avrcp_shuffle_mode_e shuffle,
+ void *user_data);
+void scan_mode_changed_cb_for_avrcp_p(bt_avrcp_scan_mode_e scan,
+ void *user_data);
+
+static void utc_network_bluetooth_avrcp_targe_initialize_p(void);
+static void utc_network_bluetooth_avrcp_target_deinitialize_p(void);
+static void utc_network_bluetooth_avrcp_target_notify_equalizer_state_p(void);
+static void utc_network_bluetooth_avrcp_target_notify_repeat_mode_p(void);
+static void utc_network_bluetooth_avrcp_target_notify_shuffle_mode_p(void);
+static void utc_network_bluetooth_avrcp_target_notify_scan_mode_p(void);
+static void utc_network_bluetooth_avrcp_target_notify_player_state_p(void);
+static void utc_network_bluetooth_avrcp_target_notify_position_p(void);
+static void utc_network_bluetooth_avrcp_target_notify_track_p(void);
+static void utc_network_bluetooth_avrcp_set_equalizer_state_changed_p(void);
+static void utc_network_bluetooth_avrcp_unset_equalizer_state_changed_p(void);
+static void utc_network_bluetooth_avrcp_set_repeat_mode_changed_p(void);
+static void utc_network_bluetooth_avrcp_unset_repeat_mode_changed_p(void);
+static void utc_network_bluetooth_avrcp_set_shuffle_mode_changed_p(void);
+static void utc_network_bluetooth_avrcp_unset_shuffle_mode_changed_p(void);
+static void utc_network_bluetooth_avrcp_set_scan_mode_changed_p(void);
+static void utc_network_bluetooth_avrcp_unset_scan_mode_changed_p(void);
+
+void adapter_state_changed_cb_for_avrcp_p(int result,
+ bt_adapter_state_e adapter_state,
+ void *user_data);
+gboolean timeout_func(gpointer data);
+
+struct tet_testlist tet_testlist[] = {
+ {utc_network_bluetooth_avrcp_targe_initialize_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_avrcp_target_notify_equalizer_state_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_avrcp_target_notify_repeat_mode_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_avrcp_target_notify_shuffle_mode_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_avrcp_target_notify_scan_mode_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_avrcp_target_notify_player_state_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_avrcp_target_notify_position_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_avrcp_target_notify_track_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_avrcp_set_equalizer_state_changed_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_avrcp_unset_equalizer_state_changed_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_avrcp_set_repeat_mode_changed_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_avrcp_unset_repeat_mode_changed_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_avrcp_set_shuffle_mode_changed_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_avrcp_unset_shuffle_mode_changed_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_avrcp_set_scan_mode_changed_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_avrcp_unset_scan_mode_changed_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_avrcp_target_deinitialize_p, POSITIVE_TC_IDX},
+ {NULL, 0},
+};
+
+static void startup(void)
+{
+ int ret = BT_ERROR_NONE;
+ int timeout_id = 0;
+
+ /* start of TC */
+ mainloop = g_main_loop_new(NULL, FALSE);
+
+ bt_initialize();
+ if (bt_adapter_set_state_changed_cb(adapter_state_changed_cb_for_avrcp_p, "startup") != BT_ERROR_NONE) {
+ tet_printf("DTS may fail because bt_adapter_set_state_changed_cb() failed");
+ }
+
+ tet_printf("bt_adapter_enable() was called.");
+ ret = bt_adapter_enable();
+ if (ret == BT_ERROR_NONE) {
+ tet_printf("bt_adapter_enable() succeeded.");
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ } else if (ret != BT_ERROR_ALREADY_DONE) {
+ tet_printf("DTS may fail because bt_adapter_disable() failed");
+ } else if (ret == BT_ERROR_NOT_ENABLED) {
+ tet_printf("Bluetooth adapter is not enabled.");
+ } else {
+ tet_printf("DTS may fail because bt_adapter_disable() failed");
+ }
+
+ if (bt_adapter_unset_state_changed_cb() != BT_ERROR_NONE) {
+ tet_printf("bt_adapter_set_state_changed_cb() failed.");
+ }
+
+ tet_printf("TC start");
+}
+
+static void cleanup(void)
+{
+ /* end of TC */
+ bt_deinitialize();
+ tet_printf("TC end.");
+}
+
+gboolean timeout_func(gpointer data)
+{
+ tet_printf("Callback: Timeout.");
+ g_main_loop_quit((GMainLoop *) data);
+ return FALSE;
+}
+
+/**
+ * @brief Callback funtions
+ */
+
+void adapter_state_changed_cb_for_avrcp_p(int result,
+ bt_adapter_state_e adapter_state,
+ void *user_data)
+{
+
+}
+
+void target_connection_state_changed_cb_for_avrcp_p(bool connected,
+ const char *remote_address,
+ void *user_data)
+{
+
+}
+
+void equalizer_state_changed_cb_for_avrcp_p(
+ bt_avrcp_equalizer_state_e equalizer,
+ void *user_data)
+{
+
+}
+
+void repeat_mode_changed_cb_for_avrcp_p(bt_avrcp_repeat_mode_e repeat,
+ void *user_data)
+{
+
+}
+
+void shuffle_mode_changed_cb_for_avrcp_p(bt_avrcp_shuffle_mode_e shuffle,
+ void *user_data)
+{
+
+}
+
+void scan_mode_changed_cb_for_avrcp_p(bt_avrcp_scan_mode_e scan,
+ void *user_data)
+{
+
+}
+
+/**
+ * @brief Positive test case of bt_avrcp_target_initialize()
+ */
+static void utc_network_bluetooth_avrcp_targe_initialize_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_avrcp_target_initialize(
+ target_connection_state_changed_cb_for_avrcp_p,
+ NULL);
+ dts_check_eq("bt_avrcp_target_initialize", ret, BT_ERROR_NONE,
+ "bt_avrcp_target_initialize() failed.");
+
+}
+
+/**
+ * @brief Positive test case of bt_avrcp_target_deinitialize()
+ */
+static void utc_network_bluetooth_avrcp_target_deinitialize_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_avrcp_target_deinitialize();
+ dts_check_eq("bt_avrcp_target_deinitialize", ret, BT_ERROR_NONE,
+ "bt_avrcp_target_deinitialize() failed.");
+
+}
+
+/**
+ * @brief Positive test case of bt_avrcp_target_notify_equalizer_state()
+ */
+static void utc_network_bluetooth_avrcp_target_notify_equalizer_state_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_avrcp_target_notify_equalizer_state(BT_AVRCP_EQUALIZER_STATE_ON);
+ dts_check_eq("bt_avrcp_target_notify_equalizer_state", ret,
+ BT_ERROR_NONE,
+ "bt_avrcp_target_notify_equalizer_state() failed.");
+
+}
+
+/**
+ * @brief Positive test case of bt_avrcp_target_notify_repeat_mode()
+ */
+static void utc_network_bluetooth_avrcp_target_notify_repeat_mode_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_avrcp_target_notify_repeat_mode(BT_AVRCP_REPEAT_MODE_ALL_TRACK);
+ dts_check_eq("bt_avrcp_target_notify_repeat_mode", ret, BT_ERROR_NONE,
+ "bt_avrcp_target_notify_repeat_mode() failed.");
+
+}
+
+/**
+ * @brief Positive test case of bt_avrcp_target_notify_shuffle_mode()
+ */
+static void utc_network_bluetooth_avrcp_target_notify_shuffle_mode_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_avrcp_target_notify_shuffle_mode(BT_AVRCP_SHUFFLE_MODE_ALL_TRACK);
+ dts_check_eq("bt_avrcp_target_notify_shuffle_mode", ret, BT_ERROR_NONE,
+ "bt_avrcp_target_notify_shuffle_mode() failed.");
+
+}
+
+/**
+ * @brief Positive test case of bt_avrcp_target_notify_scan_mode()
+ */
+static void utc_network_bluetooth_avrcp_target_notify_scan_mode_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_avrcp_target_notify_scan_mode(BT_AVRCP_SCAN_MODE_ALL_TRACK);
+ dts_check_eq("bt_avrcp_target_notify_scan_mode", ret, BT_ERROR_NONE,
+ "bt_avrcp_target_notify_scan_mode() failed.");
+}
+
+/**
+ * @brief Positive test case of bt_avrcp_target_notify_player_state()
+ */
+static void utc_network_bluetooth_avrcp_target_notify_player_state_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_avrcp_target_notify_player_state(BT_AVRCP_PLAYER_STATE_PLAYING);
+ dts_check_eq("bt_avrcp_target_notify_player_state", ret, BT_ERROR_NONE,
+ "bt_avrcp_target_notify_player_state() failed.");
+}
+
+/**
+ * @brief Positive test case of bt_avrcp_target_notify_position()
+ */
+static void utc_network_bluetooth_avrcp_target_notify_position_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ unsigned int position = 0;
+ ret = bt_avrcp_target_notify_position(position);
+ dts_check_eq("bt_avrcp_target_notify_position", ret, BT_ERROR_NONE,
+ "bt_avrcp_target_notify_position() failed.");
+}
+
+/**
+ * @brief Positive test case of bt_avrcp_target_notify_track()
+ */
+static void utc_network_bluetooth_avrcp_target_notify_track_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_avrcp_target_notify_track("title", "artist", "album", "genre", 5, 20, 2);
+ dts_check_eq("bt_avrcp_target_notify_track", ret, BT_ERROR_NONE,
+ "bt_avrcp_target_notify_track() failed.");
+}
+
+/**
+ * @brief Positive test case of bt_avrcp_set_equalizer_state_changed_cb()
+ */
+static void utc_network_bluetooth_avrcp_set_equalizer_state_changed_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_avrcp_set_equalizer_state_changed_cb(
+ equalizer_state_changed_cb_for_avrcp_p,
+ NULL);
+ dts_check_eq("bt_avrcp_set_equalizer_state_changed_cb", ret, BT_ERROR_NONE,
+ "bt_avrcp_set_equalizer_state_changed_cb() failed.");
+
+}
+
+/**
+ * @brief Positive test case of bt_avrcp_unset_equalizer_state_changed_cb()
+ */
+static void utc_network_bluetooth_avrcp_unset_equalizer_state_changed_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_avrcp_unset_equalizer_state_changed_cb();
+ dts_check_eq("bt_avrcp_unset_equalizer_state_changed_cb", ret,
+ BT_ERROR_NONE,
+ "bt_avrcp_unset_equalizer_state_changed_cb() failed.");
+
+}
+
+/**
+ * @brief Positive test case of bt_avrcp_set_repeat_mode_changed_cb()
+ */
+static void utc_network_bluetooth_avrcp_set_repeat_mode_changed_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_avrcp_set_repeat_mode_changed_cb(repeat_mode_changed_cb_for_avrcp_p, NULL);
+ dts_check_eq("bt_avrcp_set_repeat_mode_changed_cb", ret, BT_ERROR_NONE,
+ "bt_avrcp_set_repeat_mode_changed_cb() failed.");
+
+}
+
+/**
+ * @brief Positive test case of bt_avrcp_unset_repeat_mode_changed_cb()
+ */
+static void utc_network_bluetooth_avrcp_unset_repeat_mode_changed_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_avrcp_unset_repeat_mode_changed_cb();
+ dts_check_eq("bt_avrcp_unset_repeat_mode_changed_cb", ret,
+ BT_ERROR_NONE,
+ "bt_avrcp_unset_repeat_mode_changed_cb() failed.");
+
+}
+
+/**
+ * @brief Positive test case of bt_avrcp_set_shuffle_mode_changed_cb()
+ */
+static void utc_network_bluetooth_avrcp_set_shuffle_mode_changed_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_avrcp_set_shuffle_mode_changed_cb(
+ shuffle_mode_changed_cb_for_avrcp_p,
+ NULL);
+ dts_check_eq("bt_avrcp_set_shuffle_mode_changed_cb", ret, BT_ERROR_NONE,
+ "bt_avrcp_set_shuffle_mode_changed_cb() failed.");
+}
+
+/**
+ * @brief Positive test case of bt_avrcp_unset_shuffle_mode_changed_cb()
+ */
+static void utc_network_bluetooth_avrcp_unset_shuffle_mode_changed_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_avrcp_unset_shuffle_mode_changed_cb();
+ dts_check_eq("bt_avrcp_unset_shuffle_mode_changed_cb", ret,
+ BT_ERROR_NONE,
+ "bt_avrcp_unset_shuffle_mode_changed_cb() failed.");
+}
+
+/**
+ * @brief Positive test case of bt_avrcp_set_scan_mode_changed_cb()
+ */
+static void utc_network_bluetooth_avrcp_set_scan_mode_changed_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_avrcp_set_scan_mode_changed_cb(scan_mode_changed_cb_for_avrcp_p,
+ NULL);
+ dts_check_eq("bt_avrcp_set_scan_mode_changed_cb", ret, BT_ERROR_NONE,
+ "bt_avrcp_set_scan_mode_changed_cb() failed.");
+
+}
+
+/**
+ * @brief Positive test case of bt_avrcp_unset_scan_mode_changed_cb()
+ */
+static void utc_network_bluetooth_avrcp_unset_scan_mode_changed_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_avrcp_unset_scan_mode_changed_cb();
+ dts_check_eq("bt_avrcp_unset_scan_mode_changed_cb", ret, BT_ERROR_NONE,
+ "bt_avrcp_unset_scan_mode_changed_cb() failed.");
+
+}
+
diff --git a/TC/testcase/utc_network_bluetooth_common_negative.c b/TC/testcase/utc_network_bluetooth_common_negative.c
new file mode 100644
index 0000000..4d2eb6e
--- /dev/null
+++ b/TC/testcase/utc_network_bluetooth_common_negative.c
@@ -0,0 +1,84 @@
+/*
+ * utc_network_bluetooth_common_negative.c
+ *
+ * Created on: 20-Sep-2013
+ * Author: mrinal.m
+ */
+
+#include "bluetooth.h"
+#include <tet_api.h>
+#include <glib.h>
+
+enum {
+ POSITIVE_TC_IDX = 0x01,
+ NEGATIVE_TC_IDX,
+};
+
+static void startup(void);
+static void cleanup(void);
+
+static GMainLoop *mainloop;
+void (*tet_startup) (void) = startup;
+void (*tet_cleanup) (void) = cleanup;
+void adapter_state_changed_cb_for_common_n(int result,
+ bt_adapter_state_e adapter_state,
+ void *user_data);
+gboolean timeout_func(gpointer data);
+
+struct tet_testlist tet_testlist[] = {
+ {NULL, 0},
+};
+
+static void startup(void)
+{
+ int ret = BT_ERROR_NONE;
+ int timeout_id = 0;
+
+ /* start of TC */
+ mainloop = g_main_loop_new(NULL, FALSE);
+
+ bt_initialize();
+ if (bt_adapter_set_state_changed_cb(adapter_state_changed_cb_for_common_n, "startup") != BT_ERROR_NONE) {
+ tet_printf("DTS may fail because bt_adapter_set_state_changed_cb() failed");
+ }
+
+ tet_printf("bt_adapter_disable() was called.");
+ ret = bt_adapter_disable();
+ if (ret == BT_ERROR_NONE) {
+ tet_printf("bt_adapter_disable() succeeded.");
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ } else if (ret == BT_ERROR_NOT_ENABLED) {
+ tet_printf("Bluetooth adapter is not enabled.");
+ } else {
+ tet_printf("DTS may fail because bt_adapter_disable() failed");
+ }
+
+ if (bt_adapter_unset_state_changed_cb() != BT_ERROR_NONE) {
+ tet_printf("bt_adapter_set_state_changed_cb() failed.");
+ }
+
+ tet_printf("TC start");
+}
+
+static void cleanup(void)
+{
+ /* end of TC */
+ bt_deinitialize();
+ tet_printf("TC end.");
+}
+
+gboolean timeout_func(gpointer data)
+{
+ tet_printf("Callback: Timeout.");
+ g_main_loop_quit((GMainLoop *) data);
+ return FALSE;
+}
+
+void adapter_state_changed_cb_for_common_n(int result,
+ bt_adapter_state_e adapter_state,
+ void *user_data)
+{
+
+}
diff --git a/TC/testcase/utc_network_bluetooth_common_positive.c b/TC/testcase/utc_network_bluetooth_common_positive.c
new file mode 100755
index 0000000..bf775cf
--- /dev/null
+++ b/TC/testcase/utc_network_bluetooth_common_positive.c
@@ -0,0 +1,122 @@
+/*
+ * utc_network_bluetooth_common_positive.c
+ *
+ * Created on: 20-Sep-2013
+ * Author: mrinal.m
+ */
+
+#include <bluetooth.h>
+#include <tet_api.h>
+#include <glib.h>
+
+enum {
+ POSITIVE_TC_IDX = 0x01,
+ NEGATIVE_TC_IDX,
+};
+
+static void startup(void);
+static void cleanup(void);
+
+static GMainLoop *mainloop;
+
+void (*tet_startup) (void) = startup;
+void (*tet_cleanup) (void) = cleanup;
+
+void adapter_state_changed_cb_for_common_p(int result,
+ bt_adapter_state_e adapter_state,
+ void *user_data);
+gboolean timeout_func(gpointer data);
+
+static void utc_network_bluetooth_bt_initialize_p(void);
+static void utc_network_bluetooth_bt_deinitialize_p(void);
+
+struct tet_testlist tet_testlist[] = {
+ {utc_network_bluetooth_bt_initialize_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_bt_deinitialize_p, POSITIVE_TC_IDX},
+ {NULL, 0},
+};
+
+static void startup(void)
+{
+ int ret = BT_ERROR_NONE;
+ int timeout_id = 0;
+
+ /* start of TC */
+ mainloop = g_main_loop_new(NULL, FALSE);
+
+ bt_initialize();
+ if (bt_adapter_set_state_changed_cb(adapter_state_changed_cb_for_common_p, "startup") != BT_ERROR_NONE) {
+ tet_printf("DTS may fail because bt_adapter_set_state_changed_cb() failed");
+ }
+
+ tet_printf("bt_adapter_enable() was called.");
+ ret = bt_adapter_enable();
+ if (ret == BT_ERROR_NONE) {
+ tet_printf("bt_adapter_enable() succeeded.");
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ } else if (ret != BT_ERROR_ALREADY_DONE) {
+ tet_printf("DTS may fail because bt_adapter_disable() failed");
+ } else if (ret == BT_ERROR_NOT_ENABLED) {
+ tet_printf("Bluetooth adapter is not enabled.");
+ } else {
+ tet_printf("DTS may fail because bt_adapter_disable() failed");
+ }
+
+ if (bt_adapter_unset_state_changed_cb() != BT_ERROR_NONE) {
+ tet_printf("bt_adapter_set_state_changed_cb() failed.");
+ }
+
+ tet_printf("TC start");
+}
+
+static void cleanup(void)
+{
+ /* end of TC */
+ bt_deinitialize();
+ tet_printf("TC end.");
+}
+
+gboolean timeout_func(gpointer data)
+{
+ tet_printf("Callback: Timeout.");
+ g_main_loop_quit((GMainLoop *) data);
+ return FALSE;
+}
+
+void adapter_state_changed_cb_for_common_p(int result,
+ bt_adapter_state_e adapter_state,
+ void *user_data)
+{
+
+}
+
+/**
+ * @brief Positive test case of bt_initialize()
+ */
+static void utc_network_bluetooth_bt_initialize_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_initialize();
+ dts_check_eq("bt_initialize", ret, BT_ERROR_NONE,
+ "bt_initialize() failed.");
+
+}
+
+/**
+ * @brief Positive test case of bt_deinitialize()
+ */
+static void utc_network_bluetooth_bt_deinitialize_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_deinitialize();
+ dts_check_eq("bt_deinitialize", ret, BT_ERROR_NONE,
+ "bt_deinitialize() failed.");
+
+}
+
+
+
diff --git a/TC/testcase/utc_network_bluetooth_device_discovery_negative.c b/TC/testcase/utc_network_bluetooth_device_discovery_negative.c
new file mode 100644
index 0000000..48b22d3
--- /dev/null
+++ b/TC/testcase/utc_network_bluetooth_device_discovery_negative.c
@@ -0,0 +1,191 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <tet_api.h>
+#include <bluetooth.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <glib.h>
+
+enum {
+ POSITIVE_TC_IDX = 0x01,
+ NEGATIVE_TC_IDX,
+};
+
+static GMainLoop *mainloop;
+gboolean timeout_func(gpointer data);
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup) (void) = startup;
+void (*tet_cleanup) (void) = cleanup;
+
+static void utc_network_bluetooth_device_discovery_cancel_n(void);
+static void utc_network_bluetooth_device_discovery_unset_state_changed_cb_n(void);
+static void utc_network_bluetooth_device_discovery_set_state_changed_cb_n(void);
+static void utc_network_bluetooth_device_discovery_start_n(void);
+static void utc_network_bluetooth_device_discovery_get_status_n(void);
+
+void adapter_state_changed_cb_for_discovery_n(int result,
+ bt_adapter_state_e adapter_state,
+ void *user_data);
+
+struct tet_testlist tet_testlist[] = {
+ {utc_network_bluetooth_device_discovery_cancel_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_device_discovery_set_state_changed_cb_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_device_discovery_get_status_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_device_discovery_start_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_device_discovery_unset_state_changed_cb_n, NEGATIVE_TC_IDX},
+ {NULL, 0},
+};
+
+static void startup(void)
+{
+ int ret = BT_ERROR_NONE;
+ int timeout_id = 0;
+
+ /* start of TC */
+ mainloop = g_main_loop_new(NULL, FALSE);
+
+ bt_initialize();
+ if (bt_adapter_set_state_changed_cb(adapter_state_changed_cb_for_discovery_n, "startup") != BT_ERROR_NONE) {
+ tet_printf("DTS may fail because bt_adapter_set_state_changed_cb() failed");
+ }
+
+ tet_printf("bt_adapter_disable() was called.");
+ ret = bt_adapter_disable();
+ if (ret == BT_ERROR_NONE) {
+ tet_printf("bt_adapter_disable() succeeded.");
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ } else if (ret == BT_ERROR_NOT_ENABLED) {
+ tet_printf("Bluetooth adapter is not enabled.");
+ } else {
+ tet_printf("DTS may fail because bt_adapter_disable() failed");
+ }
+
+ if (bt_adapter_unset_state_changed_cb() != BT_ERROR_NONE) {
+ tet_printf("bt_adapter_set_state_changed_cb() failed.");
+ }
+
+ tet_printf("TC start");
+}
+
+static void cleanup(void)
+{
+ /* end of TC */
+ bt_deinitialize();
+ tet_printf("TC end");
+}
+
+gboolean timeout_func(gpointer data)
+{
+ tet_printf("Callback: Timeout.");
+ g_main_loop_quit((GMainLoop *) data);
+ return FALSE;
+}
+
+/**
+ * @brief Callback funtions
+ */
+void adapter_state_changed_cb_for_discovery_n(int result,
+ bt_adapter_state_e adapter_state,
+ void *user_data)
+{
+ tet_printf("Callback: bt_adapter_state_changed_cb was called.");
+ if (user_data != NULL && !strcmp((char *)user_data, "startup")) {
+ if (adapter_state == BT_ADAPTER_DISABLED &&
+ result == BT_ERROR_NONE) {
+ tet_printf("Callback: BT was disabled. DTS will be started.");
+ } else {
+ tet_printf("Callback: BT was not disabled. DTS will be started but DTS may fail.");
+ }
+
+ if (mainloop) {
+ g_main_loop_quit(mainloop);
+ }
+ }
+}
+
+/**
+ *@brief Negative test case of bt_adapter_stop_device_discovery()
+ */
+static void utc_network_bluetooth_device_discovery_cancel_n(void)
+{
+ int ret = bt_adapter_stop_device_discovery();
+
+ dts_check_eq("bt_adapter_stop_device_discovery", ret,
+ BT_ERROR_NOT_ENABLED,
+ "BT_ERROR_NOT_ENABLED must be returned when BT is not enabled");
+}
+
+/**
+ *@brief Negative test case of bt_adapter_unset_device_discovery_state_changed_cb()
+ */
+static void utc_network_bluetooth_device_discovery_unset_state_changed_cb_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ if (bt_deinitialize() != BT_ERROR_NONE) {
+ dts_fail("bt_adapter_unset_device_discovery_state_changed_cb",
+ "bt_deinitialize() failed.");
+ }
+ ret = bt_adapter_unset_device_discovery_state_changed_cb();
+ dts_check_eq("bt_adapter_unset_device_discovery_state_changed_cb", ret,
+ BT_ERROR_NOT_INITIALIZED,
+ "BT_ERROR_NOT_INITIALIZED must be returned when BT service is not initialized.");
+}
+
+/**
+ *@brief Negative test case of bt_adapter_set_device_discovery_state_changed_cb()
+ */
+static void utc_network_bluetooth_device_discovery_set_state_changed_cb_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_adapter_set_device_discovery_state_changed_cb(NULL, NULL);
+ dts_check_eq("bt_adapter_set_device_discovery_state_changed_cb", ret,
+ BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned when callback parameter is NULL");
+}
+
+/**
+ *@brief Negative test case of bt_adapter_start_device_discovery()
+ */
+static void utc_network_bluetooth_device_discovery_start_n(void)
+{
+ bt_error_e ret = BT_ERROR_NONE;
+
+ ret = bt_adapter_start_device_discovery();;
+ dts_check_eq("bt_adapter_start_device_discovery", ret,
+ BT_ERROR_NOT_ENABLED,
+ "BT_ERROR_NOT_ENABLED must be returned when BT is not enabled");
+}
+
+/**
+ *@brief Negative test case of bt_adapter_is_discovering()
+ */
+static void utc_network_bluetooth_device_discovery_get_status_n(void)
+{
+ bt_error_e ret = BT_ERROR_NONE;
+ bool status = false;
+
+ ret = bt_adapter_is_discovering(&status);
+ dts_check_eq("bt_adapter_is_discovering", ret, BT_ERROR_NOT_ENABLED,
+ "BT_ERROR_NOT_ENABLED must be returned when BT is not enabled");
+}
diff --git a/TC/testcase/utc_network_bluetooth_device_discovery_positive.c b/TC/testcase/utc_network_bluetooth_device_discovery_positive.c
new file mode 100755
index 0000000..76caf9f
--- /dev/null
+++ b/TC/testcase/utc_network_bluetooth_device_discovery_positive.c
@@ -0,0 +1,262 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <tet_api.h>
+#include <bluetooth.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <glib.h>
+
+enum {
+ POSITIVE_TC_IDX = 0x01,
+ NEGATIVE_TC_IDX,
+};
+
+static GMainLoop *mainloop;
+static bool callback_result = false;
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup) (void) = startup;
+void (*tet_cleanup) (void) = cleanup;
+
+static void utc_network_bluetooth_device_discovery_get_status_p(void);
+static void utc_network_bluetooth_device_discovery_set_state_changed_cb_p(void);
+static void utc_network_bluetooth_device_discovery_start_p(void);
+static void utc_network_bluetooth_device_discovery_unset_state_changed_cb_p(void);
+static void utc_network_bluetooth_device_discovery_cancel_p(void);
+
+gboolean timeout_func(gpointer data);
+void adapter_state_changed_cb_for_discovery_p(int result,
+ bt_adapter_state_e adapter_state,
+ void *user_data);
+void device_discovery_state_changed_cb_for_discovery_p(int result,
+ bt_adapter_device_discovery_state_e discovery_state,
+ bt_adapter_device_discovery_info_s *discovery_info,
+ void *user_data);
+
+struct tet_testlist tet_testlist[] = {
+ {utc_network_bluetooth_device_discovery_get_status_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_device_discovery_set_state_changed_cb_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_device_discovery_start_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_device_discovery_unset_state_changed_cb_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_device_discovery_cancel_p, POSITIVE_TC_IDX},
+ {NULL, 0},
+};
+
+static void startup(void)
+{
+ bt_error_e ret = BT_ERROR_NONE;
+ int timeout_id = 0;
+
+ /* start of TC */
+ mainloop = g_main_loop_new(NULL, FALSE);
+
+ bt_initialize();
+
+ if (bt_adapter_set_state_changed_cb(adapter_state_changed_cb_for_discovery_p, "startup") != BT_ERROR_NONE) {
+ tet_printf("DTS may fail because bt_adapter_set_state_changed_cb() failed.");
+ }
+
+ ret = bt_adapter_enable();
+ if (ret == BT_ERROR_NONE) {
+ tet_printf("bt_adapter_enable() succeeded.");
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ } else if (ret == BT_ERROR_ALREADY_DONE) {
+ tet_printf("BT was already enabled.");
+ } else {
+ tet_printf("DTS may fail because bt_adapter_enable() failed.");
+ }
+
+ if (bt_adapter_unset_state_changed_cb() != BT_ERROR_NONE) {
+ tet_printf
+ ("bt_adapter_unset_device_discovery_state_changed_cb() failed.");
+ }
+
+ tet_printf("TC start");
+}
+
+static void cleanup(void)
+{
+ /* end of TC */
+ tet_printf("TC end");
+ bt_deinitialize();
+}
+
+gboolean timeout_func(gpointer data)
+{
+ tet_printf("Callback: Timeout.");
+ g_main_loop_quit((GMainLoop *) data);
+ return FALSE;
+}
+
+/**
+ * @brief Callback funtions
+ */
+void adapter_state_changed_cb_for_discovery_p(int result,
+ bt_adapter_state_e adapter_state,
+ void *user_data)
+{
+ if (user_data != NULL && !strcmp((char *)user_data, "startup")) {
+ if (adapter_state == BT_ADAPTER_ENABLED &&
+ result == BT_ERROR_NONE) {
+ tet_printf("Callback: BT was enabled.");
+ } else {
+ tet_printf("Callback: bt_adapter_state_changed_cb() was \
+ called but bt_adapter_enable() failed.");
+ }
+
+ if (mainloop) {
+ g_main_loop_quit(mainloop);
+ }
+ }
+}
+
+void device_discovery_state_changed_cb_for_discovery_p(int result,
+ bt_adapter_device_discovery_state_e discovery_state,
+ bt_adapter_device_discovery_info_s *discovery_info,
+ void *user_data)
+{
+ tet_printf("Callback: device_discovery_state_changed_cb_for_discovery_p is called");
+
+ if (discovery_state == BT_ADAPTER_DEVICE_DISCOVERY_FOUND) {
+ tet_printf("Callback: Devices were found");
+ tet_printf("Callback: Device name is %s", discovery_info->remote_name);
+ tet_printf("Callback: Service class: %x", discovery_info->bt_class.major_service_class_mask);
+ if (user_data != NULL && !strcmp((char *)user_data, "start")) {
+ callback_result = true;
+ if (mainloop) {
+ g_main_loop_quit(mainloop);
+ }
+ }
+ } else if (discovery_state == BT_ADAPTER_DEVICE_DISCOVERY_FINISHED) {
+ tet_printf("Callback: Device discovery finished");
+ if (user_data != NULL) {
+ if (!strcmp((char *)user_data, "start") && callback_result == false) {
+ tet_printf("You need a discoverable device");
+ tet_printf("utc_network_bluetooth_device_discovery_start_p and \
+ utc_network_bluetooth_device_discovery_cancel_p will fail");
+ } else if (!strcmp((char *)user_data, "cancel")) {
+ if (result == BT_ERROR_CANCELLED) {
+ callback_result = true;
+ }
+ }
+ }
+ if (mainloop) {
+ g_main_loop_quit(mainloop);
+ }
+ }
+}
+
+/**
+ * @brief Positive test case of bt_adapter_is_discovering()
+ */
+static void utc_network_bluetooth_device_discovery_get_status_p(void)
+{
+ bt_error_e ret = BT_ERROR_NONE;
+ bool status = false;
+
+ ret = bt_adapter_is_discovering(&status);
+ dts_check_eq("bt_adapter_is_discovering", ret, BT_ERROR_NONE,
+ "bt_adapter_is_discovering() failed.");
+}
+
+/**
+ * @brief Positive test case of bt_adapter_set_device_discovery_state_changed_cb()
+ */
+static void utc_network_bluetooth_device_discovery_set_state_changed_cb_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_adapter_set_device_discovery_state_changed_cb(device_discovery_state_changed_cb_for_discovery_p, "start");
+ dts_check_eq("bt_adapter_set_device_discovery_state_changed_cb", ret,
+ BT_ERROR_NONE,
+ "bt_adapter_set_device_discovery_state_changed_cb() failed.");
+}
+
+/**
+ * @brief Positive test case of bt_adapter_start_device_discovery()
+ */
+static void utc_network_bluetooth_device_discovery_start_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ int timeout_id = 0;
+
+ callback_result = false;
+
+ ret = bt_adapter_start_device_discovery();
+ if (ret == BT_ERROR_NONE) {
+ tet_printf("bt_adapter_device_discovery_state_changed_cb_for_discovery_p() will be called.");
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ dts_check_eq("bt_adapter_start_device_discovery",
+ callback_result, true,
+ "Callback was called but failed.");
+ } else {
+ dts_fail("bt_adapter_start_device_discovery",
+ "bt_adapter_start_device_discovery() failed.");
+ }
+}
+
+/**
+ * @brief Positive test case of bt_adapter_unset_device_discovery_state_changed_cb()
+ */
+static void utc_network_bluetooth_device_discovery_unset_state_changed_cb_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_adapter_unset_device_discovery_state_changed_cb();
+ dts_check_eq("bt_adapter_unset_device_discovery_state_changed_cb", ret,
+ BT_ERROR_NONE,
+ "bt_device_discovery_uset_state_changed_cb() failed");
+}
+
+/**
+ * @brief Positive test case of bt_adapter_stop_device_discovery()
+ */
+static void utc_network_bluetooth_device_discovery_cancel_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ int timeout_id = 0;
+
+ callback_result = false;
+
+ if (bt_adapter_set_device_discovery_state_changed_cb
+ (device_discovery_state_changed_cb_for_discovery_p, "cancel") != BT_ERROR_NONE) {
+ dts_fail("bt_adapter_stop_device_discovery",
+ "bt_adapter_set_device_discovery_state_changed_cb() failed");
+ }
+
+ ret = bt_adapter_stop_device_discovery();
+ if (ret == BT_ERROR_NONE) {
+ tet_printf("bt_adapter_device_discovery_state_changed_cb_for_discovery_p() will be called");
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ bt_adapter_unset_device_discovery_state_changed_cb();
+ dts_check_eq("bt_adapter_stop_device_discovery", callback_result, true,
+ "Callback was called but failed");
+ } else {
+ dts_fail("bt_adapter_stop_device_discovery",
+ "bt_adapter_stop_device_discovery() failed");
+ }
+
+}
+
diff --git a/TC/testcase/utc_network_bluetooth_device_negative.c b/TC/testcase/utc_network_bluetooth_device_negative.c
new file mode 100755
index 0000000..9915c99
--- /dev/null
+++ b/TC/testcase/utc_network_bluetooth_device_negative.c
@@ -0,0 +1,300 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <tet_api.h>
+#include <bluetooth.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <glib.h>
+
+enum {
+ POSITIVE_TC_IDX = 0x01,
+ NEGATIVE_TC_IDX,
+};
+
+static void startup(void);
+static void cleanup(void);
+
+static GMainLoop *mainloop;
+gboolean timeout_func(gpointer data);
+
+void (*tet_startup) (void) = startup;
+void (*tet_cleanup) (void) = cleanup;
+
+static void utc_network_bluetooth_device_set_bonded_cb_n(void);
+static void utc_network_bluetooth_device_set_unbonded_cb_n(void);
+static void utc_network_bluetooth_device_set_authorization_state_changed_cb_n(void);
+static void utc_network_bluetooth_device_cancel_bonding_n(void);
+static void utc_network_bluetooth_device_bond_n(void);
+static void utc_network_bluetooth_device_foreach_bonded_device_n(void);
+static void utc_network_bluetooth_device_set_alias_n(void);
+static void utc_network_bluetooth_device_set_authorization_n(void);
+static void utc_network_bluetooth_device_unbond_n(void);
+static void utc_network_bluetooth_device_unset_bonded_cb_n(void);
+static void utc_network_bluetooth_device_unset_unbonded_cb_n(void);
+static void utc_network_bluetooth_device_unset_authorization_state_changed_cb_n(void);
+static void utc_network_bluetooth_device_get_rssi_strength_n(void);
+static void utc_network_bluetooth_device_disable_rssi_monitor_n(void);
+static void utc_network_bluetooth_device_enable_rssi_monitor_n(void);
+static void utc_network_bluetooth_device_unset_rssi_alert_cb_n(void);
+
+void adapter_state_changed_cb_for_device_negative(int result,
+ bt_adapter_state_e adapter_state,
+ void *user_data);
+gboolean timeout_func(gpointer data);
+
+struct tet_testlist tet_testlist[] = {
+ {utc_network_bluetooth_device_set_bonded_cb_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_device_set_unbonded_cb_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_device_set_authorization_state_changed_cb_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_device_bond_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_device_cancel_bonding_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_device_unbond_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_device_foreach_bonded_device_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_device_set_alias_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_device_set_authorization_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_device_get_rssi_strength_n, NEGATIVE_TC_IDX },
+ {utc_network_bluetooth_device_enable_rssi_monitor_n, NEGATIVE_TC_IDX },
+ {utc_network_bluetooth_device_disable_rssi_monitor_n, NEGATIVE_TC_IDX },
+ {utc_network_bluetooth_device_unset_rssi_alert_cb_n, NEGATIVE_TC_IDX },
+ {utc_network_bluetooth_device_unset_bonded_cb_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_device_unset_unbonded_cb_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_device_unset_authorization_state_changed_cb_n, NEGATIVE_TC_IDX},
+ {NULL, 0},
+};
+
+gboolean timeout_func(gpointer data)
+{
+ tet_printf("Callback: Timeout.");
+ g_main_loop_quit((GMainLoop *) data);
+ return FALSE;
+}
+
+static void startup(void)
+{
+ int ret = BT_ERROR_NONE;
+ int timeout_id = 0;
+
+ /* start of TC */
+ mainloop = g_main_loop_new(NULL, FALSE);
+
+ bt_initialize();
+ if (bt_adapter_set_state_changed_cb(adapter_state_changed_cb_for_device_negative, "startup") != BT_ERROR_NONE) {
+ tet_printf("DTS may fail because bt_adapter_set_state_changed_cb() failed");
+ }
+
+ tet_printf("bt_adapter_disable() was called.");
+ ret = bt_adapter_disable();
+ if (ret == BT_ERROR_NONE) {
+ tet_printf("bt_adapter_disable() succeeded.");
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ } else if (ret == BT_ERROR_NOT_ENABLED) {
+ tet_printf("Bluetooth adapter is not enabled.");
+ } else {
+ tet_printf("DTS may fail because bt_adapter_disable() failed");
+ }
+
+ if (bt_adapter_unset_state_changed_cb() != BT_ERROR_NONE) {
+ tet_printf("bt_adapter_set_state_changed_cb() failed.");
+ }
+
+ tet_printf("TC start");
+}
+
+static void cleanup(void)
+{
+ /* end of TC */
+ bt_deinitialize();
+ tet_printf("TC end.");
+}
+
+/**
+ * @brief Callback funtions
+ */
+void adapter_state_changed_cb_for_device_negative(int result,
+ bt_adapter_state_e adapter_state,
+ void *user_data)
+{
+ tet_printf("Callback: bt_adapter_state_changed_cb was called.");
+ if ((user_data != NULL) && !strcmp((char *)user_data, "startup")) {
+ if (adapter_state == BT_ADAPTER_DISABLED && result == BT_ERROR_NONE) {
+ tet_printf("Callback: BT was disabled. DTS will be started.");
+ } else {
+ tet_printf("Callback: BT was not disabled. DTS will be started but DTS may fail.");
+ }
+
+ if (mainloop) {
+ g_main_loop_quit(mainloop);
+ }
+ }
+}
+
+/**
+ * @brief Negative test case of bt_device_set_bond_created_cb()
+ */
+static void utc_network_bluetooth_device_set_bonded_cb_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_device_set_bond_created_cb(NULL, NULL);
+ dts_check_eq("bt_device_set_bond_created_cb", ret,
+ BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned when callback parameter is NULL");
+}
+
+/**
+ * @brief Negative test case of bt_device_set_bond_destroyed_cb()
+ */
+static void utc_network_bluetooth_device_set_unbonded_cb_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_device_set_bond_destroyed_cb(NULL, NULL);
+ dts_check_eq("bt_device_set_bond_destroyed_cb", ret,
+ BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned when callback parameter is NULL");
+}
+
+/**
+ * @brief Negative test case of bt_device_set_authorization_changed_cb()
+ */
+static void
+utc_network_bluetooth_device_set_authorization_state_changed_cb_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_device_set_authorization_changed_cb(NULL, NULL);
+ dts_check_eq("bt_device_set_authorization_changed_cb", ret,
+ BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned when callback parameter is NULL");
+}
+
+/**
+ * @brief Negative test case of bt_device_unset_bond_created_cb()
+ */
+static void utc_network_bluetooth_device_unset_bonded_cb_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_deinitialize();
+
+ ret = bt_device_unset_bond_created_cb();
+ dts_check_eq("bt_device_unset_bond_created_cb", ret,
+ BT_ERROR_NOT_INITIALIZED,
+ "BT_ERROR_NOT_INITIALIZED must be returned when BT is not initialized.");
+}
+
+ /**
+ * @brief Negative test case of bt_device_unset_bond_destroyed_cb()
+ */
+static void utc_network_bluetooth_device_unset_unbonded_cb_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_device_unset_bond_destroyed_cb();
+ dts_check_eq("bt_device_unset_bond_destroyed_cb", ret,
+ BT_ERROR_NOT_INITIALIZED,
+ "BT_ERROR_NOT_INITIALIZED must be returned when BT service is not initialized.");
+}
+
+/**
+ * @brief Negative test case of bt_device_unset_authorization_changed_cb()
+ */
+static void
+utc_network_bluetooth_device_unset_authorization_state_changed_cb_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_device_unset_authorization_changed_cb();
+ dts_check_eq("bt_device_unset_authorization_changed_cb", ret,
+ BT_ERROR_NOT_INITIALIZED,
+ "BT_ERROR_NOT_INITIALIZED must be returned when BT service is not initialized.");
+}
+
+ /**
+ * @brief Negative test case of bt_device_create_bond()
+ */
+static void utc_network_bluetooth_device_bond_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_device_create_bond(NULL);
+ dts_check_eq("bt_device_create_bond", ret, BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_NOT_INITIALIZED must be returned when BT service is not initialized.");
+}
+
+ /**
+ * @brief Negative test case of bt_device_cancel_bonding()
+ */
+static void utc_network_bluetooth_device_cancel_bonding_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_device_cancel_bonding();
+ dts_check_eq("bt_device_cancel_bonding", ret, BT_ERROR_NOT_ENABLED,
+ "BT_ERROR_NOT_ENABLED must be returned when BT is not enabled");
+}
+
+/**
+ * @brief Negative test case of bt_device_destroy_bond()
+ */
+static void utc_network_bluetooth_device_unbond_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_device_destroy_bond(NULL);
+ dts_check_eq("bt_device_destroy_bond", ret, BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned when parameter is NULL");
+}
+
+/**
+ * @brief Negative test case of bt_adapter_foreach_bonded_device()
+ */
+static void utc_network_bluetooth_device_foreach_bonded_device_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_adapter_foreach_bonded_device(NULL, NULL);
+ dts_check_eq("bt_adapter_foreach_bonded_device", ret, BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned when parameter is NULL");
+}
+
+/**
+ * @brief Negative test case of bt_device_set_alias()
+ */
+static void utc_network_bluetooth_device_set_alias_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_device_set_alias(NULL, "dts_alias");
+ dts_check_eq("bt_device_set_alias", ret, BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned when address parameter is NULL");
+}
+
+/**
+ * @brief Negative test case of bt_device_set_authorization()
+ */
+static void utc_network_bluetooth_device_set_authorization_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_device_set_authorization(NULL, BT_DEVICE_AUTHORIZED);
+ dts_check_eq("bt_device_set_authorization", ret,
+ BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned when address parameter is NULL");
+}
diff --git a/TC/testcase/utc_network_bluetooth_device_positive.c b/TC/testcase/utc_network_bluetooth_device_positive.c
new file mode 100755
index 0000000..631746e
--- /dev/null
+++ b/TC/testcase/utc_network_bluetooth_device_positive.c
@@ -0,0 +1,695 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <tet_api.h>
+#include <bluetooth.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <glib.h>
+
+#define CONFIG_FILE_PATH "/opt/home/capi-network-bluetooth/tetware.conf"
+
+enum {
+ POSITIVE_TC_IDX = 0x01,
+ NEGATIVE_TC_IDX,
+};
+
+static void startup(void);
+static void cleanup(void);
+
+static GMainLoop *mainloop;
+static bool callback_result = false;
+char target_name[128] = "dts_test";
+char *target_address;
+bt_device_info_s *device_info = NULL;
+bool discovery_result = false;
+
+void (*tet_startup) (void) = startup;
+void (*tet_cleanup) (void) = cleanup;
+
+static void utc_network_bluetooth_device_set_bonded_cb_p(void);
+static void utc_network_bluetooth_device_set_unbonded_cb_p(void);
+static void utc_network_bluetooth_device_set_authorization_state_changed_cb_p(void);
+static void utc_network_bluetooth_device_cancel_bonding_p(void);
+static void utc_network_bluetooth_device_bond_p(void);
+static void utc_network_bluetooth_device_foreach_bonded_device_p(void);
+static void utc_network_bluetooth_device_set_alias_p(void);
+static void utc_network_bluetooth_device_set_authorization_p(void);
+static void utc_network_bluetooth_device_unbond_p(void);
+static void utc_network_bluetooth_device_unset_bonded_cb_p(void);
+static void utc_network_bluetooth_device_unset_unbonded_cb_p(void);
+static void utc_network_bluetooth_device_unset_authorization_state_changed_cb_p(void);
+static void utc_network_bluetooth_device_get_rssi_strength_p(void);
+static void utc_network_bluetooth_device_disable_rssi_monitor_p(void);
+static void utc_network_bluetooth_device_enable_rssi_monitor_p(void);
+static void utc_network_bluetooth_device_unset_rssi_alert_cb_p(void);
+
+gboolean timeout_func(gpointer data);
+void adapter_state_changed_cb_for_device_p(int result,
+ bt_adapter_state_e adapter_state,
+ void *user_data);
+void device_discovery_state_changed_cb_for_device_p(int result,
+ bt_adapter_device_discovery_state_e discovery_state,
+ bt_adapter_device_discovery_info_s *discovery_info,
+ void *user_data);
+void device_bonded_cb(int result, bt_device_info_s *device_info,
+ void *user_data);
+void device_unbonded_cb(int result, char *remote_address, void *user_data);
+void device_authorization_state_changed_cb(bt_device_authorization_e authorization_state, \
+ char *remote_address, void *user_data);
+bool bonded_device_cb_for_device_p(bt_device_info_s *dev_info,
+ void *user_data);
+void device_get_rssi_strength_cb(char *bt_address,
+ bt_device_connection_link_type_e link_type,
+ int rssi_dbm, void *user_data);
+static void device_rssi_enabled_cb(const char *address,
+ bt_device_connection_link_type_e link_type,
+ int rssi_enabled, void *user_data);
+static void device_rssi_alert_cb(char *bt_address,
+ bt_device_connection_link_type_e link_type,
+ int rssi_alert_type, int rssi_alert_dbm, void *user_data);
+
+struct tet_testlist tet_testlist[] = {
+ { utc_network_bluetooth_device_set_bonded_cb_p, POSITIVE_TC_IDX },
+ { utc_network_bluetooth_device_bond_p, POSITIVE_TC_IDX },
+ { utc_network_bluetooth_device_foreach_bonded_device_p, POSITIVE_TC_IDX },
+ { utc_network_bluetooth_device_set_alias_p, POSITIVE_TC_IDX },
+ { utc_network_bluetooth_device_set_authorization_state_changed_cb_p, POSITIVE_TC_IDX },
+ { utc_network_bluetooth_device_set_authorization_p, POSITIVE_TC_IDX },
+ { utc_network_bluetooth_device_unset_bonded_cb_p, POSITIVE_TC_IDX },
+ { utc_network_bluetooth_device_unset_authorization_state_changed_cb_p, POSITIVE_TC_IDX },
+ { utc_network_bluetooth_device_get_rssi_strength_p, POSITIVE_TC_IDX },
+ { utc_network_bluetooth_device_enable_rssi_monitor_p, POSITIVE_TC_IDX },
+ { utc_network_bluetooth_device_disable_rssi_monitor_p, POSITIVE_TC_IDX },
+ { utc_network_bluetooth_device_unset_rssi_alert_cb_p, POSITIVE_TC_IDX },
+ { utc_network_bluetooth_device_set_unbonded_cb_p, POSITIVE_TC_IDX },
+ { utc_network_bluetooth_device_cancel_bonding_p, POSITIVE_TC_IDX },
+ { utc_network_bluetooth_device_unbond_p, POSITIVE_TC_IDX },
+ { utc_network_bluetooth_device_unset_unbonded_cb_p, POSITIVE_TC_IDX },
+ { NULL, 0 },
+};
+
+int get_value_from_file(void)
+{
+ FILE *fp;
+ char *token;
+ char buf[100];
+
+ fp = fopen(CONFIG_FILE_PATH, "r");
+ if (fp == NULL) {
+ tet_printf("Default configuration is used\n");
+ return -1;
+ }
+ while (fgets(buf, sizeof(buf), fp)) {
+ if (buf[0] == '#' || buf[0] == '\n')
+ continue;
+
+ token = strrchr(buf, '\n');
+ if (token == NULL) {
+ tet_printf("g_conf is too long\n");
+ break;
+ }
+ *token = '\0';
+
+ token = strtok(buf, "=");
+ if (token == NULL) {
+ continue;
+ }
+ if (strcasecmp(token, "BT_ADDR_MOBILE") == 0) {
+ token = strtok(NULL, "=");
+ target_address = strdup(token);
+ fclose(fp);
+ return 0;
+ }
+ }
+ fclose(fp);
+ return -1;
+}
+
+static void startup(void)
+{
+ bt_error_e ret = BT_ERROR_NONE;
+ int timeout_id = 0;
+
+ if(get_value_from_file() == -1) {
+ tet_printf("Failed to read.");
+ }
+
+ /* start of TC */
+ callback_result = false;
+ discovery_result = false;
+ mainloop = g_main_loop_new(NULL, FALSE);
+
+ bt_initialize();
+
+ if (bt_adapter_set_state_changed_cb(adapter_state_changed_cb_for_device_p, "startup") != BT_ERROR_NONE) {
+ tet_printf("bt_adapter_set_state_changed_cb() failed.");
+ }
+
+ if (bt_adapter_set_device_discovery_state_changed_cb(device_discovery_state_changed_cb_for_device_p, "startup") != BT_ERROR_NONE) {
+ tet_printf("bt_adapter_set_device_discovery_state_changed_cb() failed.");
+ }
+
+ ret = bt_adapter_enable();
+ if (ret == BT_ERROR_NONE) {
+ tet_printf("bt_adapter_enable() succeeded.");
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+
+ tet_printf("BT was enabled. Device discovery will be started");
+ if (bt_adapter_start_device_discovery() == BT_ERROR_NONE) {
+ tet_printf("bt_adapter_start_device_discovery() succeeded.");
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ } else {
+ tet_printf("bt_adapter_start_device_discovery() failed.");
+ }
+ } else if (ret == BT_ERROR_ALREADY_DONE) {
+ tet_printf("BT was already enabled. Device discovery will be started");
+ if (bt_adapter_start_device_discovery() == BT_ERROR_NONE) {
+ tet_printf("bt_adapter_start_device_discovery() succeeded.");
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ } else {
+ tet_printf("bt_adapter_start_device_discovery() failed.");
+ }
+ } else {
+ tet_printf("DTS may fail because bt_adapter_enable() failed.");
+ }
+
+ if (bt_adapter_unset_state_changed_cb() != BT_ERROR_NONE) {
+ tet_printf("bt_adapter_unset_state_changed_cb() failed.");
+ }
+
+ if (bt_adapter_unset_device_discovery_state_changed_cb() !=
+ BT_ERROR_NONE) {
+ tet_printf("bt_adapter_unset_device_discovery_state_changed_cb() failed.");
+ }
+
+ tet_printf("TC start.");
+}
+
+static void cleanup(void)
+{
+ /* end of TC */
+ if (device_info != NULL)
+ free(device_info);
+
+ bt_deinitialize();
+ tet_printf("TC end");
+}
+
+gboolean timeout_func(gpointer data)
+{
+ tet_printf("[%s] Callback: Timeout.", __FUNCTION__);
+ g_main_loop_quit((GMainLoop *) data);
+ return FALSE;
+}
+
+void adapter_state_changed_cb_for_device_p(int result,
+ bt_adapter_state_e adapter_state,
+ void *user_data)
+{
+ tet_printf("Callback: bt_adapter_state_changed_cb() was called");
+ if (user_data != NULL && !strcmp((char *)user_data, "startup")) {
+ if (adapter_state == BT_ADAPTER_ENABLED && result == BT_ERROR_NONE) {
+ tet_printf("Callback: BT was enabled.");
+ } else {
+ tet_printf("Callback: BT was not enabled. DTS will be started but DTS may fail.");
+ }
+
+ if (mainloop) {
+ g_main_loop_quit(mainloop);
+ }
+ }
+}
+
+void device_discovery_state_changed_cb_for_device_p(int result,
+ bt_adapter_device_discovery_state_e discovery_state,
+ bt_adapter_device_discovery_info_s *discovery_info,
+ void *user_data)
+{
+ tet_printf("Callback: bt_adapter_device_discovery_state_changed_cb() was called");
+ if (user_data != NULL && !strcmp((char *)user_data, "startup")) {
+ if (discovery_state == BT_ADAPTER_DEVICE_DISCOVERY_FINISHED) {
+ tet_printf("Callback: Device discovery finished. DTS will be started.");
+ if (mainloop) {
+ g_main_loop_quit(mainloop);
+ }
+ } else if (discovery_state == BT_ADAPTER_DEVICE_DISCOVERY_FOUND) {
+ tet_printf("Callback: Devices were founded (%s)", discovery_info->remote_name);
+ if (discovery_info->remote_name != NULL && !strcmp(discovery_info->remote_name, target_name)) {
+ discovery_result = true;
+ tet_printf("Callback: dts_test device was found.");
+ strncpy(target_address, discovery_info->remote_address, 18);
+ tet_printf("Callback: device address: [%s]", discovery_info->remote_address);
+ if (bt_adapter_stop_device_discovery() == BT_ERROR_NONE) {
+ tet_printf("Callback: Device discovery will be stopped");
+ }
+ }
+ }
+ }
+}
+
+void device_bonded_cb(int result, bt_device_info_s * device_info,
+ void *user_data)
+{
+ int i = 0;
+
+ tet_printf("Callback: bt_device_bond_created_cb() was called.");
+ if (result == BT_ERROR_TIMED_OUT)
+ tet_printf("result is BT_ERROR_TIMEOUT");
+ else if (result == BT_ERROR_CANCELLED)
+ tet_printf("result is BT_ERROR_CANCELLED");
+ else if (result == BT_ERROR_AUTH_FAILED)
+ tet_printf("result is BT_ERROR_AUTH_FAILED");
+ else if (result == BT_ERROR_OPERATION_FAILED)
+ tet_printf("result is BT_ERROR_OPERATION_FAILED");
+ else if (result == BT_ERROR_AUTH_REJECTED)
+ tet_printf("result is BT_ERROR_AUTH_REJECTED");
+ else if (result == BT_ERROR_REMOTE_DEVICE_NOT_FOUND)
+ tet_printf("result is BT_ERROR_REMOTE_DEVICE_NOT_FOUND");
+ else if (result == BT_ERROR_NONE)
+ tet_printf("result is BT_ERROR_NONE");
+ else
+ tet_printf("result is unknown: %s",
+ _bt_convert_error_to_string(result));
+
+ /* in case of bt_device_cancel_bonding() */
+ if (user_data != NULL && !strcmp((char *)user_data, "cancel")) {
+ if (result == BT_ERROR_CANCELLED) {
+ tet_printf("Callback: Cancellation of bonding succeeded");
+ callback_result = true;
+ } else {
+ tet_printf("Callback: Cancellation of bonding failed");
+ }
+ } /* in case of bt_device_create_bond() */
+ else if (user_data != NULL && !strcmp((char *)user_data, "bond")) {
+ if (device_info == NULL) {
+ tet_printf("Callback data is NULL");
+
+ if (result == BT_ERROR_CANCELLED)
+ tet_printf("No user input in the peer device");
+
+ if (mainloop)
+ g_main_loop_quit(mainloop);
+
+ return;
+ }
+
+ if (device_info->remote_name != NULL && !strcmp(device_info->remote_name, target_name)) {
+ if (result == BT_ERROR_NONE) {
+ tet_printf("Callback: Bonding succeeded");
+ tet_printf("Callback: serivce count : %d", device_info->service_count);
+ callback_result = true;
+ for (i = 0; i < device_info->service_count; i++) {
+ tet_printf("Callback: service list[%d] - %s", i + 1, device_info->service_uuid[i]);
+ }
+ } else {
+ tet_printf("Callback: Bonding failed");
+ }
+ }
+ }
+
+ if (mainloop) {
+ g_main_loop_quit(mainloop);
+ }
+}
+
+void device_unbonded_cb(int result, char *remote_address, void *user_data)
+{
+ tet_printf("Callback: bt_device_bond_destroyed_cb() was called.");
+ tet_printf("Callback: target address");
+ if (target_address != NULL) {
+ tet_printf("device address: %s", target_address);
+ } else
+ tet_printf("Callback: target address is NULL!");
+
+ tet_printf("Callback: address of unbonded device");
+ if (remote_address != NULL) {
+ tet_printf("device address: %s", remote_address);
+ } else
+ tet_printf("Callback: address of unbonded device is NULL!");
+
+ if ((remote_address != NULL) && \
+ !strcmp(remote_address, target_address)) {
+ if (result == BT_ERROR_NONE) {
+ tet_printf("Callback: Unbonding succeeded");
+ callback_result = true;
+ } else {
+ tet_printf("Callback: Unbonding failed");
+ }
+ }
+
+ if (mainloop) {
+ g_main_loop_quit(mainloop);
+ }
+
+}
+
+void device_authorization_state_changed_cb(bt_device_authorization_e authorization_state, \
+ char *address, void *user_data)
+{
+ if (authorization_state == BT_DEVICE_AUTHORIZED) {
+ if (address != NULL && !strcmp(address, target_address)) {
+ callback_result = true;
+ if (mainloop) {
+ g_main_loop_quit(mainloop);
+ }
+ }
+ } else {
+ if (address != NULL && !strcmp(address, target_address)) {
+ callback_result = true;
+ if (mainloop) {
+ g_main_loop_quit(mainloop);
+ }
+ }
+ }
+}
+
+void device_get_rssi_strength_cb(char *bt_address,
+ bt_device_connection_link_type_e link_type,
+ int rssi_dbm, void *user_data)
+{
+ tet_printf("Callback:Rssi_strength_cb is called.");
+ tet_printf("RSSI Strength: [Address %s][Link Type %d][RSSI dBm %d]",
+ bt_address, link_type, rssi_dbm);
+}
+
+static void device_rssi_enabled_cb(const char *address,
+ bt_device_connection_link_type_e link_type,
+ int rssi_enabled, void *user_data)
+{
+ tet_printf("Callback:Rssi_enabled_cb is called.");
+ tet_printf("RSSI Enabled: %s %d %d", address, link_type, rssi_enabled);
+}
+
+static void device_rssi_alert_cb(char *bt_address,
+ bt_device_connection_link_type_e link_type,
+ int rssi_alert_type, int rssi_alert_dbm, void *user_data)
+{
+ tet_printf("Callback:rssi_alert_cb is called.");
+ tet_printf("RSSI Alert: [Address:%s LinkType:%d][RSSI Alert Type:%d dBm:%d]",
+ bt_address, link_type, rssi_alert_type, rssi_alert_dbm);
+}
+
+/**
+ * @brief Positive test case of bt_device_set_bond_created_cb()
+ */
+static void utc_network_bluetooth_device_set_bonded_cb_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ /* Normal operation test */
+ ret = bt_device_set_bond_created_cb(device_bonded_cb, "cancel");
+ dts_check_eq("bt_device_set_bond_created_cb", ret, BT_ERROR_NONE,
+ "bt_device_set_bond_created_cb() failed");
+}
+
+/**
+ * @brief Positive test case of bt_device_set_bond_destroyed_cb()
+ */
+static void utc_network_bluetooth_device_set_unbonded_cb_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ /* Normal operation test */
+ ret = bt_device_set_bond_destroyed_cb(device_unbonded_cb, NULL);
+ dts_check_eq("bt_device_set_bond_destroyed_cb", ret, BT_ERROR_NONE,
+ "bt_device_set_bond_destroyed_cb() failed");
+}
+
+/**
+ * @brief Positive test case of bt_device_set_authorization_changed_cb()
+ */
+static void
+utc_network_bluetooth_device_set_authorization_state_changed_cb_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ /* Normal operation test */
+ ret = bt_device_set_authorization_changed_cb(device_authorization_state_changed_cb, NULL);
+ dts_check_eq("bt_device_set_authorization_changed_cb", ret,
+ BT_ERROR_NONE,
+ "bt_device_set_authorization_changed_cb() failed");
+}
+
+/**
+ * @brief Positive test case of bt_device_cancel_bonding()
+ */
+static void utc_network_bluetooth_device_cancel_bonding_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ callback_result = false;
+ int timeout_id = 0;
+
+ if (bt_device_set_bond_created_cb(device_bonded_cb, "cancel") !=
+ BT_ERROR_NONE) {
+ dts_fail("bt_device_cancel_bonding",
+ "bt_device_set_bond_created_cb() failed");
+ }
+
+ /* bond device */
+ ret = bt_device_create_bond(target_address);
+ if (ret != BT_ERROR_NONE) {
+ dts_fail("bt_device_cancel_bonding",
+ "bt_device_create_bond failed");
+ }
+ tet_printf("bt_device_create_bond() was called");
+
+ /* cancel bonding */
+ ret = bt_device_cancel_bonding();
+ if (ret == BT_ERROR_NONE) {
+ tet_printf("bt_device_cancel_bonding() will be called");
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ bt_device_unset_bond_created_cb();
+ dts_check_eq("bt_device_cancel_bonding", callback_result, true,
+ "Failed");
+ } else {
+ bt_device_unset_bond_created_cb();
+ dts_fail("bt_device_cancel_bonding",
+ "bt_device_cancel_bonding() failed");
+ }
+}
+
+/**
+ * @brief Positive test case of bt_device_unset_bond_created_cb()
+ */
+static void utc_network_bluetooth_device_unset_bonded_cb_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ /* Normal operation test */
+ ret = bt_device_unset_bond_created_cb();
+ dts_check_eq("bt_device_unset_bond_created_cb", ret, BT_ERROR_NONE,
+ "bt_device_unset_bond_created_cb() failed");
+}
+
+/**
+ * @brief Positive test case of bt_device_create_bond()
+ */
+static void utc_network_bluetooth_device_bond_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ int timeout_id = 0;
+
+ callback_result = false;
+
+ /* bond device */
+ ret = bt_device_set_bond_created_cb(device_bonded_cb, "bond");
+ if (ret != BT_ERROR_NONE) {
+ tet_printf("bt_device_set_bond_created_cb was called");
+ }
+
+ ret = bt_device_create_bond(target_address);
+ if (ret == BT_ERROR_NONE) {
+ tet_printf("bt_device_bond_created_cb() will be called");
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ bt_device_unset_bond_created_cb();
+ dts_check_eq("bt_device_create_bond", ret, BT_ERROR_NONE,
+ "bt_device_create_bond() failed.");
+ } else {
+ bt_device_unset_bond_created_cb();
+ dts_fail("bt_device_create_bond",
+ "bt_device_create_bond() failed");
+ }
+}
+
+
+bool bonded_device_cb_for_device_p(bt_device_info_s *dev_info, void *user_data)
+{
+ int i = 0;
+ device_info = (bt_device_info_s *) malloc(sizeof(bt_device_info_s));
+ if (device_info == NULL) {
+ tet_printf("Callback: Memory allocation failed");
+ } else if (dev_info != NULL) {
+ device_info->remote_address = strdup(dev_info->remote_address);
+ tet_printf("device address : %s", device_info->remote_address);
+ device_info->remote_name = strdup(dev_info->remote_name);
+ tet_printf("device name : %s", device_info->remote_name);
+ device_info->bt_class.major_device_class = dev_info->bt_class.major_device_class;
+ tet_printf("major clasee : %2.2X", device_info->bt_class.major_device_class);
+ device_info->bt_class.minor_device_class = dev_info->bt_class.minor_device_class;
+ tet_printf("minor clasee : %2.2X", device_info->bt_class.minor_device_class);
+ device_info->bt_class.major_service_class_mask = dev_info->bt_class.major_service_class_mask;
+ tet_printf("service clasee : %2.2X", device_info->bt_class.major_service_class_mask);
+ device_info->service_count = dev_info->service_count;
+ tet_printf("service count : %d", device_info->service_count);
+ if (device_info->service_count > 0) {
+ device_info->service_uuid = (char **)malloc(sizeof(char *) * device_info->service_count);
+ if (device_info->service_uuid == NULL) {
+ tet_printf("Failed to allocate memory");
+ } else {
+ if (dev_info->service_uuid == NULL) {
+ tet_printf("service_list is NULL");
+ } else {
+ tet_printf("Copy service list");
+ for (i = 0; i < device_info->service_count; i++) {
+ device_info->service_uuid[i] = strdup(dev_info->service_uuid[i]);
+ tet_printf("Callback: service list[%d] - %s", i + 1, device_info->service_uuid[i]);
+ }
+ }
+ }
+ } else
+ device_info->service_uuid = NULL;
+
+ device_info->is_bonded = dev_info->is_bonded;
+ tet_printf("is_bonded : %d", device_info->is_bonded);
+ device_info->is_connected = dev_info->is_connected;
+ tet_printf("is_connected : %d", device_info->is_connected);
+ tet_printf("Callback: device_info was selected.");
+ }
+
+ return false;
+}
+
+/**
+ * @brief Positive test case of bt_adapter_foreach_bonded_device()
+ */
+static void utc_network_bluetooth_device_foreach_bonded_device_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_adapter_foreach_bonded_device(bonded_device_cb_for_device_p, NULL);
+ if (ret == BT_ERROR_NONE) {
+ dts_pass("bt_adapter_foreach_bonded_device",
+ "bt_adapter_foreach_bonded_device pass");
+ } else {
+ dts_fail("bt_adapter_foreach_bonded_device",
+ "bt_adapter_foreach_bonded_device() failed");
+ }
+}
+
+/**
+ * @brief Positive test case of bt_device_set_alias()
+ */
+static void utc_network_bluetooth_device_set_alias_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ if (device_info == NULL) {
+ tet_printf("No device to alias");
+ dts_fail("bt_device_set_alias", "bt_device_set_alias() failed");
+ return;
+ }
+
+ ret = bt_device_set_alias(device_info->remote_address, "dts_alias");
+ dts_check_eq("bt_device_set_alias", ret, BT_ERROR_NONE,
+ "bt_device_set_alias() failed");
+}
+
+/**
+ * @brief Positive test case of bt_device_set_authorization()
+ */
+static void utc_network_bluetooth_device_set_authorization_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ int timeout_id = 0;
+
+ callback_result = false;
+
+ ret = bt_device_set_authorization(target_address, BT_DEVICE_AUTHORIZED);
+ if (ret == BT_ERROR_NONE) {
+ tet_printf("device_authorization_state_changed_cb will be called");
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ dts_check_eq("bt_device_set_authorization", ret, BT_ERROR_NONE,
+ "bt_device_set_authorization() failed.");
+ callback_result = false;
+ } else {
+ dts_fail("bt_device_set_authorization",
+ "bt_device_set_authorization() failed");
+ }
+}
+
+/**
+ * @brief Positive test case of bt_device_destroy_bond()
+ */
+static void utc_network_bluetooth_device_unbond_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ int timeout_id = 0;
+ callback_result = false;
+
+ tet_printf("bt_device_destroy_bond() will start");
+ ret = bt_device_destroy_bond(target_address);
+ if (ret == BT_ERROR_NONE) {
+ tet_printf("bt_device_unbond_cb() will be called");
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ dts_check_eq("bt_device_destroy_bond", ret, BT_ERROR_NONE,
+ "bt_device_destroy_bond() failed.");
+ } else {
+ dts_fail("bt_device_destroy_bond",
+ "bt_device_destroy_bond() failed");
+ }
+}
+
+/**
+ * @brief Positive test case of bt_device_unset_bond_destroyed_cb()
+ */
+static void utc_network_bluetooth_device_unset_unbonded_cb_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ /* Normal operation test */
+ ret = bt_device_unset_bond_destroyed_cb();
+ dts_check_eq("bt_device_unset_bond_destroyed_cb", ret, BT_ERROR_NONE,
+ "bt_device_unset_bond_destroyed_cb() failed");
+}
+
+/**
+ * @brief Positive test case of bt_device_unset_authorization_changed_cb()
+ */
+static void utc_network_bluetooth_device_unset_authorization_state_changed_cb_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ /* Normal operation test */
+ ret = bt_device_unset_authorization_changed_cb();
+ dts_check_eq("bt_device_unset_authorization_changed_cb", ret,
+ BT_ERROR_NONE,
+ "bt_device_unset_authorization_changed_cb() failed");
+}
diff --git a/TC/testcase/utc_network_bluetooth_gatt_negative.c b/TC/testcase/utc_network_bluetooth_gatt_negative.c
new file mode 100755
index 0000000..e15467d
--- /dev/null
+++ b/TC/testcase/utc_network_bluetooth_gatt_negative.c
@@ -0,0 +1,298 @@
+/*
+ * utc_network_bluetooth_gatt_negative.c
+ *
+ * Created on: 23-Sep-2013
+ * Author: shagun.garg
+ */
+
+#include <tet_api.h>
+#include <bluetooth.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <glib.h>
+
+enum {
+ POSITIVE_TC_IDX = 0x01,
+ NEGATIVE_TC_IDX,
+};
+
+static void startup(void);
+static void cleanup(void);
+
+static GMainLoop *mainloop;
+
+void (*tet_startup) (void) = startup;
+void (*tet_cleanup) (void) = cleanup;
+
+static void utc_network_bluetooth_gatt_foreach_primary_services_n(void);
+static void utc_network_bluetooth_gatt_discover_characteristics_n(void);
+static void utc_network_bluetooth_gatt_get_service_uuid_n(void);
+static void utc_network_bluetooth_gatt_foreach_included_services_n(void);
+static void utc_network_bluetooth_gatt_set_characteristic_changed_cb_n(void);
+static void utc_network_bluetooth_gatt_unset_characteristic_changed_cb_n(void);
+static void utc_network_bluetooth_gatt_get_characteristic_declaration_n(void);
+static void utc_network_bluetooth_gatt_set_characteristic_value_n(void);
+static void utc_network_bluetooth_gatt_clone_attribute_handle_n(void);
+static void utc_network_bluetooth_gatt_destroy_attribute_handle_n(void);
+static void utc_network_bluetooth_gatt_connect_n(void);
+static void utc_network_bluetooth_gatt_disconnect_n(void);
+static void utc_network_bluetooth_set_gatt_connection_state_changed_cb_n(void);
+static void utc_network_bluetooth_unset_gatt_connection_state_changed_cb_n(void);
+
+void adapter_state_changed_cb_for_gatt_n(int result,
+ bt_adapter_state_e adapter_state, void *user_data);
+gboolean timeout_func(gpointer data);
+
+struct tet_testlist tet_testlist[] = {
+ {utc_network_bluetooth_gatt_foreach_primary_services_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_gatt_discover_characteristics_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_gatt_get_service_uuid_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_gatt_foreach_included_services_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_gatt_set_characteristic_changed_cb_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_set_gatt_connection_state_changed_cb_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_gatt_connect_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_gatt_disconnect_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_gatt_get_characteristic_declaration_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_gatt_set_characteristic_value_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_gatt_clone_attribute_handle_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_gatt_destroy_attribute_handle_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_unset_gatt_connection_state_changed_cb_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_gatt_unset_characteristic_changed_cb_n, NEGATIVE_TC_IDX},
+ {NULL, 0},
+};
+
+static void startup(void)
+{
+ int ret = BT_ERROR_NONE;
+ int timeout_id = 0;
+
+ /* start of TC */
+ mainloop = g_main_loop_new(NULL, FALSE);
+
+ bt_initialize();
+ if (bt_adapter_set_state_changed_cb(adapter_state_changed_cb_for_gatt_n, "startup") != BT_ERROR_NONE) {
+ tet_printf("DTS may fail because bt_adapter_set_state_changed_cb() failed");
+ }
+
+ tet_printf("bt_adapter_disable() was called.");
+ ret = bt_adapter_disable();
+ if (ret == BT_ERROR_NONE) {
+ tet_printf("bt_adapter_disable() succeeded.");
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ } else if (ret == BT_ERROR_NOT_ENABLED) {
+ tet_printf("Bluetooth adapter is not enabled.");
+ } else {
+ tet_printf("DTS may fail because bt_adapter_disable() failed");
+ }
+
+ if (bt_adapter_unset_state_changed_cb() != BT_ERROR_NONE) {
+ tet_printf("bt_adapter_set_state_changed_cb() failed.");
+ }
+
+ tet_printf("TC start");
+}
+
+static void cleanup(void)
+{
+ /* end of TC */
+ bt_deinitialize();
+ tet_printf("TC end.");
+}
+
+gboolean timeout_func(gpointer data)
+{
+ tet_printf("Callback: Timeout.");
+ g_main_loop_quit((GMainLoop *) data);
+ return FALSE;
+}
+
+/**
+ * @brief Callback funtions
+ */
+void adapter_state_changed_cb_for_gatt_n(int result,
+ bt_adapter_state_e adapter_state, void *user_data)
+{
+ tet_printf("Callback: bt_adapter_state_changed_cb was called.");
+ if ((user_data != NULL) && !strcmp((char *)user_data, "startup")) {
+ if (adapter_state == BT_ADAPTER_DISABLED && result == BT_ERROR_NONE) {
+ tet_printf("Callback: BT was disabled. DTS will be started.");
+ } else {
+ tet_printf("Callback: BT was not disabled. DTS will be started but DTS may fail.");
+ }
+
+ if (mainloop) {
+ g_main_loop_quit(mainloop);
+ }
+ }
+}
+
+
+/**
+ * @brief Negative test case of bt_gatt_foreach_primary_services()
+ */
+static void utc_network_bluetooth_gatt_foreach_primary_services_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_gatt_foreach_primary_services(NULL, NULL, NULL);
+ dts_check_eq("bt_gatt_foreach_primary_services", ret,
+ BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned when remote address and callback parameters are NULL.");
+}
+
+/**
+ * @brief Negative test case of bt_gatt_discover_characteristics()
+ */
+static void utc_network_bluetooth_gatt_discover_characteristics_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_gatt_discover_characteristics(NULL, NULL, NULL);
+ dts_check_eq("bt_gatt_discover_characteristics", ret,
+ BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned when service and callback parameters are NULL.");
+}
+
+/**
+ * @brief Negative test case of bt_gatt_get_service_uuid()
+ */
+static void utc_network_bluetooth_gatt_get_service_uuid_n(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_gatt_get_service_uuid(NULL, NULL);
+ dts_check_eq("bt_gatt_get_service_uuid", ret, BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned when service parameter is NULL.");
+}
+
+/**
+ * @brief Negative test case of bt_gatt_foreach_included_services()
+ */
+static void utc_network_bluetooth_gatt_foreach_included_services_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_gatt_foreach_included_services(NULL, NULL, NULL);
+ dts_check_eq("bt_socket_unset_connection_state_changed_cb", ret,
+ BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned when service and callback parameters are NULL.");
+}
+
+/**
+ * @brief Negative test case of bt_gatt_set_characteristic_changed_cb()
+ */
+static void utc_network_bluetooth_gatt_set_characteristic_changed_cb_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_gatt_set_characteristic_changed_cb(NULL, NULL);
+ dts_check_eq("bt_gatt_set_characteristic_changed_cb", ret,
+ BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned when service and callback parameters are NULL.");
+}
+
+/**
+ * @brief Negative test case of bt_gatt_unset_characteristic_changed_cb()
+ */
+static void utc_network_bluetooth_gatt_unset_characteristic_changed_cb_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_gatt_unset_characteristic_changed_cb();
+ dts_check_eq("bt_gatt_unset_characteristic_changed_cb", ret,
+ BT_ERROR_NOT_INITIALIZED,
+ "BT_ERROR_NOT_INITIALIZED must be returned when BT is not initialized.");
+}
+
+
+/**
+ * @brief Negative test case of bt_gatt_get_characteristic_declaration()
+ */
+static void utc_network_bluetooth_gatt_get_characteristic_declaration_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_gatt_get_characteristic_declaration(NULL, NULL, NULL, 0);
+ dts_check_eq("bt_gatt_get_characteristic_declaration", ret,
+ BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned when characteristic parameter is NULL.");
+}
+
+/**
+ * @brief Negative test case of bt_gatt_set_characteristic_value()
+ */
+static void utc_network_bluetooth_gatt_set_characteristic_value_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_gatt_set_characteristic_value(NULL, NULL, -1);
+ dts_check_eq("bt_socket_connect_rfcomm", ret, BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned when characteristic and value parameters are NULL.");
+}
+
+/**
+ * @brief Negative test case of bt_gatt_clone_attribute_handle()
+ */
+static void utc_network_bluetooth_gatt_clone_attribute_handle_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_gatt_clone_attribute_handle(NULL, NULL);
+ dts_check_eq("bt_gatt_clone_attribute_handle", ret,
+ BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned when origin parameter is NULL.");
+}
+
+/**
+ * @brief Negative test case of bt_gatt_destroy_attribute_handle()
+ */
+static void utc_network_bluetooth_gatt_destroy_attribute_handle_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_gatt_destroy_attribute_handle(NULL);
+ dts_check_eq("bt_gatt_destroy_attribute_handle", ret,
+ BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned when handle parameter is NULL.");
+}
+
+static void utc_network_bluetooth_gatt_connect_n(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_gatt_connect(NULL, false);
+ dts_check_eq("bt_gatt_connect", ret,
+ BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned when address is NULL.");
+
+}
+
+static void utc_network_bluetooth_gatt_disconnect_n(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_gatt_disconnect(NULL);
+ dts_check_eq("bt_gatt_connect", ret,
+ BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned when address is NULL.");
+
+}
+
+static void utc_network_bluetooth_set_gatt_connection_state_changed_cb_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_gatt_set_connection_state_changed_cb(NULL, NULL);
+ dts_check_eq("bt_gatt_set_connection_state_changed_cb", ret,
+ BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned when address is NULL.");
+}
+
+static void utc_network_bluetooth_unset_gatt_connection_state_changed_cb_n(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_deinitialize();
+ ret = bt_gatt_unset_connection_state_changed_cb();
+ dts_check_eq("bt_gatt_unset_connection_state_changed_cb", ret,
+ BT_ERROR_NOT_INITIALIZED,
+ "BT_ERROR_NOT_INITIALIZED must be returned when BT is not initialized.");
+}
diff --git a/TC/testcase/utc_network_bluetooth_gatt_positive.c b/TC/testcase/utc_network_bluetooth_gatt_positive.c
new file mode 100755
index 0000000..3c4730f
--- /dev/null
+++ b/TC/testcase/utc_network_bluetooth_gatt_positive.c
@@ -0,0 +1,407 @@
+/*
+ * utc_network_bluetooth_gatt_positive.c
+ *
+ * Created on: 23-Sep-2013
+ * Author: shagun.garg
+ */
+
+#include <tet_api.h>
+#include <bluetooth.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <glib.h>
+
+#define CONFIG_FILE_PATH "/opt/home/capi-network-bluetooth/tetware.conf"
+
+enum {
+ POSITIVE_TC_IDX = 0x01,
+ NEGATIVE_TC_IDX,
+};
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup) (void) = startup;
+void (*tet_cleanup) (void) = cleanup;
+
+char *remote_address;
+static GMainLoop *mainloop;
+
+static void utc_network_bluetooth_gatt_foreach_primary_services_p(void);
+static void utc_network_bluetooth_gatt_discover_characteristics_p(void);
+
+static void utc_network_bluetooth_gatt_get_service_uuid_p(void);
+static void utc_network_bluetooth_gatt_foreach_included_services_p(void);
+static void utc_network_bluetooth_gatt_set_characteristic_changed_cb_p(void);
+static void utc_network_bluetooth_gatt_unset_characteristic_changed_cb_p(void);
+static void utc_network_bluetooth_gatt_get_characteristic_declaration_p(void);
+static void utc_network_bluetooth_gatt_set_characteristic_value_p(void);
+static void utc_network_bluetooth_gatt_clone_attribute_handle_p(void);
+static void utc_network_bluetooth_gatt_destroy_attribute_handle_p(void);
+static void utc_network_bluetooth_gatt_connect_p(void);
+static void utc_network_bluetooth_gatt_disconnect_p(void);
+static void utc_network_bluetooth_set_gatt_connection_state_changed_cb_p(void);
+static void utc_network_bluetooth_unset_gatt_connection_state_changed_cb_p(void);
+
+gboolean timeout_func(gpointer data);
+void adapter_state_changed_cb_for_gatt_p(int result, bt_adapter_state_e adapter_state,
+ void *user_data);
+void adapter_le_state_changed_cb_for_gatt_p(int result, bt_adapter_le_state_e adapter_state,
+ void *user_data);
+
+bool primary_service_cb_for_gatt_p(bt_gatt_attribute_h service, void *user_data);
+bool included_service_cb_for_gatt_p(bt_gatt_attribute_h service, void *user_data);
+bool characteristics_discovered_cb_for_gatt_p(int result, int index, int total, bt_gatt_attribute_h characteristic,
+ void *user_data);
+void characteristics_changed_cb_for_gatt_p(bt_gatt_attribute_h characteristic, unsigned char *value, int value_length,
+ void *user_data);
+void gatt_connection_state_changed_cb(int result, bool connected,
+ const char *remote_address, void *user_data);
+
+struct tet_testlist tet_testlist[] = {
+ {utc_network_bluetooth_gatt_foreach_primary_services_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_gatt_discover_characteristics_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_gatt_get_service_uuid_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_gatt_foreach_included_services_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_gatt_set_characteristic_changed_cb_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_set_gatt_connection_state_changed_cb_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_gatt_connect_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_gatt_disconnect_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_unset_gatt_connection_state_changed_cb_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_gatt_unset_characteristic_changed_cb_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_gatt_get_characteristic_declaration_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_gatt_set_characteristic_value_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_gatt_clone_attribute_handle_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_gatt_destroy_attribute_handle_p, POSITIVE_TC_IDX},
+ {NULL, 0},
+};
+
+int get_value_from_file(void)
+{
+ FILE *fp;
+ char *token;
+ char buf[100];
+
+ fp = fopen(CONFIG_FILE_PATH, "r");
+ if (fp == NULL) {
+ tet_printf("Default configuration is used\n");
+ return -1;
+ }
+ while (fgets(buf, sizeof(buf), fp)) {
+ if (buf[0] == '#' || buf[0] == '\n')
+ continue;
+
+ token = strrchr(buf, '\n');
+ if (token == NULL) {
+ tet_printf("g_conf is too long\n");
+ break;
+ }
+ *token = '\0';
+
+ token = strtok(buf, "=");
+ if (token == NULL) {
+ continue;
+ }
+ if (strcasecmp(token, "BT_ADDR_LE") == 0) {
+ token = strtok(NULL, "=");
+ remote_address = strdup(token);
+ fclose(fp);
+ return 0;
+ }
+ }
+ fclose(fp);
+ return -1;
+}
+
+static void startup(void)
+{
+ bt_error_e ret = BT_ERROR_NONE;
+ int timeout_id = 0;
+
+ if(get_value_from_file() == -1) {
+ tet_printf("Failed to read.");
+ }
+
+ /* start of TC */
+ tet_printf("TC start.");
+ mainloop = g_main_loop_new(NULL, FALSE);
+
+ bt_initialize();
+
+ if (bt_adapter_set_state_changed_cb(adapter_state_changed_cb_for_gatt_p, "startup") != BT_ERROR_NONE) {
+ tet_printf("DTS may fail because bt_adapter_set_state_changed_cb() failed");
+ }
+
+ if (bt_adapter_le_set_state_changed_cb(adapter_le_state_changed_cb_for_gatt_p, "enable") != BT_ERROR_NONE) {
+ dts_fail("bt_adapter_le_enable",
+ "bt_adapter_le_set_state_changed_cb() failed.");
+ }
+
+ tet_printf("bt_adapter_enable() was called.");
+ ret = bt_adapter_enable();
+ if (ret == BT_ERROR_NONE) {
+ tet_printf("bt_adapter_enable() succeeded.");
+ tet_printf("bt_adapter_le_enable() was called.");
+ ret = bt_adapter_le_enable();
+ if (ret == BT_ERROR_NONE) {
+ tet_printf("bt_adapter_le_enable() succeeded.");
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ }
+ else {
+ tet_printf("DTS may fail because bt_adapter_le_enable failed");
+ bt_adapter_le_unset_state_changed_cb();
+ }
+ } else if (ret == BT_ERROR_NOT_ENABLED) {
+ tet_printf("Bluetooth adapter is not enabled.");
+ } else {
+ tet_printf("DTS may fail because bt_adapter_enable failed");
+ }
+
+ if (bt_adapter_unset_state_changed_cb() != BT_ERROR_NONE) {
+ tet_printf("bt_adapter_set_state_changed_cb() failed.");
+ }
+
+ tet_printf("TC start");
+}
+
+static void cleanup(void)
+{
+ /* end of TC */
+ bt_deinitialize();
+ tet_printf("TC end.");
+}
+
+gboolean timeout_func(gpointer data)
+{
+ tet_printf("[%s] Callback: Timeout.", __FUNCTION__);
+ g_main_loop_quit((GMainLoop *) data);
+ return FALSE;
+}
+
+
+
+void adapter_state_changed_cb_for_gatt_p(int result, bt_adapter_state_e adapter_state, void* user_data)
+{
+
+}
+void adapter_le_state_changed_cb_for_gatt_p(int result, bt_adapter_le_state_e adapter_le__state, void* user_data)
+{
+
+}
+
+bool primary_service_cb_for_gatt_p(bt_gatt_attribute_h service, void *user_data)
+{
+ return false;
+}
+
+bool characteristics_discovered_cb_for_gatt_p(int result, int index, int total, bt_gatt_attribute_h characteristic,
+ void *user_data)
+{
+ return false;
+}
+
+bool included_service_cb_for_gatt_p(bt_gatt_attribute_h service, void *user_data)
+{
+ return false;
+}
+
+void characteristics_changed_cb_for_gatt_p(bt_gatt_attribute_h characteristic, unsigned char *value, int value_length,
+ void *user_data)
+{
+
+}
+
+void gatt_connection_state_changed_cb(int result, bool connected,
+ const char *remote_address, void *user_data)
+{
+ tet_printf("bt_gatt_connection_state_changed_cb : %d", result);
+ if (connected)
+ tet_printf("LE Connected");
+ else
+ tet_printf("LE Disconnected");
+}
+
+/**
+ * @brief Positive test case of bt_gatt_foreach_primary_services()
+ */
+static void utc_network_bluetooth_gatt_foreach_primary_services_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_gatt_foreach_primary_services(remote_address, primary_service_cb_for_gatt_p, NULL);
+ dts_check_eq("bt_gatt_foreach_primary_services", ret, BT_ERROR_NONE,
+ "bt_gatt_foreach_primary_services() failed.");
+}
+
+
+/**
+ * @brief Positive test case of bt_gatt_discover_characteristics()
+ */
+static void utc_network_bluetooth_gatt_discover_characteristics_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ bt_gatt_attribute_h gatt_serv;
+ gatt_serv = g_malloc0(sizeof(bt_gatt_attribute_h));
+
+ ret = bt_gatt_discover_characteristics(gatt_serv, characteristics_discovered_cb_for_gatt_p, NULL);
+ dts_check_eq("bt_gatt_discover_characteristics", ret, BT_ERROR_NONE, "bt_gatt_discover_characteristics() failed.");
+}
+
+
+/**
+ * @brief Positive test case of bt_gatt_get_service_uuid()
+ */
+static void utc_network_bluetooth_gatt_get_service_uuid_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ char *uid = "dts_uid";
+ bt_gatt_attribute_h gatt_serv;
+ gatt_serv = g_malloc0(sizeof(bt_gatt_attribute_h));
+
+ ret = bt_gatt_get_service_uuid(gatt_serv, &uid);
+ dts_check_eq("bt_gatt_get_service_uuid", ret, BT_ERROR_NONE,
+ "bt_gatt_get_service_uuid() failed.");
+}
+
+/**
+ * @brief Positive test case of bt_gatt_foreach_included_services()
+ */
+static void utc_network_bluetooth_gatt_foreach_included_services_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ bt_gatt_attribute_h gatt_serv;
+ gatt_serv = g_malloc0(sizeof(bt_gatt_attribute_h));
+ ret = bt_gatt_foreach_included_services(gatt_serv, included_service_cb_for_gatt_p, NULL);
+ dts_check_eq("bt_gatt_foreach_included_services", ret, BT_ERROR_NONE,
+ "bt_gatt_foreach_included_services() failed.");
+}
+
+
+/**
+ * @brief Positive test case of bt_gatt_set_characteristic_changed_cb()
+ */
+static void utc_network_bluetooth_gatt_set_characteristic_changed_cb_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_gatt_set_characteristic_changed_cb(characteristics_changed_cb_for_gatt_p, NULL);
+ dts_check_eq("bt_gatt_set_characteristic_changed_cb", ret, BT_ERROR_NONE,
+ "bt_gatt_set_characteristic_changed_cb() failed.");
+}
+
+
+/**
+ * @brief Positive test case of bt_gatt_unset_characteristic_changed_cb()
+ */
+static void utc_network_bluetooth_gatt_unset_characteristic_changed_cb_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_gatt_unset_characteristic_changed_cb();
+ dts_check_eq("bt_gatt_unset_characteristic_changed_cb", ret, BT_ERROR_NONE,
+ "bt_gatt_unset_characteristic_changed_cb() failed.");
+
+}
+
+
+/**
+ * @brief Positive test case of bt_gatt_get_characteristic_declaration()
+ */
+static void utc_network_bluetooth_gatt_get_characteristic_declaration_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ char **uid = "dts_uid";
+ unsigned char **val = "dts_value";
+ int l = 1;
+ bt_gatt_attribute_h gatt_charac;
+ gatt_charac = g_malloc0(sizeof(bt_gatt_attribute_h));
+ ret = bt_gatt_get_characteristic_declaration(gatt_charac, uid, val, &l);
+ dts_check_eq("bt_gatt_get_characteristic_declaration", ret, BT_ERROR_NONE,
+ "gatt_get_characteristic_declaration() failed.");
+}
+
+
+/**
+ * @brief Positive test case of bt_gatt_set_characteristic_value()
+ */
+static void utc_network_bluetooth_gatt_set_characteristic_value_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ bt_gatt_attribute_h gatt_charac;
+ gatt_charac = g_malloc0(sizeof(bt_gatt_attribute_h));
+ const unsigned char *gatt_value = "dts_value";
+ ret = bt_gatt_set_characteristic_value(gatt_charac, gatt_value, strlen("dts_value"));
+ dts_check_eq("bt_gatt_set_characteristic_value", ret, BT_ERROR_NONE,
+ "bt_gatt_set_characteristic_value() failed.");
+}
+
+
+/**
+ * @brief Positive test case of bt_gatt_clone_attribute_handle()
+ */
+static void utc_network_bluetooth_gatt_clone_attribute_handle_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ bt_gatt_attribute_h gatt_origin;
+ bt_gatt_attribute_h gatt_clone;
+ gatt_origin = g_malloc0(sizeof(bt_gatt_attribute_h));
+ gatt_clone = g_malloc0(sizeof(bt_gatt_attribute_h));
+
+ ret = bt_gatt_clone_attribute_handle(&gatt_clone, gatt_origin);
+ dts_check_eq("bt_gatt_clone_attribute_handle", ret, BT_ERROR_NONE,
+ "bt_gatt_clone_attribute_handle() failed.");
+}
+
+
+/**
+ * @brief Positive test case of bt_gatt_destroy_attribute_handle()
+ */
+static void utc_network_bluetooth_gatt_destroy_attribute_handle_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ bt_gatt_attribute_h gatt_handle;
+ gatt_handle = g_malloc0(sizeof(bt_gatt_attribute_h));
+
+ ret = bt_gatt_destroy_attribute_handle(gatt_handle);
+ dts_check_eq("bt_gatt_destroy_attribute_handle", ret, BT_ERROR_NONE,
+ "bt_gatt_destroy_attribute_handle() failed.");
+}
+
+static void utc_network_bluetooth_gatt_connect_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_gatt_connect(remote_address, false);
+ dts_check_eq("bt_gatt_connect", ret, BT_ERROR_NONE,
+ "bt_gatt_connect() failed.");
+
+}
+
+static void utc_network_bluetooth_gatt_disconnect_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_gatt_disconnect(remote_address);
+ dts_check_eq("bt_gatt_connect", ret, BT_ERROR_NONE,
+ "bt_gatt_connect() failed.");
+
+}
+
+static void utc_network_bluetooth_set_gatt_connection_state_changed_cb_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_gatt_set_connection_state_changed_cb(gatt_connection_state_changed_cb, NULL);
+ dts_check_eq("bt_gatt_set_connection_state_changed_cb", ret, BT_ERROR_NONE,
+ "bt_gatt_set_connection_state_changed_cb() failed.");
+}
+
+static void utc_network_bluetooth_unset_gatt_connection_state_changed_cb_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_gatt_unset_connection_state_changed_cb();
+ dts_check_eq("bt_gatt_unset_connection_state_changed_cb", ret, BT_ERROR_NONE,
+ "bt_gatt_unset_connection_state_changed_cb() failed.");
+}
diff --git a/TC/testcase/utc_network_bluetooth_hdp_negative.c b/TC/testcase/utc_network_bluetooth_hdp_negative.c
new file mode 100644
index 0000000..d157a1f
--- /dev/null
+++ b/TC/testcase/utc_network_bluetooth_hdp_negative.c
@@ -0,0 +1,201 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <tet_api.h>
+#include <bluetooth.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <glib.h>
+
+enum {
+ POSITIVE_TC_IDX = 0x01,
+ NEGATIVE_TC_IDX,
+};
+
+static void startup(void);
+static void cleanup(void);
+
+static GMainLoop *mainloop;
+
+void (*tet_startup) (void) = startup;
+void (*tet_cleanup) (void) = cleanup;
+
+static void utc_network_bluetooth_hdp_register_sink_app_n(void);
+static void utc_network_bluetooth_hdp_unregister_sink_app_n(void);
+static void utc_network_bluetooth_hdp_connect_to_source_n(void);
+static void utc_network_bluetooth_hdp_disconnect_n(void);
+static void utc_network_bluetooth_hdp_send_data_n(void);
+static void utc_network_bluetooth_hdp_set_connection_state_changed_cb_n(void);
+static void utc_network_bluetooth_hdp_set_data_received_cb_n(void);
+
+void adapter_state_changed_cb_for_hdp_n(int result,
+ bt_adapter_state_e adapter_state, void *user_data);
+gboolean timeout_func(gpointer data);
+
+struct tet_testlist tet_testlist[] = {
+ { utc_network_bluetooth_hdp_register_sink_app_n, NEGATIVE_TC_IDX },
+ { utc_network_bluetooth_hdp_connect_to_source_n, NEGATIVE_TC_IDX },
+ { utc_network_bluetooth_hdp_send_data_n, NEGATIVE_TC_IDX },
+ { utc_network_bluetooth_hdp_set_connection_state_changed_cb_n, NEGATIVE_TC_IDX },
+ { utc_network_bluetooth_hdp_set_data_received_cb_n, NEGATIVE_TC_IDX },
+ { utc_network_bluetooth_hdp_disconnect_n, NEGATIVE_TC_IDX },
+ { utc_network_bluetooth_hdp_unregister_sink_app_n, NEGATIVE_TC_IDX },
+ { NULL, 0 },
+};
+
+static void startup(void)
+{
+ int ret = BT_ERROR_NONE;
+ int timeout_id = 0;
+
+ /* start of TC */
+ mainloop = g_main_loop_new(NULL, FALSE);
+
+ bt_initialize();
+ if (bt_adapter_set_state_changed_cb(adapter_state_changed_cb_for_hdp_n, "startup") != BT_ERROR_NONE) {
+ tet_printf("DTS may fail because bt_adapter_set_state_changed_cb() failed");
+ }
+
+ tet_printf("bt_adapter_disable() was called.");
+ ret = bt_adapter_disable();
+ if (ret == BT_ERROR_NONE) {
+ tet_printf("bt_adapter_disable() succeeded.");
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ } else if (ret == BT_ERROR_NOT_ENABLED) {
+ tet_printf("Bluetooth adapter is not enabled.");
+ } else {
+ tet_printf("DTS may fail because bt_adapter_disable() failed");
+ }
+
+ if (bt_adapter_unset_state_changed_cb() != BT_ERROR_NONE) {
+ tet_printf("bt_adapter_set_state_changed_cb() failed.");
+ }
+
+ tet_printf("TC start");
+}
+
+static void cleanup(void)
+{
+ /* end of TC */
+ bt_deinitialize();
+ tet_printf("TC end.");
+}
+
+gboolean timeout_func(gpointer data)
+{
+ tet_printf("Callback: Timeout.");
+ g_main_loop_quit((GMainLoop *) data);
+ return FALSE;
+}
+
+/**
+ * @brief Callback funtions
+ */
+void adapter_state_changed_cb_for_hdp_n(int result,
+ bt_adapter_state_e adapter_state, void *user_data)
+{
+
+}
+
+
+/**
+ * @brief Negative test case of bt_hdp_set_data_received_cb()
+ */
+static void utc_network_bluetooth_hdp_set_data_received_cb_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_hdp_set_data_received_cb(NULL, NULL);
+ dts_check_eq("bt_hdp_set_data_received_cb", ret, BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER is returned when cb parameters are NULL");
+}
+
+/**
+ * @brief Negative test case of bt_hdp_set_connection_state_changed_cb()
+ */
+static void utc_network_bluetooth_hdp_set_connection_state_changed_cb_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_hdp_set_connection_state_changed_cb(NULL, NULL, NULL);
+ dts_check_eq("bt_hdp_set_connection_state_changed_cb", ret,
+ BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER is returned when cb parameters are NULL");
+}
+
+
+/**
+ * @brief Negative test case of bt_hdp_disconnect()
+ */
+static void utc_network_bluetooth_hdp_disconnect_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_hdp_disconnect(NULL, 1);
+ dts_check_eq("bt_hdp_disconnect", ret, BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned when remote address parameter is NULL");
+}
+
+/**
+ * @brief Negative test case of bt_hdp_connect_to_source()
+ */
+static void utc_network_bluetooth_hdp_connect_to_source_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_hdp_connect_to_source(NULL, NULL);
+ dts_check_eq("bt_hdp_connect_to_source", ret, BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned when remote address and app_id parameter are NULL");
+}
+
+/**
+ * @brief Negative test case of bt_hdp_register_sink_app()
+ */
+static void utc_network_bluetooth_hdp_register_sink_app_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_hdp_register_sink_app(1, NULL);
+ dts_check_eq("bt_hdp_register_sink_app", ret, BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned when app_id parameter is NULL");
+}
+
+/**
+ * @brief Negative test case of bt_hdp_unregister_sink_appe()
+ */
+static void utc_network_bluetooth_hdp_unregister_sink_app_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_hdp_unregister_sink_app(NULL);
+ dts_check_eq("bt_shdp_unregister_sink", ret, BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned when app_id parameter is NULL");
+}
+
+/**
+ * @brief Negative test case of bt_hdp_send_data()
+ */
+static void utc_network_bluetooth_hdp_send_data_n(void)
+{
+ int ret = BT_ERROR_NONE;
+ char *data = "dts_test";
+
+ ret = bt_hdp_send_data(1, data, sizeof(data));
+ dts_check_eq("bt_hdp_send_data", ret, BT_ERROR_NOT_ENABLED,
+ "BT_ERROR_NOT_ENABLED must be returned when BT is not enabled");
+}
diff --git a/TC/testcase/utc_network_bluetooth_hdp_positive.c b/TC/testcase/utc_network_bluetooth_hdp_positive.c
new file mode 100755
index 0000000..b99e6f5
--- /dev/null
+++ b/TC/testcase/utc_network_bluetooth_hdp_positive.c
@@ -0,0 +1,242 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <tet_api.h>
+#include <bluetooth.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <glib.h>
+
+enum {
+ POSITIVE_TC_IDX = 0x01,
+ NEGATIVE_TC_IDX,
+};
+
+static void startup(void);
+static void cleanup(void);
+
+static GMainLoop *mainloop;
+
+void(*tet_startup)(void) = startup;
+void(*tet_cleanup)(void) = cleanup;
+
+const char *appid = "/org/bluez/health_app_2";
+const char *remote_adr = "00:22:58:07:77:BB";
+
+static void utc_network_bluetooth_hdp_register_sink_app_p(void);
+static void utc_network_bluetooth_hdp_unregister_sink_app_p(void);
+static void utc_network_bluetooth_hdp_connect_to_source_p(void);
+static void utc_network_bluetooth_hdp_disconnect_p(void);
+static void utc_network_bluetooth_hdp_send_data_p(void);
+static void utc_network_bluetooth_hdp_set_connection_state_changed_cb_p(void);
+static void utc_network_bluetooth_hdp_unset_connection_state_changed_cb_p(void);
+static void utc_network_bluetooth_hdp_set_data_received_cb_p(void);
+static void utc_network_bluetooth_hdp_unset_data_received_cb_p(void);
+
+void data_received_cb_for_hdp_p(unsigned int channel, const char *data,
+ unsigned int size, void *user_data);
+void connected_cb_for_hdp_p(int result, const char *remote_address,
+ const char *app_id,
+ bt_hdp_channel_type_e type, unsigned int channel, void *user_data);
+void disconnected_cb_for_hdp_p(int result, const char *remote_address,
+ unsigned int channel, void *user_data);
+
+
+
+void adapter_state_changed_cb_for_hdp_p(int result,
+ bt_adapter_state_e adapter_state, void *user_data);
+gboolean timeout_func(gpointer data);
+
+struct tet_testlist tet_testlist[] = {
+ {utc_network_bluetooth_hdp_register_sink_app_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_hdp_set_connection_state_changed_cb_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_hdp_set_data_received_cb_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_hdp_connect_to_source_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_hdp_send_data_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_hdp_disconnect_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_hdp_unset_connection_state_changed_cb_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_hdp_unset_data_received_cb_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_hdp_unregister_sink_app_p, POSITIVE_TC_IDX},
+ {NULL, 0},
+};
+
+
+static void startup(void)
+{
+ int ret = BT_ERROR_NONE;
+ int timeout_id = 0;
+
+ /* start of TC */
+ mainloop = g_main_loop_new(NULL, FALSE);
+
+ bt_initialize();
+ if (bt_adapter_set_state_changed_cb(adapter_state_changed_cb_for_hdp_p, "startup") != BT_ERROR_NONE) {
+ tet_printf("DTS may fail because bt_adapter_set_state_changed_cb() failed");
+ }
+
+ tet_printf("bt_adapter_enable() was called.");
+ ret = bt_adapter_enable();
+ if (ret == BT_ERROR_NONE) {
+ tet_printf("bt_adapter_enable() succeeded.");
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ } else if (ret != BT_ERROR_ALREADY_DONE) {
+ tet_printf("DTS may fail because bt_adapter_disable() failed");
+ } else if (ret == BT_ERROR_NOT_ENABLED) {
+ tet_printf("Bluetooth adapter is not enabled.");
+ } else {
+ tet_printf("DTS may fail because bt_adapter_disable() failed");
+ }
+
+ if (bt_adapter_unset_state_changed_cb() != BT_ERROR_NONE) {
+ tet_printf("bt_adapter_set_state_changed_cb() failed.");
+ }
+
+ tet_printf("TC start");
+}
+
+static void cleanup(void)
+{
+ /* end of TC */
+ bt_deinitialize();
+ tet_printf("TC end.");
+}
+
+gboolean timeout_func(gpointer data)
+{
+ tet_printf("Callback: Timeout.");
+ g_main_loop_quit((GMainLoop *) data);
+ return FALSE;
+}
+
+void adapter_state_changed_cb_for_hdp_p(int result,
+ bt_adapter_state_e adapter_state, void *user_data)
+{
+
+}
+
+void data_received_cb_for_hdp_p(unsigned int channel, const char *data,
+ unsigned int size, void *user_data)
+{
+
+}
+
+void connected_cb_for_hdp_p(int result, const char *remote_address,
+ const char *app_id,
+ bt_hdp_channel_type_e type, unsigned int channel, void *user_data)
+{
+
+}
+
+void disconnected_cb_for_hdp_p(int result, const char *remote_address,
+ unsigned int channel, void *user_data)
+{
+
+}
+
+static void utc_network_bluetooth_hdp_set_data_received_cb_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_hdp_set_data_received_cb(data_received_cb_for_hdp_p, NULL);
+ dts_check_eq("bt_hdp_set_data_received_cb", ret, BT_ERROR_NONE,
+ "bt_hdp_set_data_received_cb() failed.");
+}
+
+
+static void utc_network_bluetooth_hdp_unset_data_received_cb_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_hdp_unset_data_received_cb();
+ dts_check_eq("bt_hdp_unset_data_received_cb", ret, BT_ERROR_NONE,
+ "bt_hdp_unset_data_received_cb() failed.");
+}
+
+static void utc_network_bluetooth_hdp_set_connection_state_changed_cb_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_hdp_set_connection_state_changed_cb(connected_cb_for_hdp_p,
+ disconnected_cb_for_hdp_p, NULL);
+ dts_check_eq("bt_hdp_set_connection_state_changed_cb", ret, BT_ERROR_NONE,
+ "bt_hdp_set_connection_state_changed_cb() failed.");
+}
+
+static void utc_network_bluetooth_hdp_unset_connection_state_changed_cb_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_hdp_unset_connection_state_changed_cb();
+ dts_check_eq("bt_hdp_unset_connection_state_changed_cb", ret, BT_ERROR_NONE,
+ "bt_hdp_unset_connection_state_changed_cb() failed.");
+}
+
+static void utc_network_bluetooth_hdp_send_data_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ char *dts_test = "dts_test";
+
+ ret = bt_hdp_send_data(1, "dts_test", sizeof(dts_test));
+ dts_check_eq("bt_hdp_send_data", ret, BT_ERROR_NONE,
+ "bt_hdp_send_data() failed.");
+}
+
+static void utc_network_bluetooth_hdp_disconnect_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ char *remote_adr = "00:22:58:07:77:BB";
+
+ ret = bt_hdp_disconnect(remote_adr, 0);
+ dts_check_eq("bt_hdp_disconnect", ret, BT_ERROR_NONE,
+ "bt_hdp_disconnect() failed.");
+}
+
+static void utc_network_bluetooth_hdp_connect_to_source_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_hdp_connect_to_source(remote_adr, appid);
+ dts_check_eq("bt_hdp_connect_to_source", ret, BT_ERROR_NONE,
+ "bt_hdp_connect_to_source() failed.");
+
+}
+
+static void utc_network_bluetooth_hdp_unregister_sink_app_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_hdp_unregister_sink_app(appid);
+ dts_check_eq("bt_hdp_unregister_sink_app", ret, BT_ERROR_NONE,
+ "bt_hdp_unregister_sink_app() failed.");
+
+}
+
+static void utc_network_bluetooth_hdp_register_sink_app_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_hdp_register_sink_app(1, &appid);
+ dts_check_eq("bt_hdp_register_sink_app", ret, BT_ERROR_NONE,
+ "bt_hdp_register_sink_app() failed.");
+
+}
+
+
+
+
+
diff --git a/TC/testcase/utc_network_bluetooth_hid_negative.c b/TC/testcase/utc_network_bluetooth_hid_negative.c
new file mode 100755
index 0000000..e8cb5f8
--- /dev/null
+++ b/TC/testcase/utc_network_bluetooth_hid_negative.c
@@ -0,0 +1,142 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <tet_api.h>
+#include <bluetooth.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <glib.h>
+
+enum {
+ POSITIVE_TC_IDX = 0x01,
+ NEGATIVE_TC_IDX,
+};
+
+static void startup(void);
+static void cleanup(void);
+
+static GMainLoop *mainloop;
+
+void (*tet_startup) (void) = startup;
+void (*tet_cleanup) (void) = cleanup;
+
+static void utc_network_bluetooth_hid_host_initialize_n(void);
+static void utc_network_bluetooth_hid_host_connect_n(void);
+static void utc_network_bluetooth_hid_host_disconnect_n(void);
+
+void adapter_state_changed_cb_for_hid_n(int result,
+ bt_adapter_state_e adapter_state, void *user_data);
+gboolean timeout_func(gpointer data);
+
+struct tet_testlist tet_testlist[] = {
+ {utc_network_bluetooth_hid_host_initialize_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_hid_host_connect_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_hid_host_disconnect_n, NEGATIVE_TC_IDX},
+ {NULL, 0},
+};
+
+
+static void startup(void)
+{
+ int ret = BT_ERROR_NONE;
+ int timeout_id = 0;
+
+ /* start of TC */
+ mainloop = g_main_loop_new(NULL, FALSE);
+
+ bt_initialize();
+ if (bt_adapter_set_state_changed_cb(adapter_state_changed_cb_for_hid_n, "startup") != BT_ERROR_NONE) {
+ tet_printf("DTS may fail because bt_adapter_set_state_changed_cb() failed");
+ }
+
+ tet_printf("bt_adapter_disable() was called.");
+ ret = bt_adapter_disable();
+ if (ret == BT_ERROR_NONE) {
+ tet_printf("bt_adapter_disable() succeeded.");
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ } else if (ret == BT_ERROR_NOT_ENABLED) {
+ tet_printf("Bluetooth adapter is not enabled.");
+ } else {
+ tet_printf("DTS may fail because bt_adapter_disable() failed");
+ }
+
+ if (bt_adapter_unset_state_changed_cb() != BT_ERROR_NONE) {
+ tet_printf("bt_adapter_set_state_changed_cb() failed.");
+ }
+
+ tet_printf("TC start");
+}
+
+
+static void cleanup(void)
+{
+ /* end of TC */
+ bt_deinitialize();
+ tet_printf("TC end.");
+}
+
+
+gboolean timeout_func(gpointer data)
+{
+ tet_printf("Callback: Timeout.");
+ g_main_loop_quit((GMainLoop *) data);
+ return FALSE;
+}
+
+void adapter_state_changed_cb_for_hid_n(int result,
+ bt_adapter_state_e adapter_state, void *user_data)
+{
+
+}
+void host_connection_state_changed_cb_for_hid_p(int result,
+ bool connected, const char *remote_address, void *user_data)
+{
+
+}
+
+static void utc_network_bluetooth_hid_host_initialize_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_hid_host_initialize(NULL, NULL);
+ dts_check_eq("bt_hid_host_initialize", ret,
+ BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned when callback parameter is NULL.");
+}
+
+
+static void utc_network_bluetooth_hid_host_connect_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_hid_host_initialize(host_connection_state_changed_cb_for_hid_p, NULL);
+
+ ret = bt_hid_host_connect(NULL);
+ dts_check_eq("bt_hid_host_connect", ret, BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned when remote address parameter is NULL.");
+}
+
+
+static void utc_network_bluetooth_hid_host_disconnect_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_hid_host_disconnect(NULL);
+ dts_check_eq("bt_hid_host_disconnect", ret, BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned when remote address parameter is NULL.");
+}
diff --git a/TC/testcase/utc_network_bluetooth_hid_positive.c b/TC/testcase/utc_network_bluetooth_hid_positive.c
new file mode 100755
index 0000000..95e7db1
--- /dev/null
+++ b/TC/testcase/utc_network_bluetooth_hid_positive.c
@@ -0,0 +1,159 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <tet_api.h>
+#include <bluetooth.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <glib.h>
+
+enum {
+ POSITIVE_TC_IDX = 0x01,
+ NEGATIVE_TC_IDX,
+};
+
+static void startup(void);
+static void cleanup(void);
+
+static GMainLoop *mainloop;
+
+void (*tet_startup) (void) = startup;
+void (*tet_cleanup) (void) = cleanup;
+
+static void utc_network_bluetooth_hid_host_initialize_p(void);
+static void utc_network_bluetooth_hid_host_deinitialize_p(void);
+static void utc_network_bluetooth_hid_host_connect_p(void);
+static void utc_network_bluetooth_hid_host_disconnect_p(void);
+
+void adapter_state_changed_cb_for_hid_p(int result,
+ bt_adapter_state_e adapter_state, void *user_data);
+void host_connection_state_changed_cb_for_hid_p(int result,
+ bool connected, const char *remote_address, void *user_data);
+gboolean timeout_func(gpointer data);
+
+struct tet_testlist tet_testlist[] = {
+ {utc_network_bluetooth_hid_host_initialize_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_hid_host_connect_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_hid_host_disconnect_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_hid_host_deinitialize_p, POSITIVE_TC_IDX},
+ {NULL, 0},
+};
+
+
+static void startup(void)
+{
+ int ret = BT_ERROR_NONE;
+ int timeout_id = 0;
+
+ /* start of TC */
+ mainloop = g_main_loop_new(NULL, FALSE);
+
+ bt_initialize();
+ if (bt_adapter_set_state_changed_cb(adapter_state_changed_cb_for_hid_p, "startup") != BT_ERROR_NONE) {
+ tet_printf("DTS may fail because bt_adapter_set_state_changed_cb() failed");
+ }
+
+ tet_printf("bt_adapter_enable() was called.");
+ ret = bt_adapter_enable();
+ if (ret == BT_ERROR_NONE) {
+ tet_printf("bt_adapter_enable() succeeded.");
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ } else if (ret != BT_ERROR_ALREADY_DONE) {
+ tet_printf("DTS may fail because bt_adapter_disable() failed");
+ } else if (ret == BT_ERROR_NOT_ENABLED) {
+ tet_printf("Bluetooth adapter is not enabled.");
+ } else {
+ tet_printf("DTS may fail because bt_adapter_disable() failed");
+ }
+
+ if (bt_adapter_unset_state_changed_cb() != BT_ERROR_NONE) {
+ tet_printf("bt_adapter_set_state_changed_cb() failed.");
+ }
+
+ tet_printf("TC start");
+}
+
+
+static void cleanup(void)
+{
+ /* end of TC */
+ bt_deinitialize();
+ tet_printf("TC end.");
+}
+
+
+gboolean timeout_func(gpointer data)
+{
+ tet_printf("Callback: Timeout.");
+ g_main_loop_quit((GMainLoop *) data);
+ return FALSE;
+}
+
+void adapter_state_changed_cb_for_hid_p(int result,
+ bt_adapter_state_e adapter_state, void *user_data)
+{
+
+}
+
+void host_connection_state_changed_cb_for_hid_p(int result,
+ bool connected, const char *remote_address, void *user_data)
+{
+
+}
+
+
+static void utc_network_bluetooth_hid_host_initialize_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_hid_host_initialize(host_connection_state_changed_cb_for_hid_p, NULL);
+ dts_check_eq("bt_hid_host_initialize", ret, BT_ERROR_NONE,
+ "bt_hid_host_initialize() failed.");
+}
+
+
+static void utc_network_bluetooth_hid_host_deinitialize_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_hid_host_deinitialize();
+ dts_check_eq("bt_hid_host_deinitialize", ret, BT_ERROR_NONE,
+ "bt_hid_host_deinitialize() failed.");
+}
+
+
+static void utc_network_bluetooth_hid_host_connect_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ char *remote_addr = "dts_addr";
+
+ ret = bt_hid_host_connect(remote_addr);
+ dts_check_eq("bt_hid_host_connect", ret, BT_ERROR_NONE,
+ "bt_hid_host_connect() failed.");
+}
+
+
+static void utc_network_bluetooth_hid_host_disconnect_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ char *remote_addr = "dts_addr";
+
+ ret = bt_hid_host_disconnect(remote_addr);
+ dts_check_eq("bt_hid_host_disconnect", ret, BT_ERROR_NONE,
+ "bt_hid_host_disconnect() failed.");
+}
diff --git a/TC/testcase/utc_network_bluetooth_opp-client_negative.c b/TC/testcase/utc_network_bluetooth_opp-client_negative.c
new file mode 100755
index 0000000..77ecc79
--- /dev/null
+++ b/TC/testcase/utc_network_bluetooth_opp-client_negative.c
@@ -0,0 +1,136 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <tet_api.h>
+#include <bluetooth.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <glib.h>
+
+enum {
+ POSITIVE_TC_IDX = 0x01,
+ NEGATIVE_TC_IDX,
+};
+
+static void startup(void);
+static void cleanup(void);
+
+static GMainLoop *mainloop;
+
+void (*tet_startup) (void) = startup;
+void (*tet_cleanup) (void) = cleanup;
+
+static void utc_network_bluetooth_opp_client_add_file_n(void);
+static void utc_network_bluetooth_opp_client_push_files_n(void);
+
+void adapter_state_changed_cb_for_opp_client_n(int result,
+ bt_adapter_state_e adapter_state, void *user_data);
+gboolean timeout_func(gpointer data);
+
+struct tet_testlist tet_testlist[] = {
+ {utc_network_bluetooth_opp_client_add_file_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_opp_client_push_files_n, NEGATIVE_TC_IDX},
+ {NULL, 0},
+};
+
+
+static void startup(void)
+{
+ int ret = BT_ERROR_NONE;
+ int timeout_id = 0;
+
+ /* start of TC */
+ mainloop = g_main_loop_new(NULL, FALSE);
+
+ bt_initialize();
+ bt_opp_client_initialize();
+ if (bt_adapter_set_state_changed_cb(adapter_state_changed_cb_for_opp_client_n, "startup") != BT_ERROR_NONE) {
+ tet_printf("DTS may fail because bt_adapter_set_state_changed_cb() failed");
+ }
+
+ tet_printf("bt_adapter_disable() was called.");
+ ret = bt_adapter_disable();
+ if (ret == BT_ERROR_NONE) {
+ tet_printf("bt_adapter_disable() succeeded.");
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ } else if (ret == BT_ERROR_NOT_ENABLED) {
+ tet_printf("Bluetooth adapter is not enabled.");
+ } else {
+ tet_printf("DTS may fail because bt_adapter_disable() failed");
+ }
+
+ if (bt_adapter_unset_state_changed_cb() != BT_ERROR_NONE) {
+ tet_printf("bt_adapter_set_state_changed_cb() failed.");
+ }
+
+ tet_printf("TC start");
+}
+
+
+static void cleanup(void)
+{
+ /* end of TC */
+ bt_deinitialize();
+ tet_printf("TC end.");
+}
+
+
+gboolean timeout_func(gpointer data)
+{
+ tet_printf("Callback: Timeout.");
+ g_main_loop_quit((GMainLoop *) data);
+ return FALSE;
+}
+
+void adapter_state_changed_cb_for_opp_client_n(int result,
+ bt_adapter_state_e adapter_state, void *user_data)
+{
+ if (user_data != NULL && !strcmp((char *)user_data, "startup")) {
+ if (adapter_state == BT_ADAPTER_ENABLED && result == BT_ERROR_NONE) {
+ tet_printf("Callback: BT was enabled.");
+ bt_adapter_start_device_discovery();
+ } else {
+ tet_printf("Callback: BT was not enabled. DTS will be started but DTS may fail.");
+ if (mainloop) {
+ g_main_loop_quit(mainloop);
+ }
+ }
+ }
+}
+
+
+static void utc_network_bluetooth_opp_client_add_file_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_opp_client_add_file(NULL);
+ dts_check_eq("bt_opp_client_add_file", ret, BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned when file parameter is NULL");
+}
+
+
+static void utc_network_bluetooth_opp_client_push_files_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_opp_client_push_files(NULL, NULL, NULL, NULL, NULL);
+ dts_check_eq("bt_opp_client_push_files", ret, BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned when parameters are NULL");
+}
+
+
diff --git a/TC/testcase/utc_network_bluetooth_opp-client_positive.c b/TC/testcase/utc_network_bluetooth_opp-client_positive.c
new file mode 100755
index 0000000..580a788
--- /dev/null
+++ b/TC/testcase/utc_network_bluetooth_opp-client_positive.c
@@ -0,0 +1,261 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <tet_api.h>
+#include <bluetooth.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <glib.h>
+
+#define CONFIG_FILE_PATH "/opt/home/capi-network-bluetooth/tetware.conf"
+enum {
+ POSITIVE_TC_IDX = 0x01,
+ NEGATIVE_TC_IDX,
+};
+
+static void startup(void);
+static void cleanup(void);
+
+static GMainLoop *mainloop;
+
+void(*tet_startup)(void) = startup;
+void(*tet_cleanup)(void) = cleanup;
+
+char *remote_address;
+
+static void utc_network_bluetooth_opp_client_initialize_p(void);
+static void utc_network_bluetooth_opp_client_deinitialize_p(void);
+static void utc_network_bluetooth_opp_client_add_file_p(void);
+static void utc_network_bluetooth_opp_client_clear_files_p(void);
+static void utc_network_bluetooth_opp_client_push_files_p(void);
+static void utc_network_bluetooth_opp_client_cancel_push_p(void);
+
+void push_responded_cb_for_opp_client_p(int result,
+ const char *remote_address, void *user_data);
+void push_progress_cb_for_opp_client_p(const char *file,
+ long long size, int percent, void *user_data);
+void push_finished_cb_for_opp_client_p(int result,
+ const char *remote_address, void *user_data);
+void adapter_state_changed_cb_for_opp_client_p(int result,
+ bt_adapter_state_e adapter_state, void *user_data);
+gboolean timeout_func(gpointer data);
+
+struct tet_testlist tet_testlist[] = {
+ {utc_network_bluetooth_opp_client_initialize_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_opp_client_add_file_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_opp_client_push_files_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_opp_client_cancel_push_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_opp_client_clear_files_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_opp_client_deinitialize_p, POSITIVE_TC_IDX},
+ {NULL, 0},
+};
+
+int get_value_from_file(void)
+{
+ FILE *fp;
+ char *token;
+ char buf[100];
+
+ fp = fopen(CONFIG_FILE_PATH, "r");
+ if (fp == NULL) {
+ tet_printf("Default configuration is used\n");
+ return -1;
+ }
+ while (fgets(buf, sizeof(buf), fp)) {
+ if (buf[0] == '#' || buf[0] == '\n')
+ continue;
+
+ token = strrchr(buf, '\n');
+ if (token == NULL) {
+ tet_printf("g_conf is too long\n");
+ break;
+ }
+ *token = '\0';
+
+ token = strtok(buf, "=");
+ if (token == NULL) {
+ continue;
+ }
+ if (strcasecmp(token, "BT_ADDR_MOBILE") == 0) {
+ token = strtok(NULL, "=");
+ remote_address = strdup(token);
+ fclose(fp);
+ return 0;
+ }
+ }
+ fclose(fp);
+ return -1;
+}
+
+static void startup(void)
+{
+ int ret = BT_ERROR_NONE;
+ int timeout_id = 0;
+
+ if(get_value_from_file() == -1) {
+ tet_printf("Failed to read.");
+ }
+
+ /* start of TC */
+ mainloop = g_main_loop_new(NULL, FALSE);
+
+ bt_initialize();
+ if (bt_adapter_set_state_changed_cb(adapter_state_changed_cb_for_opp_client_p, "startup") != BT_ERROR_NONE) {
+ tet_printf("DTS may fail because bt_adapter_set_state_changed_cb() failed");
+ }
+
+ tet_printf("bt_adapter_enable() was called.");
+ ret = bt_adapter_enable();
+ if (ret == BT_ERROR_NONE) {
+ tet_printf("bt_adapter_enable() succeeded.");
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ } else if (ret != BT_ERROR_ALREADY_DONE) {
+ tet_printf("DTS may fail because bt_adapter_disable() failed");
+ } else if (ret == BT_ERROR_NOT_ENABLED) {
+ tet_printf("Bluetooth adapter is not enabled.");
+ } else {
+ tet_printf("DTS may fail because bt_adapter_disable() failed");
+ }
+
+ if (bt_adapter_unset_state_changed_cb() != BT_ERROR_NONE) {
+ tet_printf("bt_adapter_set_state_changed_cb() failed.");
+ }
+
+ tet_printf("TC start");
+}
+
+static void cleanup(void)
+{
+ /* end of TC */
+ bt_deinitialize();
+ tet_printf("TC end.");
+}
+
+gboolean timeout_func(gpointer data)
+{
+ tet_printf("Callback: Timeout.");
+ g_main_loop_quit((GMainLoop *) data);
+ return FALSE;
+}
+
+void adapter_state_changed_cb_for_opp_client_p(int result,
+ bt_adapter_state_e adapter_state, void *user_data)
+{
+ if ((user_data != NULL) && !strcmp((char *)user_data, "startup")) {
+ if (adapter_state == BT_ADAPTER_ENABLED && result == BT_ERROR_NONE) {
+ tet_printf("Callback: BT was enabled.");
+ bt_adapter_start_device_discovery();
+ } else {
+ tet_printf("Callback: BT was not enabled. DTS will be started but DTS may fail.");
+ if (mainloop) {
+ g_main_loop_quit(mainloop);
+ }
+ }
+ }
+}
+
+void push_responded_cb_for_opp_client_p(int result,
+ const char *remote_address, void *user_data)
+{
+
+}
+
+
+void push_progress_cb_for_opp_client_p(const char *file, long long size,
+ int percent, void *user_data)
+{
+
+}
+
+
+void push_finished_cb_for_opp_client_p(int result,
+ const char *remote_address, void *user_data)
+{
+
+}
+
+
+static void utc_network_bluetooth_opp_client_initialize_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_opp_client_initialize();
+ dts_check_eq("bt_opp_client_initialize", ret,
+ BT_ERROR_NONE, "bt_opp_client_initialize() failed.");
+}
+
+static void utc_network_bluetooth_opp_client_deinitialize_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_opp_client_deinitialize();
+ dts_check_eq("bt_opp_client_deinitialize", ret,
+ BT_ERROR_NONE, "bt_opp_client_deinitialize() failed.");
+
+}
+
+static void utc_network_bluetooth_opp_client_add_file_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ int fd = 0;
+ const char *file = "/tmp/a.txt";
+
+ if (access("/tmp/a.txt", F_OK) < 0) {
+ fd = open("/tmp/a.txt", O_RDWR|O_CREAT,0666);
+ write(fd, "hey", 3);
+ }
+
+ ret = bt_opp_client_add_file(file);
+ dts_check_eq("bt_opp_client_add_file", ret,
+ BT_ERROR_NONE, "bt_opp_client_add_file() failed");
+}
+
+
+static void utc_network_bluetooth_opp_client_clear_files_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_opp_client_clear_files();
+ dts_check_eq("bt_opp_client_clear_files", ret,
+ BT_ERROR_NONE, "bt_opp_client_clear_files() failed.");
+
+}
+
+
+static void utc_network_bluetooth_opp_client_push_files_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_opp_client_push_files(remote_address, push_responded_cb_for_opp_client_p,
+ push_progress_cb_for_opp_client_p, push_finished_cb_for_opp_client_p, NULL);
+
+ dts_check_eq("bt_opp_client_push_files", ret,
+ BT_ERROR_NONE, "bt_opp_client_push_files() failed");
+}
+
+static void utc_network_bluetooth_opp_client_cancel_push_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_opp_client_cancel_push();
+ dts_check_eq("bt_opp_client_cancel_push", ret,
+ BT_ERROR_NONE, "bt_opp_client_cancel_push() failed.");
+}
diff --git a/TC/testcase/utc_network_bluetooth_opp-server_negative.c b/TC/testcase/utc_network_bluetooth_opp-server_negative.c
new file mode 100755
index 0000000..a7d911d
--- /dev/null
+++ b/TC/testcase/utc_network_bluetooth_opp-server_negative.c
@@ -0,0 +1,191 @@
+/*
+ *
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <tet_api.h>
+#include <bluetooth.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <glib.h>
+
+enum {
+ POSITIVE_TC_IDX = 0x01,
+ NEGATIVE_TC_IDX,
+};
+
+static void startup(void);
+static void cleanup(void);
+
+static GMainLoop *mainloop;
+const char *dest = "/tmp";
+
+void (*tet_startup) (void) = startup;
+void (*tet_cleanup) (void) = cleanup;
+
+static void utc_network_bluetooth_opp_server_initialize_n(void);
+static void utc_network_bluetooth_opp_server_initialize_by_connection_request_n(void);
+static void utc_network_bluetooth_opp_server_accept_n(void);
+static void utc_network_bluetooth_opp_server_set_destination_n(void);
+
+void adapter_state_changed_cb_for_opp_server_n(int result,
+ bt_adapter_state_e adapter_state, void *user_data);
+void transfer_progress_cb_for_opp_server(const char *file, long long size,
+ int percent, void *user_data);
+void transfer_finished_cb_for_opp_server(int result, const char *file,
+ long long size, void *user_data);
+void push_requested_cb_for_opp_server(const char *file, int size, void *user_data);
+
+gboolean timeout_func(gpointer data);
+
+struct tet_testlist tet_testlist[] = {
+ {utc_network_bluetooth_opp_server_initialize_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_opp_server_initialize_by_connection_request_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_opp_server_set_destination_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_opp_server_accept_n, NEGATIVE_TC_IDX},
+ {NULL, 0},
+};
+
+static void startup(void)
+{
+ int ret = BT_ERROR_NONE;
+ int timeout_id = 0;
+
+ /* start of TC */
+ mainloop = g_main_loop_new(NULL, FALSE);
+
+ bt_initialize();
+ if (bt_adapter_set_state_changed_cb(adapter_state_changed_cb_for_opp_server_n, "startup") != BT_ERROR_NONE) {
+ tet_printf("DTS may fail because bt_adapter_set_state_changed_cb() failed");
+ }
+
+ tet_printf("bt_adapter_disable() was called.");
+ ret = bt_adapter_disable();
+ if (ret == BT_ERROR_NONE) {
+ tet_printf("bt_adapter_disable() succeeded.");
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ } else if (ret == BT_ERROR_NOT_ENABLED) {
+ tet_printf("Bluetooth adapter is not enabled.");
+ } else {
+ tet_printf("DTS may fail because bt_adapter_disable() failed");
+ }
+
+ if (bt_adapter_unset_state_changed_cb() != BT_ERROR_NONE) {
+ tet_printf("bt_adapter_set_state_changed_cb() failed.");
+ }
+
+ tet_printf("TC start");
+}
+
+
+static void cleanup(void)
+{
+ /* end of TC */
+ bt_deinitialize();
+ tet_printf("TC end.");
+}
+
+
+gboolean timeout_func(gpointer data)
+{
+ tet_printf("Callback: Timeout.");
+ g_main_loop_quit((GMainLoop *)data);
+ return FALSE;
+}
+
+void push_requested_cb_for_opp_server(const char *file, int size,
+ void *user_data)
+{
+
+}
+
+void transfer_progress_cb_for_opp_server(const char *file, long long size,
+ int percent, void *user_data)
+{
+
+}
+
+void transfer_finished_cb_for_opp_server(int result, const char *file,
+ long long size, void *user_data)
+{
+
+}
+
+/**
+ * @brief Callback funtions
+ */
+void adapter_state_changed_cb_for_opp_server_n(int result,
+ bt_adapter_state_e adapter_state, void *user_data)
+{
+ tet_printf("Callback: bt_adapter_state_changed_cb was called.");
+ if ((user_data != NULL) && !strcmp((char *)user_data, "startup")) {
+ if (adapter_state == BT_ADAPTER_DISABLED && result == BT_ERROR_NONE) {
+ tet_printf("Callback: BT was disabled. DTS will be started.");
+ } else {
+ tet_printf("Callback: BT was not disabled. DTS will be started but DTS may fail.");
+ }
+
+ if (mainloop) {
+ g_main_loop_quit(mainloop);
+ }
+ }
+}
+
+static void utc_network_bluetooth_opp_server_initialize_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_opp_server_initialize(NULL, NULL, NULL);
+ dts_check_eq("bt_opp_server_initialize", ret, BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned when destination parameter is NULL");
+}
+
+
+static void utc_network_bluetooth_opp_server_accept_n(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_opp_server_accept(transfer_progress_cb_for_opp_server,
+ transfer_finished_cb_for_opp_server, NULL, NULL, NULL);
+ dts_check_eq("bt_opp_server_accept", ret, BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_NOT_INITIALIZED must be returned.");
+
+}
+
+
+static void utc_network_bluetooth_opp_server_set_destination_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_opp_server_initialize(dest, push_requested_cb_for_opp_server_p,
+ NULL);
+
+ ret = bt_opp_server_set_destination(NULL);
+ dts_check_eq("bt_opp_server_set_destination", ret,
+ BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned destination parameter is NULL");
+}
+
+static void utc_network_bluetooth_opp_server_initialize_by_connection_request_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_opp_server_initialize_by_connection_request(NULL, NULL, NULL);
+ dts_check_eq("bt_opp_server_initialize_by_connection_request", ret,
+ BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned destination parameter is NULL");
+
+}
diff --git a/TC/testcase/utc_network_bluetooth_opp-server_positive.c b/TC/testcase/utc_network_bluetooth_opp-server_positive.c
new file mode 100755
index 0000000..39efb77
--- /dev/null
+++ b/TC/testcase/utc_network_bluetooth_opp-server_positive.c
@@ -0,0 +1,224 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <tet_api.h>
+#include <bluetooth.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <glib.h>
+
+enum {
+ POSITIVE_TC_IDX = 0x01,
+ NEGATIVE_TC_IDX,
+};
+
+static void startup(void);
+static void cleanup(void);
+
+static GMainLoop *mainloop;
+const char *dest = "/tmp";
+
+void (*tet_startup) (void) = startup;
+void (*tet_cleanup) (void) = cleanup;
+
+static void utc_network_bluetooth_opp_server_initialize_p(void);
+static void utc_network_bluetooth_opp_server_initialize_by_connection_request_p(void);
+static void utc_network_bluetooth_opp_server_deinitialize_p(void);
+static void utc_network_bluetooth_opp_server_accept_p(void);
+static void utc_network_bluetooth_opp_server_reject_p(void);
+static void utc_network_bluetooth_opp_server_set_destination_p(void);
+
+void push_requested_cb_for_opp_server_p(const char *file, int size, void *user_data);
+void connection_requested_cb_for_opp_server_p(const char *remote_address,
+ void *user_data);
+void adapter_state_changed_cb_for_opp_server_p(int result,
+ bt_adapter_state_e adapter_state, void *user_data);
+void transfer_finished_cb_for_opp_server_p(int result, const char *file,
+ long long size, void *user_data);
+void transfer_progress_cb_for_opp_server_p(int result, const char *file,
+ long long size, void *user_data);
+
+
+gboolean timeout_func(gpointer data);
+
+
+struct tet_testlist tet_testlist[] = {
+ {utc_network_bluetooth_opp_server_initialize_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_opp_server_initialize_by_connection_request_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_opp_server_set_destination_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_opp_server_accept_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_opp_server_reject_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_opp_server_deinitialize_p, POSITIVE_TC_IDX},
+ {NULL, 0},
+};
+
+static void startup(void)
+{
+ int ret = BT_ERROR_NONE;
+ int timeout_id = 0;
+
+ /* start of TC */
+ mainloop = g_main_loop_new(NULL, FALSE);
+
+ bt_initialize();
+ if (bt_adapter_set_state_changed_cb(adapter_state_changed_cb_for_opp_server_p, "startup") != BT_ERROR_NONE) {
+ tet_printf("DTS may fail because bt_adapter_set_state_changed_cb() failed");
+ }
+
+ tet_printf("bt_adapter_enable() was called.");
+ ret = bt_adapter_enable();
+ if (ret == BT_ERROR_NONE) {
+ tet_printf("bt_adapter_enable() succeeded.");
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ } else if (ret != BT_ERROR_ALREADY_DONE) {
+ tet_printf("DTS may fail because bt_adapter_disable() failed");
+ } else if (ret == BT_ERROR_NOT_ENABLED) {
+ tet_printf("Bluetooth adapter is not enabled.");
+ } else {
+ tet_printf("DTS may fail because bt_adapter_disable() failed");
+ }
+
+ if (bt_adapter_unset_state_changed_cb() != BT_ERROR_NONE) {
+ tet_printf("bt_adapter_set_state_changed_cb() failed.");
+ }
+
+ tet_printf("TC start");
+}
+
+
+static void cleanup(void)
+{
+ /* end of TC */
+ bt_deinitialize();
+ tet_printf("TC end.");
+}
+
+
+gboolean timeout_func(gpointer data)
+{
+ tet_printf("Callback: Timeout.");
+ g_main_loop_quit((GMainLoop *)data);
+ return FALSE;
+}
+
+
+void adapter_state_changed_cb_for_opp_server_p(int result,
+ bt_adapter_state_e adapter_state, void *user_data)
+{
+
+}
+
+
+void push_requested_cb_for_opp_server_p(const char *file, int size,
+ void *user_data)
+{
+
+}
+
+void connection_requested_cb_for_opp_server_p(const char *remote_address,
+ void *user_data)
+{
+
+}
+
+void transfer_progress_cb_for_opp_server_p(int result, const char *file,
+ long long size, void *user_data)
+{
+
+}
+
+void transfer_finished_cb_for_opp_server_p(int result, const char *file,
+ long long size, void *user_data)
+{
+
+}
+
+static void utc_network_bluetooth_opp_server_initialize_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_opp_server_initialize(dest, push_requested_cb_for_opp_server_p,
+ NULL);
+
+ if (ret != BT_ERROR_RESOURCE_BUSY) {
+ dts_check_eq("bt_opp_server_initialize", ret, BT_ERROR_NONE,
+ "bt_opp_server_initialize() failed");
+ } else {
+ dts_check_eq("bt_opp_server_initialize", ret, BT_ERROR_RESOURCE_BUSY,
+ "bt_opp_server_initialize() failed");
+ }
+
+
+}
+
+static void utc_network_bluetooth_opp_server_deinitialize_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_opp_server_deinitialize();
+ dts_check_eq("bt_opp_server_deinitialize", ret, BT_ERROR_NONE,
+ "bt_opp_server_deinitialize() failed.");
+}
+
+static void utc_network_bluetooth_opp_server_accept_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ int tid = 0;
+ const char *name = "abc";
+ ret = bt_opp_server_accept(transfer_progress_cb_for_opp_server_p,
+ transfer_finished_cb_for_opp_server_p, name, NULL, &tid);
+ dts_check_eq("bt_opp_server_accept", ret,
+ BT_ERROR_NONE, "bt_opp_server_accept() failed.");
+
+}
+
+static void utc_network_bluetooth_opp_server_reject_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_opp_server_reject();
+ dts_check_eq("bt_opp_server_reject", ret,
+ BT_ERROR_NONE, "bt_opp_server_reject() failed.");
+}
+
+static void utc_network_bluetooth_opp_server_set_destination_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_opp_server_set_destination(dest);
+ dts_check_eq("bt_opp_server_set_destination", ret,
+ BT_ERROR_NONE, "bt_opp_server_destination() failed");
+}
+
+static void utc_network_bluetooth_opp_server_initialize_by_connection_request_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_opp_server_initialize_by_connection_request(dest,
+ connection_requested_cb_for_opp_server_p, NULL);
+ dts_check_eq("bt_opp_server_initialize_by_connection_request", ret,
+ BT_ERROR_NONE,
+ "bt_opp_server_initialize_by_connection_request() failed");
+
+}
+
+
+
+
+
+
diff --git a/TC/testcase/utc_network_bluetooth_pan_negative.c b/TC/testcase/utc_network_bluetooth_pan_negative.c
new file mode 100644
index 0000000..ec9db0c
--- /dev/null
+++ b/TC/testcase/utc_network_bluetooth_pan_negative.c
@@ -0,0 +1,166 @@
+/*
+ * utc_network_bluetooth_pan_negative.c
+ *
+ * Created on: 20-Sep-2013
+ * Author: mrinal.m
+ */
+
+#include "bluetooth.h"
+#include <tet_api.h>
+#include <glib.h>
+
+enum {
+ POSITIVE_TC_IDX = 0x01,
+ NEGATIVE_TC_IDX,
+};
+
+static void startup(void);
+static void cleanup(void);
+
+static GMainLoop *mainloop;
+
+void (*tet_startup) (void) = startup;
+void (*tet_cleanup) (void) = cleanup;
+
+static void utc_network_bluetooth_nap_set_connection_state_changed_n(void);
+static void utc_network_bluetooth_panu_set_connection_state_changed_n(void);
+static void utc_network_bluetooth_panu_connect_n(void);
+static void utc_network_bluetooth_nap_disconnect_n(void);
+static void utc_network_bluetooth_panu_disconnect_n(void);
+
+void adapter_state_changed_cb_for_pan_n(int result,
+ bt_adapter_state_e adapter_state, void *user_data);
+gboolean timeout_func(gpointer data);
+
+
+struct tet_testlist tet_testlist[] = {
+ {utc_network_bluetooth_nap_set_connection_state_changed_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_panu_set_connection_state_changed_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_panu_connect_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_nap_disconnect_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_panu_disconnect_n, NEGATIVE_TC_IDX},
+ {NULL, 0},
+};
+
+static void startup(void)
+{
+ int ret = BT_ERROR_NONE;
+ int timeout_id = 0;
+
+ /* start of TC */
+ mainloop = g_main_loop_new(NULL, FALSE);
+
+ bt_initialize();
+ if (bt_adapter_set_state_changed_cb(adapter_state_changed_cb_for_pan_n, "startup") != BT_ERROR_NONE) {
+ tet_printf("DTS may fail because bt_adapter_set_state_changed_cb() failed");
+ }
+
+ tet_printf("bt_adapter_disable() was called.");
+ ret = bt_adapter_disable();
+ if (ret == BT_ERROR_NONE) {
+ tet_printf("bt_adapter_disable() succeeded.");
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ } else if (ret == BT_ERROR_NOT_ENABLED) {
+ tet_printf("Bluetooth adapter is not enabled.");
+ } else {
+ tet_printf("DTS may fail because bt_adapter_disable() failed");
+ }
+
+ if (bt_adapter_unset_state_changed_cb() != BT_ERROR_NONE) {
+ tet_printf("bt_adapter_set_state_changed_cb() failed.");
+ }
+
+ tet_printf("TC start");
+}
+
+
+static void cleanup(void)
+{
+ /* end of TC */
+ bt_deinitialize();
+ tet_printf("TC end.");
+}
+
+
+gboolean timeout_func(gpointer data)
+{
+ tet_printf("Callback: Timeout.");
+ g_main_loop_quit((GMainLoop *)data);
+ return FALSE;
+}
+
+
+
+
+/**
+ * @brief Negative test case of bt_nap_set_connection_state_changed_cb()
+ */
+
+void adapter_state_changed_cb_for_pan_n(int result,
+ bt_adapter_state_e adapter_state,
+ void *user_data)
+{
+
+}
+
+static void utc_network_bluetooth_nap_set_connection_state_changed_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_nap_set_connection_state_changed_cb(NULL, NULL);
+ dts_check_eq("bt_nap_set_connection_state_changed_cb", ret,
+ BT_ERROR_INVALID_PARAMETER,
+ "bt_nap_set_connection_state_changed_cb() failed.");
+
+}
+
+/**
+ * @brief Negative test case of bt_panu_set_connection_state_changed_cb()
+ */
+static void utc_network_bluetooth_panu_set_connection_state_changed_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_panu_set_connection_state_changed_cb(NULL, NULL);
+ dts_check_eq("bt_panu_set_connection_state_changed_cb", ret,
+ BT_ERROR_INVALID_PARAMETER,
+ "bt_panu_set_connection_state_changed_cb() failed.");
+
+}
+
+/**
+ * @brief Negative test case of bt_panu_connect()
+ */
+static void utc_network_bluetooth_panu_connect_n(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_panu_connect(NULL, BT_PANU_SERVICE_TYPE_NAP);
+ dts_check_eq("bt_panu_connect", ret, BT_ERROR_INVALID_PARAMETER,
+ "bt_panu_connect() failed.");
+
+}
+
+/**
+ * @brief Negative test case of bt_nap_disconnect()
+ */
+static void utc_network_bluetooth_nap_disconnect_n(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_nap_disconnect(NULL);
+ dts_check_eq("bt_nap_disconnect", ret, BT_ERROR_INVALID_PARAMETER,
+ "bt_nap_disconnect() failed.");
+
+}
+/**
+ * @brief Negative test case of bt_panu_disconnect()
+ */
+static void utc_network_bluetooth_panu_disconnect_n(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_panu_disconnect(NULL);
+ dts_check_eq("bt_panu_disconnect", ret, BT_ERROR_INVALID_PARAMETER,
+ "bt_panu_disconnect() failed.");
+
+}
diff --git a/TC/testcase/utc_network_bluetooth_pan_positive.c b/TC/testcase/utc_network_bluetooth_pan_positive.c
new file mode 100755
index 0000000..4526508
--- /dev/null
+++ b/TC/testcase/utc_network_bluetooth_pan_positive.c
@@ -0,0 +1,265 @@
+/*
+ * utc_network_bluetooth_pan_positive.c
+ *
+ * Created on: 20-Sep-2013
+ * Author: mrinal.m
+ */
+
+#include <bluetooth.h>
+#include <tet_api.h>
+#include <glib.h>
+
+enum {
+ POSITIVE_TC_IDX = 0x01,
+ NEGATIVE_TC_IDX,
+};
+
+static void startup(void);
+static void cleanup(void);
+
+static GMainLoop *mainloop;
+
+void (*tet_startup) (void) = startup;
+void (*tet_cleanup) (void) = cleanup;
+
+static void utc_network_bluetooth_nap_activate_p(void);
+static void utc_network_bluetooth_nap_deactivate_p(void);
+static void utc_network_bluetooth_nap_disconnect_all_p(void);
+static void utc_network_bluetooth_nap_set_connection_state_changed_p(void);
+static void utc_network_bluetooth_nap_unset_connection_state_changed_p(void);
+static void utc_network_bluetooth_panu_set_connection_state_changed_p(void);
+static void utc_network_bluetooth_panu_unset_connection_state_changed_p(void);
+static void utc_network_bluetooth_panu_connect_p(void);
+static void utc_network_bluetooth_nap_disconnect_p(void);
+static void utc_network_bluetooth_panu_disconnect_p(void);
+
+void connection_state_changed_cb_for_nap_p(bool connected,
+ const char *remote_address,
+ const char *interface_name,
+ void *user_data);
+void connection_state_changed_cb_for_panu_p(int result,
+ bool connected,
+ const char *remote_address,
+ bt_panu_service_type_e type,
+ void *user_data);
+
+void adapter_state_changed_cb_for_pan_p(int result,
+ bt_adapter_state_e adapter_state,
+ void *user_data);
+gboolean timeout_func(gpointer data);
+
+struct tet_testlist tet_testlist[] = {
+ {utc_network_bluetooth_nap_activate_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_nap_set_connection_state_changed_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_nap_unset_connection_state_changed_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_nap_deactivate_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_nap_disconnect_all_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_panu_connect_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_panu_set_connection_state_changed_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_panu_unset_connection_state_changed_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_nap_disconnect_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_panu_disconnect_p, POSITIVE_TC_IDX},
+ {NULL, 0},
+};
+
+
+static void startup(void)
+{
+ int ret = BT_ERROR_NONE;
+ int timeout_id = 0;
+
+ /* start of TC */
+ mainloop = g_main_loop_new(NULL, FALSE);
+
+ bt_initialize();
+ if (bt_adapter_set_state_changed_cb(adapter_state_changed_cb_for_pan_p, "startup") != BT_ERROR_NONE) {
+ tet_printf("DTS may fail because bt_adapter_set_state_changed_cb() failed");
+ }
+
+ tet_printf("bt_adapter_enable() was called.");
+
+ ret = bt_adapter_enable();
+ if (ret == BT_ERROR_NONE) {
+ tet_printf("bt_adapter_enable() succeeded.");
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ } else if (ret != BT_ERROR_ALREADY_DONE) {
+ tet_printf("DTS may fail because bt_adapter_disable() failed");
+ }
+
+ if (bt_adapter_unset_state_changed_cb() != BT_ERROR_NONE) {
+ tet_printf("bt_adapter_set_state_changed_cb() failed.");
+ }
+
+ tet_printf("TC start");
+}
+
+static void cleanup(void)
+{
+ /* end of TC */
+ bt_deinitialize();
+ tet_printf("TC end.");
+}
+
+gboolean timeout_func(gpointer data)
+{
+ tet_printf("Callback: Timeout.");
+ g_main_loop_quit((GMainLoop *) data);
+ return FALSE;
+}
+
+/**
+ * @brief Callback funtions
+*/
+
+void adapter_state_changed_cb_for_pan_p(int result,
+ bt_adapter_state_e adapter_state,
+ void *user_data)
+{
+
+}
+
+void connection_state_changed_cb_for_nap_p(bool connected,
+ const char *remote_address,
+ const char *interface_name,
+ void *user_data)
+{
+
+}
+
+void connection_state_changed_cb_for_panu_p(int result,
+ bool connected,
+ const char *remote_address,
+ bt_panu_service_type_e type,
+ void *user_data)
+{
+
+}
+
+/**
+ * @brief Positive test case of bt_nap_activate()
+*/
+static void utc_network_bluetooth_nap_activate_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_nap_activate();
+ if (ret != BT_ERROR_ALREADY_DONE) {
+ dts_check_eq("bt_nap_activate", ret, BT_ERROR_NONE, "bt_nap_activate() failed.");
+ } else {
+ dts_check_eq("bt_nap_activate", ret, BT_ERROR_ALREADY_DONE,
+ "bt_nap_activate() failed.");
+ }
+}
+
+/**
+ * @brief Positive test case of bt_nap_deactivate()
+*/
+static void utc_network_bluetooth_nap_deactivate_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_nap_deactivate();
+ dts_check_eq("bt_nap_deactivate", ret, BT_ERROR_NONE,
+ "bt_nap_deactivate() failed.");
+
+}
+
+/**
+ * @brief Positive test case of bt_nap_disconnect_all()
+ */
+static void utc_network_bluetooth_nap_disconnect_all_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_nap_disconnect_all();
+ dts_check_eq("bt_nap_disconnect_all", ret, BT_ERROR_NONE,
+ "bt_nap_disconnect_all() failed.");
+}
+
+/**
+ * @brief Positive test case of bt_nap_set_connection_state_changed_cb()
+ */
+static void utc_network_bluetooth_nap_set_connection_state_changed_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_nap_set_connection_state_changed_cb(connection_state_changed_cb_for_nap_p, NULL);
+ dts_check_eq("bt_nap_set_connection_state_changed_cb", ret, BT_ERROR_NONE,
+ "bt_nap_set_connection_state_changed_cb() failed.");
+}
+
+
+/**
+ * @brief Positive test case of bt_nap_unset_connection_state_changed_cb()
+*/
+static void utc_network_bluetooth_nap_unset_connection_state_changed_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_nap_unset_connection_state_changed_cb();
+ dts_check_eq("bt_nap_unset_connection_state_changed_cb", ret, BT_ERROR_NONE,
+ "bt_nap_unset_connection_state_changed_cb() failed.");
+}
+
+
+/**
+ * @brief Positive test case of bt_panu_set_connection_state_changed_cb()
+*/
+static void utc_network_bluetooth_panu_set_connection_state_changed_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_panu_set_connection_state_changed_cb(connection_state_changed_cb_for_panu_p, NULL);
+ dts_check_eq("bt_panu_set_connection_state_changed_cb", ret, BT_ERROR_NONE,
+ "bt_panu_set_connection_state_changed_cb() failed.");
+
+}
+
+
+/**
+ * @brief Positive test case of bt_panu_unset_connection_state_changed_cb()
+*/
+static void utc_network_bluetooth_panu_unset_connection_state_changed_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ ret = bt_panu_unset_connection_state_changed_cb();
+ dts_check_eq("bt_panu_unset_connection_state_changed_cb", ret, BT_ERROR_NONE,
+ "bt_panu_unset_connection_state_changed_cb() failed.");
+
+}
+
+/**
+ * @brief Positive test case of bt_panu_connect()
+*/
+static void utc_network_bluetooth_panu_connect_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ const char *remote_address = "00:00:00:00:00:00";
+ ret = bt_panu_connect(remote_address, BT_PANU_SERVICE_TYPE_NAP);
+ dts_check_eq("bt_panu_connect", ret, BT_ERROR_NONE,
+ "bt_panu_connect() failed.");
+
+}
+
+/**
+ * @brief Positive test case of bt_nap_disconnect()
+*/
+static void utc_network_bluetooth_nap_disconnect_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ const char *remote_address = "00:00:00:00:00:00";
+ ret = bt_nap_disconnect(remote_address);
+ dts_check_eq("bt_nap_disconnect", ret, BT_ERROR_NONE,
+ "bt_nap_disconnect() failed.");
+
+}
+
+/**
+ * @brief Positive test case of bt_panu_disconnect()
+*/
+static void utc_network_bluetooth_panu_disconnect_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ const char *remote_address = "00:00:00:00:00:00";
+ ret = bt_panu_disconnect(remote_address);
+ dts_check_eq("bt_panu_disconnect", ret, BT_ERROR_NONE,
+ "bt_panu_disconnect() failed.");
+
+}
diff --git a/TC/testcase/utc_network_bluetooth_service_search_negative.c b/TC/testcase/utc_network_bluetooth_service_search_negative.c
new file mode 100644
index 0000000..ce4dd7d
--- /dev/null
+++ b/TC/testcase/utc_network_bluetooth_service_search_negative.c
@@ -0,0 +1,179 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <tet_api.h>
+#include <bluetooth.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <glib.h>
+
+enum {
+ POSITIVE_TC_IDX = 0x01,
+ NEGATIVE_TC_IDX,
+};
+
+static void startup(void);
+static void cleanup(void);
+
+static GMainLoop *mainloop;
+
+void (*tet_startup) (void) = startup;
+void (*tet_cleanup) (void) = cleanup;
+
+static void utc_network_bluetooth_service_search_set_cb_n(void);
+static void utc_network_bluetooth_service_search_unset_cb_n(void);
+static void utc_network_bluetooth_service_search_n(void);
+static void utc_network_bluetooth_service_search_cancel_n(void);
+
+void adapter_state_changed_cb_for_service_search_n(int result,
+ bt_adapter_state_e adapter_state,
+ void *user_data);
+gboolean timeout_func(gpointer data);
+
+struct tet_testlist tet_testlist[] = {
+ {utc_network_bluetooth_service_search_set_cb_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_service_search_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_service_search_cancel_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_service_search_unset_cb_n, NEGATIVE_TC_IDX},
+ {NULL, 0},
+};
+
+static void startup(void)
+{
+ int ret = BT_ERROR_NONE;
+ int timeout_id = 0;
+
+ /* start of TC */
+ mainloop = g_main_loop_new(NULL, FALSE);
+
+ bt_initialize();
+ if (bt_adapter_set_state_changed_cb(adapter_state_changed_cb_for_service_search_n, "startup") != BT_ERROR_NONE) {
+ tet_printf("DTS may fail because bt_adapter_set_state_changed_cb() failed");
+ }
+
+ tet_printf("bt_adapter_disable() was called.");
+ ret = bt_adapter_disable();
+ if (ret == BT_ERROR_NONE) {
+ tet_printf("bt_adapter_disable() succeeded.");
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ } else if (ret == BT_ERROR_NOT_ENABLED) {
+ tet_printf("Bluetooth adapter is not enabled.");
+ } else {
+ tet_printf("DTS may fail because bt_adapter_disable() failed");
+ }
+
+ if (bt_adapter_unset_state_changed_cb() != BT_ERROR_NONE) {
+ tet_printf("bt_adapter_set_state_changed_cb() failed.");
+ }
+
+ tet_printf("TC start");
+}
+
+
+static void cleanup(void)
+{
+ /* end of TC */
+ bt_deinitialize();
+ tet_printf("TC end.");
+}
+
+
+gboolean timeout_func(gpointer data)
+{
+ tet_printf("Callback: Timeout.");
+ g_main_loop_quit((GMainLoop *) data);
+ return FALSE;
+}
+
+
+/**
+ * @brief Callback funtions
+ */
+void adapter_state_changed_cb_for_service_search_n(int result,
+ bt_adapter_state_e adapter_state,
+ void *user_data)
+{
+ tet_printf("Callback: bt_adapter_state_changed_cb was called.");
+ if (user_data != NULL && !strcmp((char *)user_data, "startup")) {
+ if (adapter_state == BT_ADAPTER_DISABLED && result == BT_ERROR_NONE) {
+ tet_printf("Callback: BT was disabled. DTS will be started.");
+ } else {
+ tet_printf("Callback: BT was not disabled. DTS will be started but DTS may fail.");
+ }
+
+ if (mainloop) {
+ g_main_loop_quit(mainloop);
+ }
+ }
+}
+
+/**
+ * @brief Negative test case of bt_device_set_service_searched_cb()
+ */
+static void utc_network_bluetooth_service_search_set_cb_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_device_set_service_searched_cb(NULL, NULL);
+ dts_check_eq("bt_device_set_service_searched_cb", ret,
+ BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned when callback parameter is NULL");
+}
+
+/**
+ * @brief Negative test case of bt_device_unset_service_searched_cb()
+ */
+static void utc_network_bluetooth_service_search_unset_cb_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ if (bt_deinitialize() != BT_ERROR_NONE) {
+ dts_fail("bt_device_unset_service_searched_cb",
+ "bt_deinitialize() failed.");
+ }
+
+ ret = bt_device_unset_service_searched_cb();
+ dts_check_eq("bt_device_unset_service_searched_cb", ret,
+ BT_ERROR_NOT_INITIALIZED,
+ "BT_ERROR_NOT_INITIALIZED must be returned when BT service is not initialized.");
+}
+
+/**
+ * @brief Negative test case of bt_device_start_service_search()
+ */
+static void utc_network_bluetooth_service_search_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_device_start_service_search(NULL);
+ dts_check_eq("bt_device_start_service_search", ret,
+ BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned when parameter is NULL");
+}
+
+/**
+ * @brief Negative test case of bt_device_cancel_service_search()
+ */
+static void utc_network_bluetooth_service_search_cancel_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_device_cancel_service_search();
+ dts_check_eq("bt_device_cancel_service_search", ret, BT_ERROR_NOT_ENABLED,
+ "BT_ERROR_NOT_ENABLED must be returned when BT is not enabled");
+}
diff --git a/TC/testcase/utc_network_bluetooth_service_search_positive.c b/TC/testcase/utc_network_bluetooth_service_search_positive.c
new file mode 100755
index 0000000..e6219b6
--- /dev/null
+++ b/TC/testcase/utc_network_bluetooth_service_search_positive.c
@@ -0,0 +1,407 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <tet_api.h>
+#include <bluetooth.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <glib.h>
+
+#define CONFIG_FILE_PATH "/opt/home/capi-network-bluetooth/tetware.conf"
+enum {
+ POSITIVE_TC_IDX = 0x01,
+ NEGATIVE_TC_IDX,
+};
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup) (void) = startup;
+void (*tet_cleanup) (void) = cleanup;
+
+char target_name[128] = "dts_test";
+char *target_address;
+bool callback_result = false;
+bool discovery_result = false;
+bool bonding_result = false;
+static GMainLoop *mainloop;
+
+static void utc_network_bluetooth_service_search_set_cb_p(void);
+static void utc_network_bluetooth_service_search_p(void);
+static void utc_network_bluetooth_service_search_cancel_p(void);
+static void utc_network_bluetooth_service_search_unset_cb_p(void);
+
+gboolean timeout_func(gpointer data);
+void adapter_state_changed_cb_for_service_search_p(int result,
+ bt_adapter_state_e adapter_state, void *user_data);
+void device_discovery_state_changed_cb_for_service_search_p(int result,
+ bt_adapter_device_discovery_state_e discovery_state,
+ bt_adapter_device_discovery_info_s *discovery_info, void *user_data);
+void service_searched_cb_for_service_search_p(int result,
+ bt_device_sdp_info_s *sdp_info, void *user_data);
+void device_bonded_cb_for_service_search_p(int result,
+ bt_device_info_s *device_info, void *user_data);
+void device_unbonded_cb(int result, char *remote_address, void *user_data);
+
+struct tet_testlist tet_testlist[] = {
+ {utc_network_bluetooth_service_search_set_cb_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_service_search_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_service_search_cancel_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_service_search_unset_cb_p, POSITIVE_TC_IDX},
+ {NULL, 0},
+};
+
+int get_value_from_file(void)
+{
+ FILE *fp;
+ char *token;
+ char buf[100];
+
+ fp = fopen(CONFIG_FILE_PATH, "r");
+ if (fp == NULL) {
+ tet_printf("Default configuration is used\n");
+ return -1;
+ }
+ while (fgets(buf, sizeof(buf), fp)) {
+ if (buf[0] == '#' || buf[0] == '\n')
+ continue;
+
+ token = strrchr(buf, '\n');
+ if (token == NULL) {
+ tet_printf("g_conf is too long\n");
+ break;
+ }
+ *token = '\0';
+
+ token = strtok(buf, "=");
+ if (token == NULL) {
+ continue;
+ }
+ if (strcasecmp(token, "BT_ADDR_MOBILE") == 0) {
+ token = strtok(NULL, "=");
+ target_address = strdup(token);
+ fclose(fp);
+ return 0;
+ }
+ }
+ fclose(fp);
+ return -1;
+}
+
+static void startup(void)
+{
+ bt_error_e ret = BT_ERROR_NONE;
+ int timeout_id = 0;
+
+ if(get_value_from_file() == -1) {
+ tet_printf("Failed to read.");
+ }
+
+ /* start of TC */
+ callback_result = false;
+ discovery_result = false;
+ mainloop = g_main_loop_new(NULL, FALSE);
+
+ bt_initialize();
+
+ if (bt_adapter_set_state_changed_cb(adapter_state_changed_cb_for_service_search_p, "startup") != BT_ERROR_NONE) {
+ tet_printf("bt_adapter_set_state_changed_cb() failed.");
+ }
+
+ if (bt_adapter_set_device_discovery_state_changed_cb
+ (device_discovery_state_changed_cb_for_service_search_p, "startup") != BT_ERROR_NONE) {
+ tet_printf("bt_adapter_set_device_discovery_state_changed_cb() failed.");
+ }
+
+ ret = bt_adapter_enable();
+ if (ret == BT_ERROR_NONE) {
+ tet_printf("bt_adapter_enable() succeeded.");
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+
+ tet_printf("BT was enabled. Device discovery will be started");
+ if (bt_adapter_start_device_discovery() == BT_ERROR_NONE) {
+ tet_printf("bt_adapter_start_device_discovery() succeeded.");
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ } else {
+ tet_printf("bt_adapter_start_device_discovery() failed.");
+ }
+ } else if (ret == BT_ERROR_ALREADY_DONE) {
+ tet_printf("BT was already enabled. Device discovery will be started");
+ if (bt_adapter_start_device_discovery() == BT_ERROR_NONE) {
+ tet_printf("bt_adapter_start_device_discovery() succeeded.");
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ } else {
+ tet_printf("bt_adapter_start_device_discovery() failed.");
+ }
+ } else {
+ tet_printf("DTS may fail because bt_adapter_enable() failed.");
+ }
+
+ if (bt_adapter_unset_state_changed_cb() != BT_ERROR_NONE) {
+ tet_printf("bt_adapter_unset_state_changed_cb() failed.");
+ }
+
+ if (bt_adapter_unset_device_discovery_state_changed_cb() != BT_ERROR_NONE) {
+ tet_printf("bt_adapter_unset_device_discovery_state_changed_cb() failed.");
+ }
+
+ tet_printf("TC start.");
+}
+
+
+static void cleanup(void)
+{
+ /* end of TC */
+ int timeout_id = 0;
+
+ /* Destroy a bond */
+ bt_device_set_bond_destroyed_cb(device_unbonded_cb, NULL);
+ if (bt_device_destroy_bond(target_address) == BT_ERROR_NONE) {
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ }
+
+ bt_deinitialize();
+ tet_printf("TC end.");
+}
+
+
+gboolean timeout_func(gpointer data)
+{
+ tet_printf("[%s] Callback: Timeout.", __FUNCTION__);
+ g_main_loop_quit((GMainLoop *) data);
+ return FALSE;
+}
+
+
+/**
+ * @brief Callback funtions
+ */
+void device_unbonded_cb(int result, char *remote_address, void *user_data)
+{
+ tet_printf("Callback: bt_device_bond_destroyed_cb() was called.");
+
+ if (mainloop) {
+ g_main_loop_quit(mainloop);
+ }
+
+}
+
+void adapter_state_changed_cb_for_service_search_p(int result,
+ bt_adapter_state_e adapter_state, void *user_data)
+{
+ tet_printf("Callback: bt_adapter_state_changed_cb() was called");
+ if (user_data != NULL && !strcmp((char *)user_data, "startup")) {
+ if (adapter_state == BT_ADAPTER_ENABLED && result == BT_ERROR_NONE) {
+ tet_printf("Callback: BT was enabled.");
+ } else {
+ tet_printf("Callback: BT was not enabled. DTS will be started but DTS may fail.");
+ }
+
+ if (mainloop) {
+ g_main_loop_quit(mainloop);
+ }
+ }
+}
+
+void device_discovery_state_changed_cb_for_service_search_p(int result,
+ bt_adapter_device_discovery_state_e discovery_state,
+ bt_adapter_device_discovery_info_s *discovery_info, void *user_data)
+{
+ tet_printf("Callback: bt_adapter_device_discovery_state_changed_cb() was called");
+ if (user_data != NULL && !strcmp((char *)user_data, "startup")) {
+ if (discovery_state == BT_ADAPTER_DEVICE_DISCOVERY_FINISHED) {
+ tet_printf("Callback: Device discovery finished. DTS will be started.");
+ if (mainloop) {
+ g_main_loop_quit(mainloop);
+ }
+ } else if (discovery_state == BT_ADAPTER_DEVICE_DISCOVERY_FOUND) {
+ tet_printf("Callback: Devices were founded (%s)",
+ discovery_info->remote_name);
+ if (discovery_info->remote_name != NULL && !strcmp(discovery_info->remote_name, target_name)) {
+ discovery_result = true;
+ tet_printf("Callback: dts_test device was found.");
+ strncpy(target_address, discovery_info->remote_address, 18);
+ tet_printf("Callback: device address: %s", discovery_info->remote_address);
+ if (bt_adapter_stop_device_discovery() == BT_ERROR_NONE) {
+ tet_printf("Callback: Device discovery will be stopped");
+ }
+ }
+ }
+ }
+}
+
+void service_searched_cb_for_service_search_p(int result,
+ bt_device_sdp_info_s *sdp_info,
+ void *user_data)
+{
+ int i = 0;
+
+ tet_printf("Callback: bt_device_service_searched_cb() was called.");
+ if (result == BT_ERROR_NONE) {
+ if (sdp_info != NULL && !strcmp(sdp_info->remote_address, target_address)) {
+ tet_printf("Callback: Service search succeeded.");
+ tet_printf("Callback: Service count : %d", sdp_info->service_count);
+ for (i = 0; i < sdp_info->service_count; i++) {
+ tet_printf("Callback: uuid[%d] - %s", i + 1, sdp_info->service_uuid[i]);
+ }
+
+ callback_result = true;
+ }
+ } else if (result == BT_ERROR_CANCELLED) {
+ if (sdp_info != NULL && !strcmp(sdp_info->remote_address, target_address)) {
+ tet_printf("Callback: Calcellation of service search succeeded.");
+ callback_result = true;
+ }
+ } else {
+ tet_printf("Callback: Failed.");
+ }
+
+ if (mainloop) {
+ g_main_loop_quit(mainloop);
+ }
+}
+
+void device_bonded_cb_for_service_search_p(int result,
+ bt_device_info_s *device_info, void *user_data)
+{
+ if (user_data != NULL && !strcmp((char *)user_data, "startup")) {
+ if (device_info->remote_address != NULL && !strcmp(device_info->remote_address, target_address)) {
+ if (result == BT_ERROR_NONE) {
+ tet_printf("Callback: Bonding succeeded");
+ bonding_result = true;
+ } else {
+ tet_printf("Callback: Bonding failed");
+ }
+ }
+ }
+
+ if (mainloop) {
+ g_main_loop_quit(mainloop);
+ }
+}
+
+/**
+ * @brief Positive test case of bt_device_set_service_searched_cb()
+ */
+static void utc_network_bluetooth_service_search_set_cb_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ int timeout_id = 0;
+
+ ret = bt_device_set_service_searched_cb(service_searched_cb_for_service_search_p, NULL);
+ if (ret == BT_ERROR_NONE) {
+ if (bt_device_set_bond_created_cb(device_bonded_cb_for_service_search_p, "startup") != BT_ERROR_NONE) {
+ tet_printf("bt_device_set_bond_created_cb() failed.");
+ }
+
+ if (discovery_result == true && bt_device_create_bond(target_address) == BT_ERROR_NONE) {
+ tet_printf("bt_device_create_bond() succeeded.");
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ } else {
+ tet_printf("bt_device_create_bond() failed.");
+ }
+ }
+
+ dts_check_eq("bt_device_set_service_searched_cb", ret, BT_ERROR_NONE,
+ "bt_device_set_service_searched_cb() failed.");
+}
+
+/**
+ * @brief Positive test case of bt_device_start_service_search()
+ */
+static void utc_network_bluetooth_service_search_p(void)
+{
+ int timeout_id = 0;
+ int ret = BT_ERROR_NONE;
+
+ if (discovery_result != true) {
+ tet_printf("bt_device_start_service_search failed.");
+ }
+
+ callback_result = false;
+ ret = bt_device_start_service_search(target_address);
+ if (ret == BT_ERROR_NONE) {
+ tet_printf("bt_device_start_service_search() succeeded.");
+ tet_printf("service_searched_cb_for_service_search_p() will be called.");
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ dts_check_eq("bt_device_start_service_search", ret, BT_ERROR_NONE,
+ "bt_device_start_service_search() failed.");
+ } else {
+ dts_fail("bt_device_start_service_search",
+ "bt_device_start_service_search() failed.");
+ }
+}
+
+/**
+ * @brief Positive test case of bt_device_cancel_service_search()
+ */
+static void utc_network_bluetooth_service_search_cancel_p(void)
+{
+ int timeout_id = 0;
+ int ret = BT_ERROR_NONE;
+
+ if (discovery_result != true) {
+ tet_printf("t_device_cancel_service_search failed.");
+ }
+
+ callback_result = false;
+ if (bt_device_start_service_search(target_address) != BT_ERROR_NONE) {
+ tet_printf("t_device_start_service_search failed.");
+
+ } else {
+ tet_printf("bt_device_cancel_service_search",
+ "bt_device_start_service_search() succeeded.");
+ }
+
+ ret = bt_device_cancel_service_search();
+ if (ret == BT_ERROR_NONE) {
+ tet_printf("bt_device_cancel_service_search() succeeded.");
+ tet_printf("service_searched_cb_for_service_search_p() will be called.");
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ dts_check_eq("bt_device_cancel_service_search", ret, BT_ERROR_NONE,
+ "bt_device_cancel_service_search() failed.");
+
+ } else {
+ dts_fail("bt_device_cancel_service_search",
+ "bt_device_cancel_service_search() failed.");
+ }
+}
+
+/**
+ * @brief Positive test case of bt_device_unset_service_searched_cb()
+ */
+static void utc_network_bluetooth_service_search_unset_cb_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_device_unset_service_searched_cb();
+ dts_check_eq("bt_device_unset_service_searched_cb", ret, BT_ERROR_NONE,
+ "bt_device_set_service_searched_cb() failed.");
+}
diff --git a/TC/testcase/utc_network_bluetooth_socket_negative.c b/TC/testcase/utc_network_bluetooth_socket_negative.c
new file mode 100644
index 0000000..dea118f
--- /dev/null
+++ b/TC/testcase/utc_network_bluetooth_socket_negative.c
@@ -0,0 +1,268 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <tet_api.h>
+#include <bluetooth.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <glib.h>
+
+enum {
+ POSITIVE_TC_IDX = 0x01,
+ NEGATIVE_TC_IDX,
+};
+
+static void startup(void);
+static void cleanup(void);
+
+static GMainLoop *mainloop;
+
+void (*tet_startup) (void) = startup;
+void (*tet_cleanup) (void) = cleanup;
+
+static void utc_network_bluetooth_socket_set_data_received_cb_n(void);
+static void utc_network_bluetooth_socket_set_connection_state_changed_cb_n(void);
+static void utc_network_bluetooth_socket_unset_data_received_cb_n(void);
+static void utc_network_bluetooth_socket_unset_connection_state_changed_cb_n(void);
+static void utc_network_bluetooth_socket_create_rfcomm_n(void);
+static void utc_network_bluetooth_socket_destroy_rfcomm_n(void);
+static void utc_network_bluetooth_socket_listen_and_accept_rfcomm_n(void);
+static void utc_network_bluetooth_socket_connect_rfcomm_n(void);
+static void utc_network_bluetooth_socket_disconnect_rfcomm_n(void);
+static void utc_network_bluetooth_socket_send_data_n(void);
+
+void adapter_state_changed_cb_for_device_negative(int result,
+ bt_adapter_state_e adapter_state, void *user_data);
+gboolean timeout_func(gpointer data);
+
+struct tet_testlist tet_testlist[] = {
+ {utc_network_bluetooth_socket_create_rfcomm_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_socket_set_connection_state_changed_cb_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_socket_listen_and_accept_rfcomm_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_socket_set_data_received_cb_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_socket_connect_rfcomm_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_socket_send_data_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_socket_disconnect_rfcomm_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_socket_destroy_rfcomm_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_socket_unset_data_received_cb_n, NEGATIVE_TC_IDX},
+ {utc_network_bluetooth_socket_unset_connection_state_changed_cb_n, NEGATIVE_TC_IDX},
+ {NULL, 0},
+};
+
+static void startup(void)
+{
+ int ret = BT_ERROR_NONE;
+ int timeout_id = 0;
+
+ /* start of TC */
+ mainloop = g_main_loop_new(NULL, FALSE);
+
+ bt_initialize();
+ if (bt_adapter_set_state_changed_cb(adapter_state_changed_cb_for_device_negative, "startup") != BT_ERROR_NONE) {
+ tet_printf("DTS may fail because bt_adapter_set_state_changed_cb() failed");
+ }
+
+ tet_printf("bt_adapter_disable() was called.");
+ ret = bt_adapter_disable();
+ if (ret == BT_ERROR_NONE) {
+ tet_printf("bt_adapter_disable() succeeded.");
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ } else if (ret == BT_ERROR_NOT_ENABLED) {
+ tet_printf("Bluetooth adapter is not enabled.");
+ } else {
+ tet_printf("DTS may fail because bt_adapter_disable() failed");
+ }
+
+ if (bt_adapter_unset_state_changed_cb() != BT_ERROR_NONE) {
+ tet_printf("bt_adapter_set_state_changed_cb() failed.");
+ }
+
+ tet_printf("TC start");
+}
+
+static void cleanup(void)
+{
+ /* end of TC */
+ bt_deinitialize();
+ tet_printf("TC end.");
+}
+
+gboolean timeout_func(gpointer data)
+{
+ tet_printf("Callback: Timeout.");
+ g_main_loop_quit((GMainLoop *) data);
+ return FALSE;
+}
+
+/**
+ * @brief Callback funtions
+ */
+void adapter_state_changed_cb_for_device_negative(int result,
+ bt_adapter_state_e adapter_state,
+ void *user_data)
+{
+ tet_printf("Callback: bt_adapter_state_changed_cb was called.");
+ if (user_data != NULL && !strcmp((char *)user_data, "startup")) {
+ if (adapter_state == BT_ADAPTER_DISABLED && result == BT_ERROR_NONE) {
+ tet_printf("Callback: BT was disabled. DTS will be started.");
+ } else {
+ tet_printf("Callback: BT was not disabled. DTS will be started but DTS may fail.");
+ }
+
+ if (mainloop) {
+ g_main_loop_quit(mainloop);
+ }
+ }
+}
+
+
+
+/**
+ * @brief Negative test case of bt_socket_set_data_received_cb()
+ */
+static void utc_network_bluetooth_socket_set_data_received_cb_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_socket_set_data_received_cb(NULL, NULL);
+ dts_check_eq("bt_socket_set_data_received_cb", ret,
+ BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned when callback parameter is NULL");
+}
+
+/**
+ * @brief Negative test case of bt_socket_set_connection_state_changed_cb()
+ */
+static void utc_network_bluetooth_socket_set_connection_state_changed_cb_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_socket_set_connection_state_changed_cb(NULL, NULL);
+ dts_check_eq("bt_socket_set_connection_state_changed_cb", ret,
+ BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned when callback parameter is NULL");
+}
+
+/**
+ * @brief Negative test case of bt_socket_unset_data_received_cb()
+ */
+static void utc_network_bluetooth_socket_unset_data_received_cb_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ if (bt_deinitialize() != BT_ERROR_NONE) {
+ dts_fail("bt_socket_unset_data_received_cb",
+ "bt_deinitialize() failed.");
+ }
+
+ ret = bt_socket_unset_data_received_cb();
+ dts_check_eq("bt_socket_unset_data_received_cb", ret,
+ BT_ERROR_NOT_INITIALIZED,
+ "BT_ERROR_NOT_INITIALIZED must be returned when BT service is not initialized.");
+}
+
+/**
+ * @brief Negative test case of bt_socket_unset_connection_state_changed_cb()
+ */
+static void utc_network_bluetooth_socket_unset_connection_state_changed_cb_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_socket_unset_connection_state_changed_cb();
+ dts_check_eq("bt_socket_unset_connection_state_changed_cb", ret,
+ BT_ERROR_NOT_INITIALIZED,
+ "BT_ERROR_NOT_INITIALIZED must be returned when BT service is not initialized.");
+}
+
+/**
+ * @brief Negative test case of bt_socket_create_rfcomm()
+ */
+static void utc_network_bluetooth_socket_create_rfcomm_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_socket_create_rfcomm(NULL, NULL);
+ dts_check_eq("bt_socket_create_rfcomm", ret, BT_ERROR_INVALID_PARAMETER,
+ "BT_ERROR_INVALID_PARAMETER must be returned when port_uuid parameter is NULL");
+}
+
+/**
+ * @brief Negative test case of bt_socket_destroy_rfcomm()
+ */
+static void utc_network_bluetooth_socket_destroy_rfcomm_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_socket_destroy_rfcomm(NULL);
+ dts_check_eq("bt_socket_listen_and_accept_rfcomm", ret,
+ BT_ERROR_NOT_ENABLED,
+ "BT_ERROR_INVALID_PARAMETER must be returned when socket_fd is below 0");
+}
+
+
+/**
+ * @brief Negative test case of bt_socket_listen_and_accept_rfcomm()
+ */
+static void utc_network_bluetooth_socket_listen_and_accept_rfcomm_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_socket_listen_and_accept_rfcomm(1, 1);
+ dts_check_eq("bt_socket_listen_and_accept_rfcomm", ret,
+ BT_ERROR_NOT_ENABLED,
+ "BT_ERROR_NOT_ENABLED must be returned when BT is not enabled");
+}
+
+/**
+ * @brief Negative test case of bt_socket_connect_rfcomm()
+ */
+static void utc_network_bluetooth_socket_connect_rfcomm_n(void)
+{
+ int ret = BT_ERROR_NONE;
+ char *address = "00:02:79:AC:7D:FD";
+ char *uuid = "";
+
+ ret = bt_socket_connect_rfcomm(address, uuid);
+ dts_check_eq("bt_socket_connect_rfcomm", ret, BT_ERROR_NOT_ENABLED,
+ "BT_ERROR_NOT_ENABLED must be returned when BT is not enabled");
+}
+
+/**
+ * @brief Negative test case of bt_socket_disconnect_rfcomm()
+ */
+static void utc_network_bluetooth_socket_disconnect_rfcomm_n(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_socket_disconnect_rfcomm(-1);
+ dts_check_eq("bt_socket_disconnect_rfcomm", ret, BT_ERROR_NOT_ENABLED,
+ "BT_ERROR_NOT_ENABLED must be returned when BT is not enabled");
+}
+
+/**
+ * @brief Negative test case of bt_socket_send_data()
+ */
+static void utc_network_bluetooth_socket_send_data_n(void)
+{
+ int ret = BT_ERROR_NONE;
+ char *data = "dts_test";
+
+ ret = bt_socket_send_data(1, data, sizeof(data));
+ dts_check_eq("bt_socket_send_data", ret, BT_ERROR_NOT_ENABLED,
+ "BT_ERROR_NOT_ENABLED must be returned when BT is not enabled");
+}
diff --git a/TC/testcase/utc_network_bluetooth_socket_positive.c b/TC/testcase/utc_network_bluetooth_socket_positive.c
new file mode 100755
index 0000000..7c71338
--- /dev/null
+++ b/TC/testcase/utc_network_bluetooth_socket_positive.c
@@ -0,0 +1,478 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <tet_api.h>
+#include <bluetooth.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <glib.h>
+
+#define CONFIG_FILE_PATH "/opt/home/capi-network-bluetooth/tetware.conf"
+
+enum {
+ POSITIVE_TC_IDX = 0x01,
+ NEGATIVE_TC_IDX,
+};
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup) (void) = startup;
+void (*tet_cleanup) (void) = cleanup;
+
+const char target_name[128] = "dts_test";
+const char *rfcomm_test_uuid_spp = "00001101-0000-1000-8000-00805F9B34FB";
+char *target_address;
+int socket_fd = 0;
+bool callback_result = false;
+bool discovery_result = false;
+bool bonding_result = false;
+bool is_connecting = false;
+static GMainLoop *mainloop;
+
+static void utc_network_bluetooth_socket_set_data_received_cb_p(void);
+static void utc_network_bluetooth_socket_set_connection_state_changed_cb_p(void);
+
+static void utc_network_bluetooth_socket_create_rfcomm_p(void);
+static void utc_network_bluetooth_socket_destroy_rfcomm_p(void);
+static void utc_network_bluetooth_socket_listen_and_accept_rfcomm_p(void);
+static void utc_network_bluetooth_socket_connect_rfcomm_p(void);
+static void utc_network_bluetooth_socket_disconnect_rfcomm_p(void);
+static void utc_network_bluetooth_socket_send_data_p(void);
+static void utc_network_bluetooth_socket_unset_data_received_cb_p(void);
+static void utc_network_bluetooth_socket_unset_connection_state_changed_cb_p(void);
+
+gboolean timeout_func(gpointer data);
+void adapter_state_changed_cb_for_socket_p(int result,
+ bt_adapter_state_e adapter_state, void *user_data);
+void device_discovery_state_changed_cb_for_socket_p(int result,
+ bt_adapter_device_discovery_state_e discovery_state,
+ bt_adapter_device_discovery_info_s *discovery_info, void *user_data);
+void device_bonded_cb_for_socket_p(int result, bt_device_info_s *device_info,
+ void *user_data);
+void socket_data_received_cb_for_socket_p(bt_socket_received_data_s *data,
+ void *user_data);
+void socket_connection_state_changed_cb_for_socket_p(int result,
+ bt_socket_connection_state_e connection_state,
+ bt_socket_connection_s *connection, void *user_data);
+void device_unbonded_cb(int result, char *remote_address, void *user_data);
+
+struct tet_testlist tet_testlist[] = {
+ {utc_network_bluetooth_socket_create_rfcomm_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_socket_set_connection_state_changed_cb_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_socket_listen_and_accept_rfcomm_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_socket_set_data_received_cb_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_socket_connect_rfcomm_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_socket_send_data_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_socket_disconnect_rfcomm_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_socket_destroy_rfcomm_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_socket_unset_data_received_cb_p, POSITIVE_TC_IDX},
+ {utc_network_bluetooth_socket_unset_connection_state_changed_cb_p, POSITIVE_TC_IDX},
+ {NULL, 0},
+};
+
+int get_value_from_file(void)
+{
+ FILE *fp;
+ char *token;
+ char buf[100];
+
+ fp = fopen(CONFIG_FILE_PATH, "r");
+ if (fp == NULL) {
+ tet_printf("Default configuration is used\n");
+ return -1;
+ }
+ while (fgets(buf, sizeof(buf), fp)) {
+ if (buf[0] == '#' || buf[0] == '\n')
+ continue;
+
+ token = strrchr(buf, '\n');
+ if (token == NULL) {
+ tet_printf("g_conf is too long\n");
+ break;
+ }
+ *token = '\0';
+
+ token = strtok(buf, "=");
+ if (token == NULL) {
+ continue;
+ }
+ if (strcasecmp(token, "BT_ADDR_MOBILE") == 0) {
+ token = strtok(NULL, "=");
+ target_address = strdup(token);
+ fclose(fp);
+ return 0;
+ }
+ }
+ fclose(fp);
+ return -1;
+}
+
+static void startup(void)
+{
+ bt_error_e ret = BT_ERROR_NONE;
+ int timeout_id = 0;
+
+ if(get_value_from_file() == -1) {
+ tet_printf("Failed to read.");
+ }
+
+ /* start of TC */
+ tet_printf("TC start.");
+ callback_result = false;
+ discovery_result = false;
+ bonding_result = false;
+ mainloop = g_main_loop_new(NULL, FALSE);
+
+ bt_initialize();
+
+ if (bt_adapter_set_state_changed_cb(adapter_state_changed_cb_for_socket_p, "startup") != BT_ERROR_NONE) {
+ tet_printf("bt_adapter_set_state_changed_cb() failed.");
+ }
+
+ if (bt_adapter_set_device_discovery_state_changed_cb(device_discovery_state_changed_cb_for_socket_p, "startup") != BT_ERROR_NONE) {
+ tet_printf("bt_adapter_set_device_discovery_state_changed_cb() failed.");
+ }
+
+ if (bt_device_set_bond_created_cb(device_bonded_cb_for_socket_p, "startup") != BT_ERROR_NONE) {
+ tet_printf("bt_device_set_bond_created_cb() failed.");
+ }
+
+ ret = bt_adapter_enable();
+ if (ret == BT_ERROR_NONE) {
+ tet_printf("bt_adapter_enable() succeeded.");
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+
+ tet_printf("BT was enabled. Device discovery will be started");
+ if (bt_adapter_start_device_discovery() == BT_ERROR_NONE) {
+ tet_printf("bt_adapter_start_device_discovery() succeeded.");
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ } else {
+ tet_printf("bt_adapter_start_device_discovery() failed.");
+ }
+ } else if (ret == BT_ERROR_ALREADY_DONE) {
+ tet_printf("BT was already enabled. Device discovery will be started");
+ if (bt_adapter_start_device_discovery() == BT_ERROR_NONE) {
+ tet_printf("bt_adapter_start_device_discovery() succeeded.");
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ } else {
+ tet_printf("bt_adapter_start_device_discovery() failed.");
+ }
+ } else {
+ tet_printf("DTS may fail because bt_adapter_enable() failed.");
+ }
+
+ if (discovery_result == true && bt_device_create_bond(target_address) == BT_ERROR_NONE) {
+ tet_printf("bt_device_create_bond() succeeded.");
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ } else {
+ tet_printf("bt_device_create_bond() failed.");
+ }
+
+ if (bt_adapter_unset_state_changed_cb() != BT_ERROR_NONE) {
+ tet_printf("bt_adapter_unset_state_changed_cb() failed.");
+ }
+
+ if (bt_adapter_unset_device_discovery_state_changed_cb() != BT_ERROR_NONE) {
+ tet_printf("bt_adapter_unset_device_discovery_state_changed_cb() failed.");
+ }
+
+ if (bt_device_unset_bond_created_cb() != BT_ERROR_NONE) {
+ tet_printf("bt_device_unset_bond_created_cb() failed.");
+ }
+
+}
+
+static void cleanup(void)
+{
+ /* end of TC */
+ int timeout_id = 0;
+
+ /* Destroy a bond */
+ bt_device_set_bond_destroyed_cb(device_unbonded_cb, NULL);
+ if (bt_device_destroy_bond(target_address) == BT_ERROR_NONE) {
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ }
+
+ bt_deinitialize();
+ tet_printf("TC end.");
+}
+
+gboolean timeout_func(gpointer data)
+{
+ tet_printf("[%s] Callback: Timeout.", __FUNCTION__);
+ g_main_loop_quit((GMainLoop *) data);
+ return FALSE;
+}
+
+/**
+ * @brief Callback funtions
+ */
+void device_unbonded_cb(int result, char *remote_address, void *user_data)
+{
+ tet_printf("Callback: bt_device_bond_destroyed_cb() was called.");
+
+ if (mainloop) {
+ g_main_loop_quit(mainloop);
+ }
+
+}
+
+void adapter_state_changed_cb_for_socket_p(int result,
+ bt_adapter_state_e adapter_state, void *user_data)
+{
+ if (user_data != NULL && !strcmp((char *)user_data, "startup")) {
+ if (adapter_state == BT_ADAPTER_ENABLED && result == BT_ERROR_NONE) {
+ tet_printf("Callback: BT was enabled.");
+ bt_adapter_start_device_discovery();
+ } else {
+ tet_printf("Callback: BT was not enabled. DTS will be started but DTS may fail.");
+ if (mainloop) {
+ g_main_loop_quit(mainloop);
+ }
+ }
+ }
+}
+
+void device_discovery_state_changed_cb_for_socket_p(int result,
+ bt_adapter_device_discovery_state_e discovery_state,
+ bt_adapter_device_discovery_info_s *discovery_info, void *user_data)
+{
+ tet_printf("Callback: bt_adapter_device_discovery_state_changed_cb() was called");
+ if (user_data != NULL && !strcmp((char *)user_data, "startup")) {
+ if (discovery_state == BT_ADAPTER_DEVICE_DISCOVERY_FINISHED) {
+ tet_printf("Callback: Device discovery finished. DTS will be started.");
+ if (mainloop) {
+ g_main_loop_quit(mainloop);
+ }
+ } else if (discovery_state == BT_ADAPTER_DEVICE_DISCOVERY_FOUND) {
+ tet_printf("Callback: Devices were founded (%s)", discovery_info->remote_name);
+ if (discovery_info->remote_name != NULL && !strcmp(discovery_info->remote_name, target_name)) {
+ discovery_result = true;
+ tet_printf("Callback: dts_test device was found.");
+ strncpy(target_address, discovery_info->remote_address, 18);
+ tet_printf("Callback: device address: %s", discovery_info->remote_address);
+ if (bt_adapter_stop_device_discovery() == BT_ERROR_NONE) {
+ tet_printf("Callback: Device discovery will be stopped");
+ }
+ }
+ }
+ }
+}
+
+void device_bonded_cb_for_socket_p(int result, bt_device_info_s *device_info, void *user_data)
+{
+ if ((user_data != NULL) && !strcmp((char *)user_data, "startup")) {
+ if ((device_info->remote_address != NULL) &&
+ !strcmp(device_info->remote_address, target_address)) {
+ if (result == BT_ERROR_NONE) {
+ tet_printf("Callback: Bonding succeeded");
+ bonding_result = true;
+ } else {
+ tet_printf("Callback: Bonding failed");
+ }
+ }
+ }
+
+ if (mainloop) {
+ g_main_loop_quit(mainloop);
+ }
+}
+
+void socket_data_received_cb_for_socket_p(bt_socket_received_data_s *data,
+ void *user_data)
+{
+}
+
+void socket_connection_state_changed_cb_for_socket_p(int result,
+ bt_socket_connection_state_e connection_state,
+ bt_socket_connection_s *connection, void *user_data)
+{
+ tet_printf("Callback: bt_socket_connection_state_changed_cb() was called");
+ if (connection_state == BT_SOCKET_CONNECTED)
+ tet_printf("Callback: Connected");
+ else
+ tet_printf("Callback: Disconnected");
+
+ if (connection_state == BT_SOCKET_CONNECTED) {
+ tet_printf("Callback: [BT_SOCKET_CONNECTED] result = %d", result);
+ if (result == BT_ERROR_NONE && is_connecting == true) {
+ callback_result = true;
+ socket_fd = connection->socket_fd;
+ tet_printf("Callback: socket_fd = %d", socket_fd);
+
+ if (mainloop) {
+ g_main_loop_quit(mainloop);
+ }
+ }
+ } else if (connection_state == BT_SOCKET_DISCONNECTED) {
+ tet_printf("Callback: [BT_SOCKET_DISCONNECTED] result = %d", result);
+ if (result == BT_ERROR_NONE && is_connecting == false) {
+ callback_result = true;
+ socket_fd = connection->socket_fd;
+ tet_printf("Callback: socket_fd = %d", socket_fd);
+
+ if (mainloop) {
+ g_main_loop_quit(mainloop);
+ }
+ }
+ }
+}
+
+/**
+ * @brief Positive test case of bt_socket_set_data_received_cb()
+ */
+static void utc_network_bluetooth_socket_set_data_received_cb_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_socket_set_data_received_cb(socket_data_received_cb_for_socket_p, NULL);
+ dts_check_eq("bt_socket_set_data_received_cb", ret, BT_ERROR_NONE,
+ "bt_socket_set_data_received_cb() failed.");
+}
+
+/**
+ * @brief Positive test case of bt_socket_set_connection_state_changed_cb()
+ */
+static void utc_network_bluetooth_socket_set_connection_state_changed_cb_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_socket_set_connection_state_changed_cb(socket_connection_state_changed_cb_for_socket_p, NULL);
+ dts_check_eq("bt_socket_set_connection_state_changed_cb", ret,
+ BT_ERROR_NONE,
+ "bt_socket_set_connection_state_changed_cb() failed.");
+}
+
+/**
+ * @brief Positive test case of bt_socket_create_rfcomm()
+ */
+static void utc_network_bluetooth_socket_create_rfcomm_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_socket_create_rfcomm(rfcomm_test_uuid_spp, &socket_fd);
+ dts_check_eq("bt_socket_create_rfcomm", ret, BT_ERROR_NONE,
+ "bt_socket_create_rfcomm() failed.");
+}
+
+/**
+ * @brief Positive test case of bt_socket_listen_and_accept_rfcomm()
+ */
+static void utc_network_bluetooth_socket_listen_and_accept_rfcomm_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_socket_listen_and_accept_rfcomm(socket_fd, 1);
+ dts_check_eq("bt_socket_listen_and_accept_rfcomm", ret, BT_ERROR_NONE,
+ "bt_socket_listen_and_accept_rfcomm() failed.");
+}
+
+/**
+ * @brief Positive test case of bt_socket_destroy_rfcomm()
+ */
+static void utc_network_bluetooth_socket_destroy_rfcomm_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_socket_destroy_rfcomm(socket_fd);
+ dts_check_eq("bt_socket_destroy_rfcomm", ret, BT_ERROR_NONE,
+ "bt_socket_destroy_rfcomm() failed.");
+}
+
+/**
+ * @brief Positive test case of bt_socket_connect_rfcomm()
+ */
+static void utc_network_bluetooth_socket_connect_rfcomm_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ int timeout_id = 0;
+
+ is_connecting = true;
+ callback_result = false;
+ ret = bt_socket_connect_rfcomm(target_address, rfcomm_test_uuid_spp);
+ if (ret == BT_ERROR_NONE) {
+ dts_check_eq("bt_socket_connect_rfcomm", ret, BT_ERROR_NONE,
+ "bt_socket_connect_rfcomm() failed.");
+ tet_printf("bt_socket_connect_rfcomm() succeeded.");
+ timeout_id = g_timeout_add(60000, timeout_func, mainloop);
+ g_main_loop_run(mainloop);
+ g_source_remove(timeout_id);
+ } else {
+ dts_fail("bt_socket_connect_rfcomm",
+ "bt_socket_connect_rfcomm() failed");
+ }
+}
+
+/**
+ * @brief Positive test case of bt_socket_disconnect_rfcomm()
+ */
+static void utc_network_bluetooth_socket_disconnect_rfcomm_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_socket_disconnect_rfcomm(socket_fd);
+ dts_check_eq("bt_socket_disconnect_rfcomm", ret, BT_ERROR_NONE,
+ "bt_socket_disconnect_rfcomm() failed.");
+}
+
+/**
+ * @brief Positive test case of bt_socket_send_data()
+ */
+static void utc_network_bluetooth_socket_send_data_p(void)
+{
+ int ret = BT_ERROR_NONE;
+ char *dts_test = "dts_test";
+ int socket_fd = 1;
+ ret = bt_socket_send_data(socket_fd, "dts_test", sizeof(dts_test));
+ dts_check_eq("bt_socket_send_data", ret, BT_ERROR_NONE,
+ "bt_socket_send_data() failed.");
+}
+
+/**
+ * @brief Positive test case of bt_socket_unset_data_received_cb()
+ */
+static void utc_network_bluetooth_socket_unset_data_received_cb_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_socket_unset_data_received_cb();
+ dts_check_eq("bt_socket_unset_data_received_cb", ret, BT_ERROR_NONE,
+ "bt_socket_unset_data_received_cb() failed.");
+}
+
+/**
+ * @brief Positive test case of bt_socket_unset_connection_state_changed_cb()
+ */
+static void utc_network_bluetooth_socket_unset_connection_state_changed_cb_p(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_socket_unset_connection_state_changed_cb();
+ dts_check_eq("bt_socket_unset_connection_state_changed_cb", ret,
+ BT_ERROR_NONE,
+ "bt_socket_unset_connection_state_changed_cb() failed.");
+}
diff --git a/TC/tet_scen b/TC/tet_scen
new file mode 100755
index 0000000..03f029a
--- /dev/null
+++ b/TC/tet_scen
@@ -0,0 +1,7 @@
+all
+ ^TEST
+##### Scenarios for TEST #####
+
+# Test scenario
+TEST
+ :include:/testcase/tslist
diff --git a/TC/tetbuild.cfg b/TC/tetbuild.cfg
new file mode 100644
index 0000000..f7eda55
--- /dev/null
+++ b/TC/tetbuild.cfg
@@ -0,0 +1,5 @@
+TET_OUTPUT_CAPTURE=True # capture option for build operation checking
+TET_BUILD_TOOL=make # build with using make command
+TET_BUILD_FILE=-f Makefile # execution file (Makefile) for build
+TET_API_COMPLIANT=True # use TET API in Test Case ?
+TET_PASS_TC_NAME=True # report passed TC name in Journal file?
diff --git a/TC/tetclean.cfg b/TC/tetclean.cfg
new file mode 100644
index 0000000..02d7030
--- /dev/null
+++ b/TC/tetclean.cfg
@@ -0,0 +1,5 @@
+TET_OUTPUT_CAPTURE=True # capture option
+TET_CLEAN_TOOL= make clean # clean tool
+TET_CLEAN_FILE= Makefile # file for clean
+TET_API_COMPLIANT=True # TET API useage
+TET_PASS_TC_NAME=True # showing name , passed TC
diff --git a/TC/tetexec.cfg b/TC/tetexec.cfg
new file mode 100644
index 0000000..ef3e452
--- /dev/null
+++ b/TC/tetexec.cfg
@@ -0,0 +1,5 @@
+TET_OUTPUT_CAPTURE=True # capturing execution or not
+TET_EXEC_TOOL= # ex) exec : execution tool set up/ Optional
+TET_EXEC_FILE= # ex) exectool : execution file/ Optional
+TET_API_COMPLIANT=True # Test case or Tool usesTET API?
+TET_PASS_TC_NAME=True # showing Passed TC name ?
diff --git a/TC/tetware.conf b/TC/tetware.conf
new file mode 100644
index 0000000..4d0c237
--- /dev/null
+++ b/TC/tetware.conf
@@ -0,0 +1,5 @@
+BT_ADDR_HEADSET=00:21:19:14:29:52
+BT_ADDR_MOBILE=E4:32:CB:41:1D:7A
+BT_ADDR_HDP=00:22:58:07:77:BB
+BT_ADDR_LE=E4:32:CB:41:1F:A6
+
diff --git a/bluetooth-gatt-test.manifest b/bluetooth-gatt-test.manifest
new file mode 100644
index 0000000..05a98ee
--- /dev/null
+++ b/bluetooth-gatt-test.manifest
@@ -0,0 +1,12 @@
+<manifest>
+ <define>
+ <domain name="capi-network-bluetooth-gatt-test"/>
+ <request>
+ <smack request="bt-service::public" type="w"/>
+ <smack request="bt-service::platform" type="rw"/>
+ </request>
+ </define>
+ <request>
+ <domain name="capi-network-bluetooth-gatt-test"/>
+ </request>
+</manifest>
diff --git a/bluetooth-infinite-spp-test-client.manifest b/bluetooth-infinite-spp-test-client.manifest
new file mode 100644
index 0000000..f937326
--- /dev/null
+++ b/bluetooth-infinite-spp-test-client.manifest
@@ -0,0 +1,12 @@
+<manifest>
+ <define>
+ <domain name="capi-network-bluetooth-infinite-spp-test-client"/>
+ <request>
+ <smack request="bt-service::public" type="w"/>
+ <smack request="bt-service::platform" type="rw"/>
+ </request>
+ </define>
+ <request>
+ <domain name="capi-network-bluetooth-infinite-spp-test-client"/>
+ </request>
+</manifest>
diff --git a/bluetooth-infinite-spp-test-server.manifest b/bluetooth-infinite-spp-test-server.manifest
new file mode 100644
index 0000000..fb64ada
--- /dev/null
+++ b/bluetooth-infinite-spp-test-server.manifest
@@ -0,0 +1,12 @@
+<manifest>
+ <define>
+ <domain name="capi-network-bluetooth-infinite-spp-test-server"/>
+ <request>
+ <smack request="bt-service::public" type="w"/>
+ <smack request="bt-service::platform" type="rw"/>
+ </request>
+ </define>
+ <request>
+ <domain name="capi-network-bluetooth-infinite-spp-test-server"/>
+ </request>
+</manifest>
diff --git a/bluetooth-test.manifest b/bluetooth-test.manifest
new file mode 100644
index 0000000..0c26ff0
--- /dev/null
+++ b/bluetooth-test.manifest
@@ -0,0 +1,12 @@
+<manifest>
+ <define>
+ <domain name="capi-network-bluetooth-test"/>
+ <request>
+ <smack request="bt-service::public" type="w"/>
+ <smack request="bt-service::platform" type="rw"/>
+ </request>
+ </define>
+ <request>
+ <domain name="capi-network-bluetooth-test"/>
+ </request>
+</manifest>
diff --git a/bluetooth.manifest b/bluetooth.manifest
new file mode 100644
index 0000000..75b0fa5
--- /dev/null
+++ b/bluetooth.manifest
@@ -0,0 +1,5 @@
+<manifest>
+ <request>
+ <domain name="_"/>
+ </request>
+</manifest>
diff --git a/debian/README b/debian/README
deleted file mode 100644
index e69de29..0000000
--- a/debian/README
+++ /dev/null
diff --git a/debian/capi-network-bluetooth-dev.install b/debian/capi-network-bluetooth-dev.install
deleted file mode 100644
index 761a28b..0000000
--- a/debian/capi-network-bluetooth-dev.install
+++ /dev/null
@@ -1,4 +0,0 @@
-/usr/include/*
-/usr/include/*/*
-/usr/lib/pkgconfig/*.pc
-
diff --git a/debian/capi-network-bluetooth-dev.postinst b/debian/capi-network-bluetooth-dev.postinst
deleted file mode 100644
index 1a24852..0000000
--- a/debian/capi-network-bluetooth-dev.postinst
+++ /dev/null
@@ -1 +0,0 @@
-#!/bin/sh
diff --git a/debian/capi-network-bluetooth.install b/debian/capi-network-bluetooth.install
deleted file mode 100644
index 4a755a4..0000000
--- a/debian/capi-network-bluetooth.install
+++ /dev/null
@@ -1 +0,0 @@
-/usr/lib/lib*.so*
diff --git a/debian/capi-network-bluetooth.postinst b/debian/capi-network-bluetooth.postinst
deleted file mode 100644
index 1a24852..0000000
--- a/debian/capi-network-bluetooth.postinst
+++ /dev/null
@@ -1 +0,0 @@
-#!/bin/sh
diff --git a/debian/changelog b/debian/changelog
deleted file mode 100644
index 7d8ea06..0000000
--- a/debian/changelog
+++ /dev/null
@@ -1,304 +0,0 @@
-capi-network-bluetooth (0.1.15-1) unstable; urgency=low
-
- * Tagging and upload the package
- * Git: slp/api/bluetooth
- * Tag: capi-network-bluetooth_0.1.15-1
-
- -- DoHyun Pyun <dh79.pyun@samsung.com> Tue, 11 Sep 2012 16:08:53 +0900
-
-capi-network-bluetooth (0.1.14-1) unstable; urgency=low
-
- * Tagging and upload the package
- * Git: slp/api/bluetooth
- * Tag: capi-network-bluetooth_0.1.14-1
-
- -- DoHyun Pyun <dh79.pyun@samsung.com> Tue, 11 Sep 2012 09:56:47 +0900
-
-capi-network-bluetooth (0.1.13-1) unstable; urgency=low
-
- * Tagging and upload the package
- * Git: slp/api/bluetooth
- * Tag: capi-network-bluetooth_0.1.13-1
-
- -- DoHyun Pyun <dh79.pyun@samsung.com> Mon, 10 Sep 2012 12:56:50 +0900
-
-capi-network-bluetooth (0.1.12-1) unstable; urgency=low
-
- * Tagging and upload the package
- * Git: slp/api/bluetooth
- * Tag: capi-network-bluetooth_0.1.12-1
-
- -- DoHyun Pyun <dh79.pyun@samsung.com> Thu, 16 Aug 2012 16:56:23 +0900
-
-capi-network-bluetooth (0.1.11-1) unstable; urgency=low
-
- * Tagging and upload the package
- * Git: slp/api/bluetooth
- * Tag: capi-network-bluetooth_0.1.11-1
-
- -- DoHyun Pyun <dh79.pyun@samsung.com> Wed, 08 Aug 2012 19:26:30 +0900
-
-capi-network-bluetooth (0.1.10-1) unstable; urgency=low
-
- * Tagging and upload the package
- * Git: slp/api/bluetooth
- * Tag: capi-network-bluetooth_0.1.10-1
-
- -- DoHyun Pyun <dh79.pyun@samsung.com> Wed, 08 Aug 2012 17:08:38 +0900
-
-capi-network-bluetooth (0.1.9-1) unstable; urgency=low
-
- * Modify the HID APIs
- * Git: slp/api/bluetooth
- * Tag: capi-network-bluetooth_0.1.9-1
-
- -- DoHyun Pyun <dh79.pyun@samsung.com> Tue, 07 Aug 2012 17:39:52 +0900
-
-capi-network-bluetooth (0.1.8-1) unstable; urgency=low
-
- * Implement bt_socket_set_connection_requested_cb APIs
- * Git: slp/api/bluetooth
- * Tag: capi-network-bluetooth_0.1.8-1
-
- -- DoHyun Pyun <dh79.pyun@samsung.com> Mon, 06 Aug 2012 18:08:24 +0900
-
-capi-network-bluetooth (0.1.7-1) unstable; urgency=low
-
- * Implement bt_get_device_info API
- * Git: slp/api/bluetooth
- * Tag: capi-network-bluetooth_0.1.7-1
-
- -- DoHyun Pyun <dh79.pyun@samsung.com> Wed, 01 Aug 2012 14:03:45 +0900
-
-capi-network-bluetooth (0.1.6-1) unstable; urgency=low
-
- * Modify the RFCOMM implement
- * Git: slp/api/bluetooth
- * Tag: capi-network-bluetooth_0.1.6-1
-
- -- DoHyun Pyun <dh79.pyun@samsung.com> Wed, 25 Jul 2012 11:02:31 +0900
-
-capi-network-bluetooth (0.1.5-1) unstable; urgency=low
-
- * Add bt_get_device_info API
- * Git: slp/api/bluetooth
- * Tag: capi-network-bluetooth_0.1.5-1
-
- -- DoHyun Pyun <dh79.pyun@samsung.com> Tue, 17 Jul 2012 13:51:51 +0900
-
-capi-network-bluetooth (0.1.4-1) unstable; urgency=low
-
- * Add HDP API / Fix inapposite data type (rssi)
- * Git: slp/api/bluetooth
- * Tag: capi-network-bluetooth_0.1.4-1
-
- -- Sangki Park <sangki79.park@samsung.com> Fri, 29 Jun 2012 17:10:28 +0900
-
-capi-network-bluetooth (0.1.3-1) unstable; urgency=low
-
- * Implement the requirements from OSP
- * Git: slp/api/bluetooth
- * Tag: capi-network-bluetooth_0.1.3-1
-
- -- DoHyun Pyun <dh79.pyun@samsung.com> Wed, 13 Jun 2012 09:14:03 +0900
-
-capi-network-bluetooth (0.1.2-1) unstable; urgency=low
-
- * Fix the DTS testcase
- * Git: slp/api/bluetooth
- * Tag: capi-network-bluetooth_0.1.2-1
-
- -- DoHyun Pyun <dh79.pyun@samsung.com> Thu, 12 Apr 2012 15:48:47 +0900
-
-capi-network-bluetooth (0.1.1-1) unstable; urgency=low
-
- * Fix the crash in DTS test
- * Git: slp/api/bluetooth
- * Tag: capi-network-bluetooth_0.1.1-1
-
- -- DoHyun Pyun <dh79.pyun@samsung.com> Thu, 29 Mar 2012 14:45:08 +0900
-
-capi-network-bluetooth (0.1.0-14) unstable; urgency=low
-
- * Initialize the pointer to NULL after free
- * Git: slp/api/bluetooth
- * Tag: capi-network-bluetooth_0.1.0-14
-
- -- DoHyun Pyun <dh79.pyun@samsung.com> Wed, 21 Mar 2012 17:15:59 +0900
-
-capi-network-bluetooth (0.1.0-13) unstable; urgency=low
-
- * Correct dependent package
- * Git: slp/api/bluetooth
- * Tag: capi-network-bluetooth_0.1.0-13
-
- -- ByungWoo Lee <bw1212.lee@samsung.com> Thu, 15 Mar 2012 13:13:36 +0900
-
-capi-network-bluetooth (0.1.0-12) unstable; urgency=low
-
- * Modify coding style
- * Git: slp/api/bluetooth
- * Tag: capi-network-bluetooth_0.1.0-12
-
- -- ByungWoo Lee <bw1212.lee@samsung.com> Mon, 20 Feb 2012 15:50:45 +0900
-
-capi-network-bluetooth (0.1.0-11) unstable; urgency=low
-
- * Add versioning of library
- * Git: slp/api/bluetooth
- * Tag: capi-network-bluetooth_0.1.0-11
-
- -- ByungWoo Lee <bw1212.lee@samsung.com> Tue, 14 Feb 2012 17:09:56 +0900
-
-capi-network-bluetooth (0.1.0-10) unstable; urgency=low
-
- * Clean codes
- * Git: slp/api/bluetooth
- * Tag: capi-network-bluetooth_0.1.0-10
-
- -- ByungWoo Lee <bw1212.lee@samsung.com> Thu, 02 Feb 2012 14:49:58 +0900
-
-capi-network-bluetooth (0.1.0-9) unstable; urgency=low
-
- * Add LICENSE, remove COPYING and Convert TIZEN_ERROR_OK to TIZEN_ERROR_NONE
- * Git: slp/api/bluetooth
- * Tag: capi-network-bluetooth_0.1.0-9
-
- -- ByungWoo Lee <bw1212.lee@samsung.com> Mon, 05 Dec 2011 13:04:56 +0900
-
-capi-network-bluetooth (0.1.0-8) unstable; urgency=low
-
- * Fix bug in destroying a bond
- * Git: slp-source.sec.samsung.net:slp/api/bluetooth
- * Tag: capi-network-bluetooth_0.1.0-8
-
- -- ByungWoo Lee <bw1212.lee@samsung.com> Wed, 30 Nov 2011 21:07:06 +0900
-
-capi-network-bluetooth (0.1.0-7) unstable; urgency=low
-
- * Add service_uuid to bt_device_info_s and bt_device_sdp_info_s instead of service_list and modify log
- * Git: slp-source.sec.samsung.net:slp/api/bluetooth
- * Tag: capi-network-bluetooth_0.1.0-7
-
- -- ByungWoo Lee <bw1212.lee@samsung.com> Wed, 30 Nov 2011 19:49:10 +0900
-
-capi-network-bluetooth (0.1.0-6) unstable; urgency=low
-
- * Convert SLP into TIZEN
- * Git: slp-source.sec.samsung.net:slp/api/bluetooth
- * Tag: capi-network-bluetooth_0.1.0-6
-
- -- ByungWoo Lee <bw1212.lee@samsung.com> Wed, 23 Nov 2011 13:09:26 +0900
-
-capi-network-bluetooth (0.1.0-5) unstable; urgency=low
-
- * Change bt_device_cancel_bonding() and bt_adapter_set_visibility() into synchronous function, and Add BT_ERROR_SERVICE_SEARCH_ERROR to bt_error_e.
- * Git: slp-source.sec.samsung.net:slp/api/bluetooth
- * Tag: capi-network-bluetooth_0.1.0-5
-
- -- ByungWoo Lee <bw1212.lee@samsung.com> Wed, 02 Nov 2011 18:58:16 +0900
-
-capi-network-bluetooth (0.1.0-4) unstable; urgency=low
-
- * Modify bt_error_e and change bt_device_cancel_service_search() and bt_device_cancel_bonding() into synchronous function
- * Git: slp-source.sec.samsung.net:slp/api/bluetooth
- * Tag: capi-network-bluetooth_0.1.0-4
-
- -- ByungWoo Lee <bw1212.lee@samsung.com> Thu, 27 Oct 2011 16:59:18 +0900
-
-capi-network-bluetooth (0.1.0-3) unstable; urgency=low
-
- * Change bt_adapter_set_name into synchronous function
- * Git: slp-source.sec.samsung.net:slp/api/bluetooth
- * Tag: capi-network-bluetooth_0.1.0-3
-
- -- ByungWoo Lee <bw1212.lee@samsung.com> Mon, 17 Oct 2011 18:34:03 +0900
-
-capi-network-bluetooth (0.1.0-2) unstable; urgency=low
-
- * Correct bug which happens when set local name and modify bt_error_e
- * Git: slp-source.sec.samsung.net:slp/api/bluetooth
- * Tag: capi-network-bluetooth_0.1.0-2
-
- -- ByungWoo Lee <bw1212.lee@samsung.com> Mon, 10 Oct 2011 18:37:32 +0900
-
-capi-network-bluetooth (0.1.0-1) unstable; urgency=low
-
- * Modify error code of bt_initialize() and bt_deinitialize()
- * Git: slp-source.sec.samsung.net:slp/api/bluetooth
- * Tag: capi-network-bluetooth_0.1.0-1
-
- -- ByungWoo Lee <bw1212.lee@samsung.com> Tue, 27 Sep 2011 22:17:33 +0900
-
-capi-network-bluetooth (0.0.1-9) unstable; urgency=low
-
- * Remove undefined enum type
- * Git: slp-source.sec.samsung.net:slp/api/bluetooth
- * Tag: capi-network-bluetooth_0.0.1-9
-
- -- Kangho Hur <kangho.hur@samsung.com> Mon, 26 Sep 2011 21:31:34 +0900
-
-capi-network-bluetooth (0.0.1-8) unstable; urgency=low
-
- * Change device_address to remote_address
- * Git: slp-source.sec.samsung.net:slp/api/bluetooth
- * Tag: capi-network-bluetooth_0.0.1-8
-
- -- ByungWoo Lee <bw1212.lee@samsung.com> Fri, 23 Sep 2011 20:02:07 +0900
-
-capi-network-bluetooth (0.0.1-7) unstable; urgency=low
-
- * Remove BT_MAJOR_SERVICE_CLASS_UNKNOWN
- * Git: slp-source.sec.samsung.net:slp/api/bluetooth
- * Tag: capi-network-bluetooth_0.0.1-7
-
- -- ByungWoo Lee <bw1212.lee@samsung.com> Tue, 20 Sep 2011 17:17:01 +0900
-
-capi-network-bluetooth (0.0.1-6) unstable; urgency=low
-
- * Rename class to bt_class
- * Git: slp-source.sec.samsung.net:slp/api/bluetooth
- * Tag: capi-network-bluetooth_0.0.1-6
-
- -- ByungWoo Lee <bw1212.lee@samsung.com> Thu, 08 Sep 2011 10:54:58 +0900
-
-capi-network-bluetooth (0.0.1-5) unstable; urgency=low
-
- * Remove parameters of bt_adapter_start_device_discovery()
- * Git: slp-source.sec.samsung.net:slp/api/bluetooth
- * Tag: capi-network-bluetooth_0.0.1-5
-
- -- ByungWoo Lee <bw1212.lee@samsung.com> Mon, 05 Sep 2011 20:22:36 +0900
-
-capi-network-bluetooth (0.0.1-4) unstable; urgency=low
-
- * Add bt_adapter_device_discovery_info_s
- * Git: slp-source.sec.samsung.net:slp/api/bluetooth
- * Tag: capi-network-bluetooth_0.0.1-4
-
- -- ByungWoo Lee <bw1212.lee@samsung.com> Mon, 22 Aug 2011 15:41:37 +0900
-
-capi-network-bluetooth (0.0.1-3) unstable; urgency=low
-
- * Fix build break
- * Git: slp-source.sec.samsung.net:slp/api/bluetooth
- * Tag: capi-network-bluetooth_0.0.1-3
-
- -- Kangho Hur <kangho.hur@samsung.com> Sat, 13 Aug 2011 01:07:56 +0900
-
-capi-network-bluetooth (0.0.1-2) unstable; urgency=low
-
- * Modify how to copy service list
- * Git: slp-source.sec.samsung.net:slp/api/bluetooth
- * Tag: capi-network-bluetooth_0.0.1-2
-
- -- ByungWoo Lee <bw1212.lee@samsung.com> Thu, 11 Aug 2011 19:45:20 +0900
-
-capi-network-bluetooth (0.0.1-1) unstable; urgency=low
-
- * Initial upload
- * Git: slp-source.sec.samsung.net:slp/api/bluetooth
- * Tag: capi-network-bluetooth_0.0.1-1
-
- -- ByungWoo Lee <bw1212.lee@samsung.com> Mon, 08 Aug 2011 10:12:25 +0900
-
diff --git a/debian/compat b/debian/compat
deleted file mode 100644
index 7ed6ff8..0000000
--- a/debian/compat
+++ /dev/null
@@ -1 +0,0 @@
-5
diff --git a/debian/control b/debian/control
deleted file mode 100644
index 7299ecb..0000000
--- a/debian/control
+++ /dev/null
@@ -1,21 +0,0 @@
-Source: capi-network-bluetooth
-Section: libs
-Priority: extra
-Maintainer: Kangho Hur <kangho.hur@samsung.com>, ByungWoo Lee <bw1212.lee@samsung.com>
-Build-Depends: debhelper (>= 5), dlog-dev, capi-base-common-dev, libglib2.0-dev, libbluetooth-frwk-dev
-
-Package: capi-network-bluetooth
-Architecture: any
-Depends: ${shlibs:Depends}, ${misc:Depends}
-Description: A Network Bluetooth library in Tizen Native API
-
-Package: capi-network-bluetooth-dev
-Architecture: any
-Depends: ${shlibs:Depends}, ${misc:Depends}, capi-network-bluetooth (= ${Source-Version}), capi-base-common-dev
-Description: A Network Bluetooth library in Tizen Native API (DEV)
-
-Package: capi-network-bluetooth-dbg
-Architecture: any
-Depends: ${shlibs:Depends}, ${misc:Depends}, capi-network-bluetooth (= ${Source-Version})
-Description: A Network Bluetooth library in Tizen Native API (DBG)
-
diff --git a/debian/rules b/debian/rules
deleted file mode 100755
index 9736f8b..0000000
--- a/debian/rules
+++ /dev/null
@@ -1,68 +0,0 @@
-#!/usr/bin/make -f
-
-FULLVER ?= $(shell dpkg-parsechangelog | grep Version: | cut -d ' ' -f 2 | cut -d '-' -f 1)
-MAJORVER ?= $(shell echo $(FULLVER) | cut -d '.' -f 1)
-
-CFLAGS = -Wall -g
-
-ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
- CFLAGS += -O0
-else
- CFLAGS += -O2
-endif
-CMAKE_ROOT_DIR ?= $(CURDIR)
-CMAKE_BUILD_DIR ?= $(CURDIR)/cmake_build_tmp
-
-configure: configure-stamp
-configure-stamp:
- dh_testdir
- mkdir -p $(CMAKE_BUILD_DIR) && cd $(CMAKE_BUILD_DIR) && cmake .. -DFULLVER=${FULLVER} -DMAJORVER=${MAJORVER}
- touch configure-stamp
-
-
-build: build-stamp
-build-stamp: configure-stamp
- dh_testdir
- cd $(CMAKE_BUILD_DIR) && $(MAKE)
- touch $@
-
-clean:
- cd $(CMAKE_ROOT_DIR)
- dh_testdir
- dh_testroot
- rm -f build-stamp configure-stamp
- rm -f `find . -name *.pc`
- rm -rf $(CMAKE_BUILD_DIR)
- dh_clean
-
-install: build
- dh_testdir
- dh_testroot
- dh_clean -k
- dh_installdirs
-
- cd $(CMAKE_BUILD_DIR) && $(MAKE) DESTDIR=$(CURDIR)/debian/tmp install
-
-binary-indep: build install
-
-binary-arch: build install
- dh_testdir
- dh_testroot
- dh_installchangelogs
- dh_installdocs
- dh_installexamples
- dh_install --sourcedir=debian/tmp
- dh_installman
- dh_link
- dh_strip --dbg-package=capi-network-bluetooth-dbg
- dh_fixperms
- dh_makeshlibs
- dh_installdeb
- dh_shlibdeps
- dh_gencontrol
- dh_md5sums
- dh_builddeb
-
-binary: binary-indep binary-arch
-.PHONY: build clean binary-indep binary-arch binary install configure
-
diff --git a/doc/bluetooth_doc.h b/doc/bluetooth_doc.h
new file mode 100644
index 0000000..6f318c0
--- /dev/null
+++ b/doc/bluetooth_doc.h
@@ -0,0 +1,696 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef __TIZEN_NETWORK_BLUETOOTH_DOC_H__
+#define __TIZEN_NETWORK_BLUETOOTH_DOC_H__
+
+/**
+ * @defgroup CAPI_NETWORK_BLUETOOTH_MODULE Bluetooth
+ * @brief Bluetooth Service provides API to manage Bluetooth device.
+ * @ingroup CAPI_NETWORK_FRAMEWORK
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_MODULE_HEADER Required Header
+ * \#include <bluetooth.h>
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_MODULE_OVERVIEW Overview
+ * Bluetooth Service consists of @ref CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE, @ref CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE and @ref CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE.
+ *
+ *<BR>
+ * In order to use the above APIs, you must call #bt_initialize() in advance.
+ * In addition, #bt_deinitialize() should be called when Bluetooth Service is no longer needed.
+ * Please refer Bluetooth Tutorial if you want to get more detailed usages and information of this api.
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_MODULE_FEATURE Related Features
+ * This API is related with the following features:\n
+ * - http://tizen.org/feature/network.bluetooth\n
+ *
+ * It is recommended to design feature related codes in your application for reliability.\n
+ *
+ * You can check if a device supports the related features for this API by using @ref CAPI_SYSTEM_SYSTEM_INFO_MODULE,thereby controlling the procedure of your application.\n
+ *
+ * To ensure your application is only running on the device with specific features, please define the features in your manifest file using the manifest editor in the SDK.\n
+ *
+ * More details on featuring your application can be found from <a href="../org.tizen.mobile.native.appprogramming/html/ide_sdk_tools/feature_element.htm"><b>Feature Element</b>.</a>
+ *
+ */
+
+/**
+ * @defgroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE Bluetooth Adapter
+ * @brief Bluetooth Adapter API provides functions for setting up Bluetooth and discovering other devices.
+ * @ingroup CAPI_NETWORK_BLUETOOTH_MODULE
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE_HEADER Required Header
+ * \#include <bluetooth.h>
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE_OVERVIEW Overview
+ * This set of function is used to control a bluetooth adapter.
+ * You can also control visibility of the device, its appearance for others (adapter name).
+ * In addition, this api is used to discover neighboring bluetooth devices.
+ * This process is asynchronous, so it is up to you to build and hold list of devices in the neighborhood
+ * - the api does not provide this list.
+ * Before starting a device discovery, you can find a device from the connected devices.
+ * This functionality is implemented by foreach loop.
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE_FEATURE Related Features
+ * This API is related with the following features:\n
+ * - http://tizen.org/feature/network.bluetooth\n
+ *
+ * It is recommended to design feature related codes in your application for reliability.\n
+ *
+ * You can check if a device supports the related features for this API by using @ref CAPI_SYSTEM_SYSTEM_INFO_MODULE,thereby controlling the procedure of your application.\n
+ *
+ * To ensure your application is only running on the device with specific features, please define the features in your manifest file using the manifest editor in the SDK.\n
+ *
+ * More details on featuring your application can be found from <a href="../org.tizen.mobile.native.appprogramming/html/ide_sdk_tools/feature_element.htm"><b>Feature Element</b>.</a>
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE_ASYNCHRONOUS_OPERATIONS Asynchronous Operations
+ * <div><table class="doxtable" >
+ * <tr>
+ * <th><b>FUNCTION</b></th>
+ * <th><b>CALLBACK</b></th>
+ * <th><b>DESCRIPTION</b></th>
+ * </tr>
+ * <tr>
+ * <td>bt_adapter_set_name()</td>
+ * <td>bt_adapter_name_changed_cb()</td>
+ * <td>Used to set adapter name. </td>
+ * </tr>
+ * <tr>
+ * <td>bt_adapter_visibility_mode_changed_cb()</td>
+ * <td>Used to set visibility mode (#bt_adapter_visibility_mode_e). </td>
+ * </tr>
+ * <tr>
+ * <td>bt_adapter_start_device_discovery()<br>
+ * bt_adapter_stop_device_discovery()</td>
+ * <td>bt_adapter_device_discovery_state_changed_cb()</td>
+ * <td>Used to start or cancel device discovery. </td>
+ * </tr>
+ *</table></div>
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE_CALLBACK_OPERATIONS Callback(Event) Operations
+ * <div><table class="doxtable" >
+ * <tr>
+ * <th><b>REGISTER</b></th>
+ * <th><b>UNREGISTER</b></th>
+ * <th><b>CALLBACK</b></th>
+ * <th><b>DESCRIPTION</b></th>
+ * </tr>
+ * <tr>
+ * <td>bt_adapter_set_state_changed_cb()</td>
+ * <td>bt_adapter_unset_state_changed_cb()</td>
+ * <td>bt_adapter_state_changed_cb()</td>
+ * <td>Used to be notified of state change (enable or disable). </td>
+ * </tr>
+ * <tr>
+ * <td>bt_adapter_set_name_changed_cb()</td>
+ * <td>bt_adapter_unset_name_changed_cb()</td>
+ * <td>bt_adapter_name_changed_cb()</td>
+ * <td>Used to be notified of name change. </td>
+ * </tr>
+ * <tr>
+ * <td>bt_adapter_set_visibility_mode_changed_cb()</td>
+ * <td>bt_adapter_unset_visibility_mode_changed_cb()</td>
+ * <td>bt_adapter_visibility_mode_changed_cb()</td>
+ * <td>Used to be notified of change of visibility mode (#bt_adapter_visibility_mode_e). </td>
+ * </tr>
+ * <tr>
+ * <td>bt_adapter_set_device_discovery_state_changed_cb()</td>
+ * <td>bt_adapter_unset_device_discovery_state_changed_cb()</td>
+ * <td>bt_adapter_device_discovery_state_changed_cb()</td>
+ * <td>Used to be notified of change of device discovery state (#bt_adapter_device_discovery_state_e). </td>
+ * </tr>
+ *</table></div>
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE_FOREACH_OPERATIONS Foreach Operations
+ * <div><table class="doxtable" >
+ * <tr>
+ * <th><b>FOREACH</b></th>
+ * <th><b>CALLBACK</b></th>
+ * <th><b>DESCRIPTION</b></th>
+ * </tr>
+ * <tr>
+ * <td>bt_adapter_foreach_bonded_device()</td>
+ * <td>bt_adapter_bonded_device_cb()</td>
+ * <td>Used to get bonded devices.</td>
+ * </tr>
+ *</table></div>
+ *
+ *<BR>
+ * Please refer Bluetooth Tutorial if you want to get more detailed usages and information of this api.
+ */
+
+/**
+ * @defgroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE Bluetooth LE Adapter
+ * @brief Bluetooth LE API provides functions for managing bonds with other devices for LE and searching for supported LE services.
+ * @ingroup CAPI_NETWORK_BLUETOOTH_MODULE
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE_HEADER Required Header
+ * \#include <bluetooth.h>
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE_OVERVIEW Overview
+ * Bluetooth stack architecture has been changed. Thus, GATT APIs defined in Tizen 2.3 are deprecated and new GATT client APIs are defined.
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE_FEATURE Related Features
+ * This API is related with the following features:\n
+ * - http://tizen.org/feature/network.bluetooth\n
+ * - http://tizen.org/feature/network.bluetooth.le\n
+ *
+ * It is recommended to design feature related codes in your application for reliability.\n
+ *
+ * You can check if a device supports the related features for this API by using @ref CAPI_SYSTEM_SYSTEM_INFO_MODULE,thereby controlling the procedure of your application.\n
+ *
+ * To ensure your application is only running on the device with specific features, please define the features in your manifest file using the manifest editor in the SDK.\n
+ *
+ * More details on featuring your application can be found from <a href="../org.tizen.mobile.native.appprogramming/html/ide_sdk_tools/feature_element.htm"><b>Feature Element</b>.</a>
+ *
+ */
+
+/**
+ * @defgroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE Bluetooth Device
+ * @brief Bluetooth Device API provides functions for managing bonds with other devices and searching for supported services.
+ * @ingroup CAPI_NETWORK_BLUETOOTH_MODULE
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE_HEADER Required Header
+ * \#include <bluetooth.h>
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE_OVERVIEW Overview
+ * This set of functions is used to handle the connection with other devices.
+ * Connected devices exchange keys needed for encrypted communication,
+ * but each connection has to be approved by the latest application user.
+ * You can also set authorization of other devices.
+ * Authorized devices are connected, and it is connected automatically without the latest user
+ * being asked for authorization.
+ * In addition, this is used to search for services available on remote devices.
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE_FEATURE Related Features
+ * This API is related with the following features:\n
+ * - http://tizen.org/feature/network.bluetooth\n
+ *
+ * It is recommended to design feature related codes in your application for reliability.\n
+ *
+ * You can check if a device supports the related features for this API by using @ref CAPI_SYSTEM_SYSTEM_INFO_MODULE,thereby controlling the procedure of your application.\n
+ *
+ * To ensure your application is only running on the device with specific features, please define the features in your manifest file using the manifest editor in the SDK.\n
+ *
+ * More details on featuring your application can be found from <a href="../org.tizen.mobile.native.appprogramming/html/ide_sdk_tools/feature_element.htm"><b>Feature Element</b>.</a>
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE_ASYNCHRONOUS_OPERATIONS Asynchronous Operations
+ * <div><table class="doxtable" >
+ * <tr>
+ * <th><b>FUNCTION</b></th>
+ * <th><b>CALLBACK</b></th>
+ * <th><b>DESCRIPTION</b></th>
+ * </tr>
+ * <tr>
+ * <td>bt_device_create_bond()<br>
+ * bt_device_cancel_bonding()</td>
+ * <td>bt_device_bond_created_cb()</td>
+ * <td>Used to create bond or cancel creating bond. </td>
+ * </tr>
+ * <tr>
+ * <td>bt_device_destroy_bond()</td>
+ * <td>bt_device_bond_destroyed_cb()</td>
+ * <td>Used to destroy bond. </td>
+ * </tr>
+ * <tr>
+ * <td>bt_device_set_authorization()</td>
+ * <td>bt_device_authorization_changed_cb()</td>
+ * <td>Used to set as authorized or unauthorized device. </td>
+ * </tr>
+ * <tr>
+ * <td>bt_device_start_service_search()</td>
+ * <td>bt_device_service_searched_cb()</td>
+ * <td>Used to start or cancel service search. </td>
+ * </tr>
+ *</table></div>
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE_CALLBACK_OPERATIONS Callback(Event) Operations
+ * <div><table class="doxtable" >
+ * <tr>
+ * <th><b>REGISTER</b></th>
+ * <th><b>UNREGISTER</b></th>
+ * <th><b>CALLBACK</b></th>
+ * <th><b>DESCRIPTION</b></th>
+ * </tr>
+ * <tr>
+ * <td>bt_device_set_bond_created_cb()</td>
+ * <td>bt_device_unset_bond_created_cb()</td>
+ * <td>bt_device_bond_created_cb()</td>
+ * <td>Used to be notified of the result of creating bond. </td>
+ * </tr>
+ * <tr>
+ * <td>bt_device_set_bond_destroyed_cb()</td>
+ * <td>bt_device_unset_bond_destroyed_cb()</td>
+ * <td>bt_device_bond_destroyed_cb()</td>
+ * <td>Used to be notified of the result of destroying bond. </td>
+ * </tr>
+ * <tr>
+ * <td>bt_device_set_authorization_changed_cb()</td>
+ * <td>bt_device_unset_authorization_changed_cb()</td>
+ * <td>bt_device_authorization_changed_cb()</td>
+ * <td>Used to be notified of change of authorization. </td>
+ * </tr>
+ * <tr>
+ * <td>bt_device_set_service_searched_cb()</td>
+ * <td>bt_device_unset_service_searched_cb()</td>
+ * <td>bt_device_service_searched_cb()</td>
+ * <td>Used to be notified of change of service search state. </td>
+ * </tr>
+ *</table></div>
+ *
+ *<BR>
+ * Please refer Bluetooth Tutorial if you want to get more detailed usages and information of this api.
+ */
+
+
+/**
+ * @defgroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE Bluetooth Socket
+ * @brief Bluetooth Socket API provides functions for managing connections to other devices and exchanging data.
+ * @ingroup CAPI_NETWORK_BLUETOOTH_MODULE
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE_HEADER Required Header
+ * \#include <bluetooth.h>
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE_OVERVIEW Overview
+ * This set of functions is used for exchanging data between two bluetooth
+ * devices, our device can have both roles as server (service provider) and client
+ * (service user).
+ * Depending on the role, there is difference in creating a connection.
+ * After that, processes of exchanging data and disconnection are same.
+ *
+ * To start communication, you should first register for #bt_socket_set_connection_state_changed_cb()
+ * and #bt_socket_set_data_received_cb().
+ * Next step depends on the role of your application.\n
+ * If you want to be \b server \b role, application should create socket
+ * (#bt_socket_create_rfcomm()), and start listening and accepting incoming connections
+ * (#bt_socket_listen_and_accept_rfcomm()).
+ * If you want to connect to specific device and use it's services (\a client \a role),
+ * you have to start connection with #bt_socket_connect_rfcomm() and wait for connection.\n
+ * After connection has been established (information is passed to your program with
+ * #bt_socket_connection_state_changed_cb() function call), you can exchange data by
+ * calling #bt_socket_send_data(). \n
+ * If you receive data from remote device, #bt_socket_data_received_cb() functions will be called.
+ * When you finish exchanging data, you should disconnect connection
+ * with #bt_socket_disconnect_rfcomm() and unregister callback functions (with using
+ * #bt_socket_unset_data_received_cb(), #bt_socket_unset_connection_state_changed_cb()).
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE_FEATURE Related Features
+ * This API is related with the following features:\n
+ * - http://tizen.org/feature/network.bluetooth\n
+ *
+ * It is recommended to design feature related codes in your application for reliability.\n
+ *
+ * You can check if a device supports the related features for this API by using @ref CAPI_SYSTEM_SYSTEM_INFO_MODULE,thereby controlling the procedure of your application.\n
+ *
+ * To ensure your application is only running on the device with specific features, please define the features in your manifest file using the manifest editor in the SDK.\n
+ *
+ * More details on featuring your application can be found from <a href="../org.tizen.mobile.native.appprogramming/html/ide_sdk_tools/feature_element.htm"><b>Feature Element</b>.</a>
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE_ASYNCHRONOUS_OPERATIONS Asynchronous Operations
+ * <div><table class="doxtable" >
+ * <tr>
+ * <th><b>FUNCTION</b></th>
+ * <th><b>CALLBACK</b></th>
+ * <th><b>DESCRIPTION</b></th>
+ * </tr>
+ * <tr>
+ * <td>bt_socket_listen_and_accept_rfcomm()<br>
+ * bt_socket_connect_rfcomm()</td>
+ * <td>bt_socket_connection_state_changed_cb()</td>
+ * <td>Used to connect a device. </td>
+ * </tr>
+ *</table></div>
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE_CALLBACK_OPERATIONS Callback(Event) Operations
+ * <div><table class="doxtable" >
+ * <tr>
+ * <th><b>REGISTER</b></th>
+ * <th><b>UNREGISTER</b></th>
+ * <th><b>CALLBACK</b></th>
+ * <th><b>DESCRIPTION</b></th>
+ * </tr>
+ * <tr>
+ * <td>bt_socket_set_data_received_cb()</td>
+ * <td>bt_socket_unset_data_received_cb()</td>
+ * <td>bt_socket_data_received_cb()</td>
+ * <td>Used to be notified of received data. </td>
+ * </tr>
+ * <tr>
+ * <td>bt_socket_set_connection_state_changed_cb()</td>
+ * <td>bt_socket_unset_connection_state_changed_cb()</td>
+ * <td>bt_socket_connection_state_changed_cb()</td>
+ * <td>Used to be notified when the state of connection changes. </td>
+ * </tr>
+ *</table></div>
+ *
+ *<BR>
+ * Please refer Bluetooth Tutorial if you want to get more detailed usages and information of this api.
+ */
+
+
+/**
+ * @defgroup CAPI_NETWORK_BLUETOOTH_OPP_MODULE Bluetooth OPP
+ * @brief Bluetooth OPP(Object Push Profile) API provides functions for exchanging objects such as pictures.
+ * @ingroup CAPI_NETWORK_BLUETOOTH_MODULE
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_OPP_MODULE_HEADER Required Header
+ * \#include <bluetooth.h>
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_OPP_MODULE_OVERVIEW Overview
+ * OPP profile let users exchange objects between two devices.
+ *
+ */
+
+/**
+ * @defgroup CAPI_NETWORK_BLUETOOTH_OPP_SERVER_MODULE Bluetooth OPP Server
+ * @brief Bluetooth OPP(Object Push Profile) Server API provides functions for accepting objects such as pictures.
+ * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_MODULE
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_OPP_SERVER_MODULE_HEADER Required Header
+ * \#include <bluetooth.h>
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_OPP_SERVER_MODULE_OVERVIEW Overview
+ * This is OPP server APIs.
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_OPP_SERVER_MODULE_FEATURE Related Features
+ * This API is related with the following features:\n
+ * - http://tizen.org/feature/network.bluetooth.opp\n
+ *
+ * It is recommended to design feature related codes in your application for reliability.\n
+ *
+ * You can check if a device supports the related features for this API by using @ref CAPI_SYSTEM_SYSTEM_INFO_MODULE,thereby controlling the procedure of your application.\n
+ *
+ * To ensure your application is only running on the device with specific features, please define the features in your manifest file using the manifest editor in the SDK.\n
+ *
+ * More details on featuring your application can be found from <a href="../org.tizen.mobile.native.appprogramming/html/ide_sdk_tools/feature_element.htm"><b>Feature Element</b>.</a>
+ *
+ */
+
+/**
+ * @defgroup CAPI_NETWORK_BLUETOOTH_OPP_CLIENT_MODULE Bluetooth OPP Client
+ * @brief Bluetooth OPP(Object Push Profile) Client API provides functions for pushing objects such as pictures.
+ * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_MODULE
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_OPP_CLIENT_MODULE_HEADER Required Header
+ * \#include <bluetooth.h>
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_OPP_CLIENT_MODULE_OVERVIEW Overview
+ * This is OPP Client APIs.
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_OPP_CLIENT_MODULE_FEATURE Related Features
+ * This API is related with the following features:\n
+ * - http://tizen.org/feature/network.bluetooth.opp\n
+ *
+ * It is recommended to design feature related codes in your application for reliability.\n
+ *
+ * You can check if a device supports the related features for this API by using @ref CAPI_SYSTEM_SYSTEM_INFO_MODULE,thereby controlling the procedure of your application.\n
+ *
+ * To ensure your application is only running on the device with specific features, please define the features in your manifest file using the manifest editor in the SDK.\n
+ *
+ * More details on featuring your application can be found from <a href="../org.tizen.mobile.native.appprogramming/html/ide_sdk_tools/feature_element.htm"><b>Feature Element</b>.</a>
+ *
+ */
+
+/**
+ * @internal
+ * @defgroup CAPI_NETWORK_BLUETOOTH_PAN_MODULE Bluetooth PAN
+ * @brief Bluetooth PAN(Personal Area Networking) API provides functions for connecting to a higher level network and the Internet.
+ * @ingroup CAPI_NETWORK_BLUETOOTH_MODULE
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_PAN_MODULE_OVERVIEW Overview
+ * The PAN Profile describe how two or more Bluetooth enabled devices can form an ad-hoc network and how the same mechanism can be
+ * used to access a remote network through a network access point. But this API only supports network access point service.
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_PAN_MODULE_FEATURE Related Features
+ * This API is related with the following features:\n
+ * - http://tizen.org/feature/network.tethering.bluetooth\n
+ *
+ * It is recommended to design feature related codes in your application for reliability.\n
+ *
+ * You can check if a device supports the related features for this API by using @ref CAPI_SYSTEM_SYSTEM_INFO_MODULE,thereby controlling the procedure of your application.\n
+ *
+ * To ensure your application is only running on the device with specific features, please define the features in your manifest file using the manifest editor in the SDK.\n
+ *
+ * More details on featuring your application can be found from <a href="../org.tizen.mobile.native.appprogramming/html/ide_sdk_tools/feature_element.htm"><b>Feature Element</b>.</a>
+ *
+ */
+
+/**
+ * @internal
+ * @defgroup CAPI_NETWORK_BLUETOOTH_PAN_NAP_MODULE Bluetooth NAP
+ * @brief Bluetooth NAP(Network Access Point) API provides functions for an Ethernet bridge to support network services.
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PAN_MODULE
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_PAN_NAP_MODULE_HEADER Required Header
+ * \#include <bluetooth.h>
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_PAN_NAP_MODULE_OVERVIEW Overview
+ * A Bluetooth device that supports the NAP service is a Bluetooth device that provides some of the features of an Ethernet bridge to support network services.
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_PAN_NAP_MODULE_FEATURE Related Features
+ * This API is related with the following features:\n
+ * - http://tizen.org/feature/network.tethering.bluetooth\n
+ *
+ * It is recommended to design feature related codes in your application for reliability.\n
+ *
+ * You can check if a device supports the related features for this API by using @ref CAPI_SYSTEM_SYSTEM_INFO_MODULE, thereby controlling the procedure of your application.\n
+ *
+ * To ensure your application is only running on the device with specific features, please define the features in your manifest file using the manifest editor in the SDK.\n
+ *
+ * More details on featuring your application can be found from <a href="../org.tizen.mobile.native.appprogramming/html/ide_sdk_tools/feature_element.htm"><b>Feature Element</b>.</a>
+ *
+ */
+
+/**
+ * @internal
+ * @defgroup CAPI_NETWORK_BLUETOOTH_PAN_PANU_MODULE Bluetooth PANU
+ * @brief Bluetooth PANU(Personal Area Networking User) API provides functions for client of both the NAP(Network Access Point).
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PAN_MODULE
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_PAN_PANU_MODULE_HEADER Required Header
+ * \#include <bluetooth.h>
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_PAN_PANU_MODULE_OVERVIEW Overview
+ * In PAN Profile, PANU can uses either the NAP or GN service, but this API only supports NAP service.
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_PAN_PANU_MODULE_FEATURE Related Features
+ * This API is related with the following features:\n
+ * - http://tizen.org/feature/network.tethering.bluetooth\n
+ *
+ * It is recommended to design feature related codes in your application for reliability.\n
+ *
+ * You can check if a device supports the related features for this API by using @ref CAPI_SYSTEM_SYSTEM_INFO_MODULE, thereby controlling the procedure of your application.\n
+ *
+ * To ensure your application is only running on the device with specific features, please define the features in your manifest file using the manifest editor in the SDK.\n
+ *
+ * More details on featuring your application can be found from <a href="../org.tizen.mobile.native.appprogramming/html/ide_sdk_tools/feature_element.htm"><b>Feature Element</b>.</a>
+ *
+ */
+
+/**
+ * @defgroup CAPI_NETWORK_BLUETOOTH_HID_MODULE Bluetooth HID
+ * @brief Bluetooth HID(Human Interface Device) API provides functions for connecting to Bluetooth HID such as keyboards and mouse.
+ * @ingroup CAPI_NETWORK_BLUETOOTH_MODULE
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_HID_MODULE_HEADER Required Header
+ * \#include <bluetooth.h>
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_HID_MODULE_OVERVIEW Overview
+ * In HID Profile, there are two roles - @a Host and @a Device.
+ * The @a Host is a device that uses or requests the services of a HID. The @a Device is a device that provides the service of human data input and output to and from the @a Host.
+ * This API only supports @a Host role.
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_HID_MODULE_FEATURE Related Features
+ * This API is related with the following features:\n
+ * - http://tizen.org/feature/network.bluetooth.hid\n
+ *
+ * It is recommended to design feature related codes in your application for reliability.\n
+ *
+ * You can check if a device supports the related features for this API by using @ref CAPI_SYSTEM_SYSTEM_INFO_MODULE, thereby controlling the procedure of your application.\n
+ *
+ * To ensure your application is only running on the device with specific features, please define the features in your manifest file using the manifest editor in the SDK.\n
+ *
+ * More details on featuring your application can be found from <a href="../org.tizen.mobile.native.appprogramming/html/ide_sdk_tools/feature_element.htm"><b>Feature Element</b>.</a>
+ *
+ */
+
+/**
+ * @defgroup CAPI_NETWORK_BLUETOOTH_AUDIO_MODULE Bluetooth Audio
+ * @brief Bluetooth Audio API provides functions for connecting to Bluetooth audio devices such as headset, hand-free and headphone.
+ * @ingroup CAPI_NETWORK_BLUETOOTH_MODULE
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_AUDIO_MODULE_HEADER Required Header
+ * \#include <bluetooth.h>
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_AUDIO_MODULE_OVERVIEW Overview
+ * This API supports the HFP(Hands-Free Profile), HSP(Headset Profile) and A2DP(Advanced Audio Distribution Profile).
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_AUDIO_MODULE_FEATURE Related Features
+ * This API is related with the following features:\n
+ * - http://tizen.org/feature/network.bluetooth.audio.call\n
+ * - http://tizen.org/feature/network.bluetooth.audio.media\n
+ *
+ * It is recommended to design feature related codes in your application for reliability.\n
+ *
+ * You can check if a device supports the related features for this API by using @ref CAPI_SYSTEM_SYSTEM_INFO_MODULE, thereby controlling the procedure of your application.\n
+ *
+ * To ensure your application is only running on the device with specific features, please define the features in your manifest file using the manifest editor in the SDK.\n
+ *
+ * More details on featuring your application can be found from <a href="../org.tizen.mobile.native.appprogramming/html/ide_sdk_tools/feature_element.htm"><b>Feature Element</b>.</a>
+ *
+ */
+
+/**
+ * @internal
+ * @defgroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE Bluetooth AG
+ * @brief Bluetooth AG(Audio Gateway) API provides functions for controling the remote audio device.
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_MODULE
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE_HEADER Required Header
+ * \#include <bluetooth.h>
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE_OVERVIEW Overview
+ * This API supports the @a Audio @a Gateway role in HSP and HFP.
+ * Audio Gateway is the devie that is the gateway of the audio, both for input and output, typically a mobile phone or PC.
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE_FEATURE Related Features
+ * This API is related with the following features:\n
+ * - http://tizen.org/feature/network.bluetooth.audio.call\n
+ * - http://tizen.org/feature/network.bluetooth.audio.media\n
+ *
+ * It is recommended to design feature related codes in your application for reliability.\n
+ *
+ * You can check if a device supports the related features for this API by using @ref CAPI_SYSTEM_SYSTEM_INFO_MODULE, thereby controlling the procedure of your application.\n
+ *
+ * To ensure your application is only running on the device with specific features, please define the features in your manifest file using the manifest editor in the SDK.\n
+ *
+ * More details on featuring your application can be found from <a href="../org.tizen.mobile.native.appprogramming/html/ide_sdk_tools/feature_element.htm"><b>Feature Element</b>.</a>
+ *
+ */
+
+/**
+ * @internal
+ * @defgroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_CALL_MODULE Call List
+ * @brief Bluetooth AG(Audio Gateway) API provides functions for managing the handler of call list.
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_AUDIO_AG_CALL_MODULE_HEADER Required Header
+ * \#include <bluetooth.h>
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_AUDIO_AG_CALL_OVERVIEW Overview
+ * This set of functions is used for managing the handler of call list.
+ * This handler is used for notifying the call list to the remote bluetooth device which supports HFP(Hands-Free Profile).
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_AUDIO_AG_CALL_MODULE_FEATURE Related Features
+ * This API is related with the following features:\n
+ * - http://tizen.org/feature/network.bluetooth.audio.call\n
+ * - http://tizen.org/feature/network.bluetooth.audio.media\n
+ *
+ * It is recommended to design feature related codes in your application for reliability.\n
+ *
+ * You can check if a device supports the related features for this API by using @ref CAPI_SYSTEM_SYSTEM_INFO_MODULE, thereby controlling the procedure of your application.\n
+ *
+ * To ensure your application is only running on the device with specific features, please define the features in your manifest file using the manifest editor in the SDK.\n
+ *
+ * More details on featuring your application can be found from <a href="../org.tizen.mobile.native.appprogramming/html/ide_sdk_tools/feature_element.htm"><b>Feature Element</b>.</a>
+ *
+ */
+
+/**
+ * @internal
+ * @defgroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE Bluetooth AVRCP
+ * @brief Bluetooth AVRCP(Audio/Video Remote Control Profile) API provides functions for notifying the change of target device to the control device.
+ * @ingroup CAPI_NETWORK_BLUETOOTH_MODULE
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE_HEADER Required Header
+ * \#include <bluetooth.h>
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE_OVERVIEW Overview
+ * This API supports the @a Target role in AVRCP spec.
+ * The @a Target is the device whose characteristics are being altered.
+ * In a "walkman" type media player scenario, the @a Control device may be a headset that allows tracks to be skipped and the @a Target device would be the actual medial player.
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_AVRCP__MODULE_FEATURE Related Features
+ * This API is related with the following features:\n
+ * - http://tizen.org/feature/network.bluetooth.audio.media\n
+ *
+ * It is recommended to design feature related codes in your application for reliability.\n
+ *
+ * You can check if a device supports the related features for this API by using @ref CAPI_SYSTEM_SYSTEM_INFO_MODULE, thereby controlling the procedure of your application.\n
+ *
+ * To ensure your application is only running on the device with specific features, please define the features in your manifest file using the manifest editor in the SDK.\n
+ *
+ * More details on featuring your application can be found from <a href="../org.tizen.mobile.native.appprogramming/html/ide_sdk_tools/feature_element.htm"><b>Feature Element</b>.</a>
+ *
+ */
+
+/**
+ * @defgroup CAPI_NETWORK_BLUETOOTH_HDP_MODULE Bluetooth HDP
+ * @brief Bluetooth HDP(Health Device Profile) API provides functions for managing connections to health devices and exchanging data.
+ * @ingroup CAPI_NETWORK_BLUETOOTH_MODULE
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_HDP_MODULE_HEADER Required Header
+ * \#include <bluetooth.h>
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_HDP_MODULE_OVERVIEW Overview
+ * The @a Source is a transmitter of application data that is to be transferred to a @a Sink. The @a Sink is a receiver of application data delivered from a @a Source.
+ * This API supports the @a Sink role in HDP spec.
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_HDP_MODULE_FEATURE Related Features
+ * This API is related with the following features:\n
+ * - http://tizen.org/feature/network.bluetooth.health\n
+ *
+ * It is recommended to design feature related codes in your application for reliability.\n
+ *
+ * You can check if a device supports the related features for this API by using @ref CAPI_SYSTEM_SYSTEM_INFO_MODULE, thereby controlling the procedure of your application.\n
+ *
+ * To ensure your application is only running on the device with specific features, please define the features in your manifest file using the manifest editor in the SDK.\n
+ *
+ * More details on featuring your application can be found from <a href="../org.tizen.mobile.native.appprogramming/html/ide_sdk_tools/feature_element.htm"><b>Feature Element</b>.</a>
+ *
+ */
+
+/**
+ * @defgroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE Bluetooth GATT
+ * @brief Bluetooth GATT(Generic Attribute Profile) API provides functions for discovering, reading and modifying attributes.
+ * @ingroup CAPI_NETWORK_BLUETOOTH_MODULE
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_GATT_MODULE_HEADER Required Header
+ * \#include <bluetooth.h>
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_GATT_MODULE_OVERVIEW Overview
+ * Two roles are defined for devices that implement GATT.
+ * The @a Server is the device that accepts incoming commands and requests from the client and sends responses, indications and notifications to a client.
+ * The @a Client is the device that initiates commands and requests towards the server and can receive responses, indications and notifications sent by the server.
+ * This API supports the @a Client role in GATT. \n
+ * Bluetooth stack architecture has been changed. Thus, GATT APIs defined in Tizen 2.3 are deprecated and new GATT client APIs are defined.
+ *
+ * @section CAPI_NETWORK_BLUETOOTH_GATT_MODULE_FEATURE Related Features
+ * This API is related with the following features:\n
+ * - http://tizen.org/feature/network.bluetooth.le\n
+ *
+ * It is recommended to design feature related codes in your application for reliability.\n
+ *
+ * You can check if a device supports the related features for this API by using @ref CAPI_SYSTEM_SYSTEM_INFO_MODULE, thereby controlling the procedure of your application.\n
+ *
+ * To ensure your application is only running on the device with specific features, please define the features in your manifest file using the manifest editor in the SDK.\n
+ *
+ * More details on featuring your application can be found from <a href="../org.tizen.mobile.native.appprogramming/html/ide_sdk_tools/feature_element.htm"><b>Feature Element</b>.</a>
+ *
+ */
+
+#endif /* __TIZEN_NETWORK_BLUETOOTH_DOC_H__ */
diff --git a/include/bluetooth.h b/include/bluetooth.h
deleted file mode 100644
index 3a419b9..0000000
--- a/include/bluetooth.h
+++ /dev/null
@@ -1,2917 +0,0 @@
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-#ifndef __TIZEN_NETWORK_BLUETOOTH_H__
-#define __TIZEN_NETWORK_BLUETOOTH_H__
-
-#include <stdlib.h>
-#include <unistd.h>
-#include <stdbool.h>
-#include <tizen_error.h>
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-/**
- * @file bluetooth.h
- * @brief API to control the Bluetooth adapter and devices and communications.
- * @ingroup CAPI_NETWORK_BLUETOOTH_MODULE
- */
-
-
-/**
- * @addtogroup CAPI_NETWORK_BLUETOOTH_MODULE
- * @{
- */
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
- * @brief Enumerations of connected Bluetooth device event role.
- */
-typedef enum
-{
- BT_SOCKET_UNKNOWN = 0x00, /**< Unknown role*/
- BT_SOCKET_SERVER , /**< Server role*/
- BT_SOCKET_CLIENT, /**< Client role*/
-} bt_socket_role_e;
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_MODULE
- * @brief Enumerations of Bluetooth error codes.
- */
-typedef enum
-{
- BT_ERROR_NONE = TIZEN_ERROR_NONE, /**< Successful*/
- BT_ERROR_CANCELLED = TIZEN_ERROR_CANCELED, /**< Operation cancelled */
- BT_ERROR_INVALID_PARAMETER = TIZEN_ERROR_INVALID_PARAMETER, /**< Invalid parameter */
- BT_ERROR_OUT_OF_MEMORY = TIZEN_ERROR_OUT_OF_MEMORY, /**< Out of memory */
- BT_ERROR_RESOURCE_BUSY = TIZEN_ERROR_RESOURCE_BUSY, /**< Device or resource busy */
- BT_ERROR_TIMED_OUT = TIZEN_ERROR_TIMED_OUT, /**< Timeout error */
- BT_ERROR_NOW_IN_PROGRESS = TIZEN_ERROR_NOW_IN_PROGRESS, /**< Operation now in progress */
- BT_ERROR_NOT_INITIALIZED = TIZEN_ERROR_NETWORK_CLASS|0x0101, /**< Local adapter not initialized */
- BT_ERROR_NOT_ENABLED = TIZEN_ERROR_NETWORK_CLASS|0x0102, /**< Local adapter not enabled */
- BT_ERROR_ALREADY_DONE = TIZEN_ERROR_NETWORK_CLASS|0x0103, /**< Operation already done */
- BT_ERROR_OPERATION_FAILED = TIZEN_ERROR_NETWORK_CLASS|0x0104, /**< Operation failed */
- BT_ERROR_NOT_IN_PROGRESS = TIZEN_ERROR_NETWORK_CLASS|0x0105, /**< Operation not in progress */
- BT_ERROR_REMOTE_DEVICE_NOT_BONDED = TIZEN_ERROR_NETWORK_CLASS|0x0106, /**< Remote device not bonded */
- BT_ERROR_AUTH_REJECTED = TIZEN_ERROR_NETWORK_CLASS|0x0107, /**< Authentication rejected */
- BT_ERROR_AUTH_FAILED = TIZEN_ERROR_NETWORK_CLASS|0x0108, /**< Authentication failed */
- BT_ERROR_REMOTE_DEVICE_NOT_FOUND = TIZEN_ERROR_NETWORK_CLASS|0x0109, /**< Remote device not found */
- BT_ERROR_SERVICE_SEARCH_FAILED = TIZEN_ERROR_NETWORK_CLASS|0x010A, /**< Service search failed */
- BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED = TIZEN_ERROR_NETWORK_CLASS|0x010B, /**< Remote device is not connected */
-} bt_error_e;
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
- * @brief Enumerations of the Bluetooth adapter state.
- */
-typedef enum
-{
- BT_ADAPTER_DISABLED = 0x00, /**< Bluetooth adapter is disabled */
- BT_ADAPTER_ENABLED, /**< Bluetooth adapter is enabled */
-} bt_adapter_state_e;
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
- * @brief Enumerations of the Bluetooth visibility mode.
- */
-typedef enum
-{
- BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE = 0x00, /**< Other devices cannot find your device via discovery */
- BT_ADAPTER_VISIBILITY_MODE_GENERAL_DISCOVERABLE, /**< Discoverable mode */
- BT_ADAPTER_VISIBILITY_MODE_LIMITED_DISCOVERABLE, /**< Discoverable mode with time limit. After specific period,
- it is changed to #BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE.*/
-} bt_adapter_visibility_mode_e;
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
- * @brief Enumerations of the discovery state of Bluetooth device.
- *
- */
-typedef enum
-{
- BT_ADAPTER_DEVICE_DISCOVERY_STARTED, /**< Device discovery is started */
- BT_ADAPTER_DEVICE_DISCOVERY_FINISHED, /**< Device discovery is finished */
- BT_ADAPTER_DEVICE_DISCOVERY_FOUND, /**< The remote Bluetooth device is found */
-} bt_adapter_device_discovery_state_e;
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
- * @brief Enumerations of device authorization state.
- */
-typedef enum
-{
- BT_DEVICE_AUTHORIZED, /**< The remote Bluetooth device is authorized */
- BT_DEVICE_UNAUTHORIZED, /**< The remote Bluetooth device is unauthorized */
-} bt_device_authorization_e;
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
- * @brief Enumerations of Bluetooth socket connection state.
- */
-typedef enum
-{
- BT_SOCKET_CONNECTED, /**< RFCOMM is connected */
- BT_SOCKET_DISCONNECTED, /**< RFCOMM is disconnected */
-} bt_socket_connection_state_e;
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
- * @brief Enumerations of major service class.
- */
-typedef enum
-{
- BT_MAJOR_SERVICE_CLASS_LIMITED_DISCOVERABLE_MODE = 0x002000, /**< Limited discoverable mode */
- BT_MAJOR_SERVICE_CLASS_POSITIONING = 0x010000, /**< Positioning class */
- BT_MAJOR_SERVICE_CLASS_NETWORKING = 0x020000, /**< Networking class */
- BT_MAJOR_SERVICE_CLASS_RENDERING = 0x040000, /**< Rendering class */
- BT_MAJOR_SERVICE_CLASS_CAPTURING = 0x080000, /**< Capturing class */
- BT_MAJOR_SERVICE_CLASS_OBJECT_TRANSFER = 0x100000, /**< Object transferring class */
- BT_MAJOR_SERVICE_CLASS_AUDIO = 0x200000, /**< Audio class*/
- BT_MAJOR_SERVICE_CLASS_TELEPHONY = 0x400000, /**< Telephony class */
- BT_MAJOR_SERVICE_CLASS_INFORMATION = 0x800000, /**< Information class */
-} bt_major_service_class_e;
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
- * @brief Enumerations of major device class.
- */
-typedef enum
-{
- BT_MAJOR_DEVICE_CLASS_MISC = 0x00, /**< Miscellaneous major device class*/
- BT_MAJOR_DEVICE_CLASS_COMPUTER = 0x01, /**< Computer major device class */
- BT_MAJOR_DEVICE_CLASS_PHONE = 0x02, /**< Phone major device class */
- BT_MAJOR_DEVICE_CLASS_LAN_NETWORK_ACCESS_POINT = 0x03, /**< LAN/Network access point major device class */
- BT_MAJOR_DEVICE_CLASS_AUDIO_VIDEO = 0x04, /**< Audio/Video major device class */
- BT_MAJOR_DEVICE_CLASS_PERIPHERAL = 0x05, /**< Peripheral major device class */
- BT_MAJOR_DEVICE_CLASS_IMAGING = 0x06, /**< Imaging major device class */
- BT_MAJOR_DEVICE_CLASS_WEARABLE = 0x07, /**< Wearable device class */
- BT_MAJOR_DEVICE_CLASS_TOY = 0x08, /**< Toy device class */
- BT_MAJOR_DEVICE_CLASS_HEALTH = 0x09, /**< Health device class */
- BT_MAJOR_DEVICE_CLASS_UNCATEGORIZED = 0x1F, /**< Uncategorized major device class */
-} bt_major_device_class_e;
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
- * @brief Enumerations of minor device class.
- */
-typedef enum
-{
- BT_MINOR_DEVICE_CLASS_COMPUTER_UNCATEGORIZED = 0x00, /**< Uncategorized minor device class of computer */
- BT_MINOR_DEVICE_CLASS_COMPUTER_DESKTOP_WORKSTATION = 0x04, /**< Desktop workstation minor device class of computer */
- BT_MINOR_DEVICE_CLASS_COMPUTER_SERVER_CLASS = 0x08, /**< Server minor device class of computer */
- BT_MINOR_DEVICE_CLASS_COMPUTER_LAPTOP = 0x0C, /**< Laptop minor device class of computer */
- BT_MINOR_DEVICE_CLASS_COMPUTER_HANDHELD_PC_OR_PDA = 0x10, /**< Handheld PC/PDA minor device class of computer */
- BT_MINOR_DEVICE_CLASS_COMPUTER_PALM_SIZED_PC_OR_PDA = 0x14, /**< Palm sized PC/PDA minor device class of computer */
- BT_MINOR_DEVICE_CLASS_COMPUTER_WEARABLE_COMPUTER = 0x18, /**< Wearable(watch sized) minor device class of computer */
-
- BT_MINOR_DEVICE_CLASS_PHONE_UNCATEGORIZED = 0x00, /**< Uncategorized minor device class of phone */
- BT_MINOR_DEVICE_CLASS_PHONE_CELLULAR = 0x04, /**< Cellular minor device class of phone */
- BT_MINOR_DEVICE_CLASS_PHONE_CORDLESS = 0x08, /**< Cordless minor device class of phone */
- BT_MINOR_DEVICE_CLASS_PHONE_SMART_PHONE = 0x0C, /**< Smart phone minor device class of phone */
- BT_MINOR_DEVICE_CLASS_PHONE_WIRED_MODEM_OR_VOICE_GATEWAY = 0x10, /**< Wired modem or voice gateway minor device class of phone */
- BT_MINOR_DEVICE_CLASS_PHONE_COMMON_ISDN_ACCESS = 0x14, /**< Common ISDN minor device class of phone */
-
- BT_MINOR_DEVICE_CLASS_LAN_NETWORK_ACCESS_POINT_FULLY_AVAILABLE = 0x04, /**< Fully available minor device class of LAN/Network access point */
- BT_MINOR_DEVICE_CLASS_LAN_NETWORK_ACCESS_POINT_1_TO_17_PERCENT_UTILIZED = 0x20, /**< 1-17% utilized minor device class of LAN/Network access point */
- BT_MINOR_DEVICE_CLASS_LAN_NETWORK_ACCESS_POINT_17_TO_33_PERCENT_UTILIZED = 0x40, /**< 17-33% utilized minor device class of LAN/Network access point */
- BT_MINOR_DEVICE_CLASS_LAN_NETWORK_ACCESS_POINT_33_TO_50_PERCENT_UTILIZED = 0x60, /**< 33-50% utilized minor device class of LAN/Network access point */
- BT_MINOR_DEVICE_CLASS_LAN_NETWORK_ACCESS_POINT_50_to_67_PERCENT_UTILIZED = 0x80, /**< 50-67% utilized minor device class of LAN/Network access point */
- BT_MINOR_DEVICE_CLASS_LAN_NETWORK_ACCESS_POINT_67_TO_83_PERCENT_UTILIZED = 0xA0, /**< 67-83% utilized minor device class of LAN/Network access point */
- BT_MINOR_DEVICE_CLASS_LAN_NETWORK_ACCESS_POINT_83_TO_99_PERCENT_UTILIZED = 0xC0, /**< 83-99% utilized minor device class of LAN/Network access point */
- BT_MINOR_DEVICE_CLASS_LAN_NETWORK_ACCESS_POINT_NO_SERVICE_AVAILABLE = 0xE0, /**< No service available minor device class of LAN/Network access point */
-
- BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_UNCATEGORIZED = 0x00, /**< Uncategorized minor device class of audio/video */
- BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_WEARABLE_HEADSET = 0x04, /**< Wearable headset minor device class of audio/video */
- BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_HANDS_FREE = 0x08, /**< Hands-free minor device class of audio/video */
- BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_MICROPHONE = 0x10, /**< Microphone minor device class of audio/video */
- BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_LOUDSPEAKER = 0x14, /**< Loudspeaker minor device class of audio/video */
- BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_HEADPHONES = 0x18, /**< Headphones minor device class of audio/video */
- BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_PORTABLE_AUDIO = 0x1C, /**< Portable audio minor device class of audio/video */
- BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_CAR_AUDIO = 0x20, /**< Car audio minor device class of audio/video */
- BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_SET_TOP_BOX = 0x24, /**< Set-top box minor device class of audio/video */
- BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_HIFI_AUDIO_DEVICE = 0x28, /**< Hifi audio minor device class of audio/video */
- BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_VCR = 0x2C, /**< VCR minor device class of audio/video */
- BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_VIDEO_CAMERA = 0x30, /**< Video camera minor device class of audio/video */
- BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_CAMCORDER = 0x34, /**< Camcorder minor device class of audio/video */
- BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_VIDEO_MONITOR = 0x38, /**< Video monitor minor device class of audio/video */
- BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_VIDEO_DISPLAY_LOUDSPEAKER = 0x3C, /**< Video display and loudspeaker minor device class of audio/video */
- BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_VIDEO_CONFERENCING = 0x40, /**< Video conferencing minor device class of audio/video */
- BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_GAMING_TOY = 0x48, /**< Gaming/toy minor device class of audio/video */
-
- BT_MINOR_DEVICE_CLASS_PERIPHERA_UNCATEGORIZED = 0x00, /**< Uncategorized minor device class of peripheral */
- BT_MINOR_DEVICE_CLASS_PERIPHERAL_KEY_BOARD = 0x40, /**< Key board minor device class of peripheral */
- BT_MINOR_DEVICE_CLASS_PERIPHERAL_POINTING_DEVICE = 0x80, /**< Pointing device minor device class of peripheral */
- BT_MINOR_DEVICE_CLASS_PERIPHERAL_COMBO_KEYBOARD_POINTING_DEVICE = 0xC0, /**< Combo keyboard or pointing device minor device class of peripheral */
- BT_MINOR_DEVICE_CLASS_PERIPHERAL_JOYSTICK = 0x04, /**< Joystick minor device class of peripheral */
- BT_MINOR_DEVICE_CLASS_PERIPHERAL_GAME_PAD = 0x08, /**< Game pad minor device class of peripheral */
- BT_MINOR_DEVICE_CLASS_PERIPHERAL_REMOTE_CONTROL = 0x0C, /**< Remote control minor device class of peripheral */
- BT_MINOR_DEVICE_CLASS_PERIPHERAL_SENSING_DEVICE = 0x10, /**< Sensing device minor device class of peripheral */
- BT_MINOR_DEVICE_CLASS_PERIPHERAL_DIGITIZER_TABLET = 0x14, /**< Digitizer minor device class of peripheral */
- BT_MINOR_DEVICE_CLASS_PERIPHERAL_CARD_READER = 0x18, /**< Card reader minor device class of peripheral */
- BT_MINOR_DEVICE_CLASS_PERIPHERAL_DIGITAL_PEN = 0x1C, /**< Digital pen minor device class of peripheral */
- BT_MINOR_DEVICE_CLASS_PERIPHERAL_HANDHELD_SCANNER = 0x20, /**< Handheld scanner minor device class of peripheral */
- BT_MINOR_DEVICE_CLASS_PERIPHERAL_HANDHELD_GESTURAL_INPUT_DEVICE = 0x24, /**< Handheld gestural input device minor device class of peripheral */
-
- BT_MINOR_DEVICE_CLASS_IMAGING_DISPLAY = 0x10, /**< Display minor device class of imaging */
- BT_MINOR_DEVICE_CLASS_IMAGING_CAMERA = 0x20, /**< Camera minor device class of imaging */
- BT_MINOR_DEVICE_CLASS_IMAGING_SCANNER = 0x40, /**< Scanner minor device class of imaging */
- BT_MINOR_DEVICE_CLASS_IMAGING_PRINTER = 0x80, /**< Printer minor device class of imaging */
-
- BT_MINOR_DEVICE_CLASS_WEARABLE_WRIST_WATCH = 0x04, /**< Wrist watch minor device class of wearable */
- BT_MINOR_DEVICE_CLASS_WEARABLE_PAGER = 0x08, /**< Pager minor device class of wearable */
- BT_MINOR_DEVICE_CLASS_WEARABLE_JACKET = 0x0C, /**< Jacket minor device class of wearable */
- BT_MINOR_DEVICE_CLASS_WEARABLE_HELMET = 0x10, /**< Helmet minor device class of wearable */
- BT_MINOR_DEVICE_CLASS_WEARABLE_GLASSES = 0x14, /**< Glasses minor device class of wearable */
-
- BT_MINOR_DEVICE_CLASS_TOY_ROBOT = 0x04, /**< Robot minor device class of toy */
- BT_MINOR_DEVICE_CLASS_TOY_VEHICLE = 0x08, /**< Vehicle minor device class of toy */
- BT_MINOR_DEVICE_CLASS_TOY_DOLL_ACTION = 0x0C, /**< Doll/Action minor device class of toy */
- BT_MINOR_DEVICE_CLASS_TOY_CONTROLLER = 0x10, /**< Controller minor device class of toy */
- BT_MINOR_DEVICE_CLASS_TOY_GAME = 0x14, /**< Game minor device class of toy */
-
- BT_MINOR_DEVICE_CLASS_HEATH_UNCATEGORIZED = 0x00, /**< Uncategorized minor device class of health */
- BT_MINOR_DEVICE_CLASS_HEATH_BLOOD_PRESSURE_MONITOR = 0x04, /**< Blood pressure monitor minor device class of health */
- BT_MINOR_DEVICE_CLASS_HEATH_THERMOMETER = 0x08, /**< Thermometer minor device class of health */
- BT_MINOR_DEVICE_CLASS_HEATH_WEIGHING_SCALE = 0x0C, /**< Weighing scale minor device class of health */
- BT_MINOR_DEVICE_CLASS_HEATH_GLUCOSE_METER = 0x10, /**< Glucose minor device class of health */
- BT_MINOR_DEVICE_CLASS_HEATH_PULSE_OXIMETER = 0x14, /**< Pulse oximeter minor device class of health */
- BT_MINOR_DEVICE_CLASS_HEATH_HEART_PULSE_RATE_MONITOR = 0x18, /**< Heart/Pulse rate monitor minor device class of health */
- BT_MINOR_DEVICE_CLASS_HEATH_DATA_DISPLAY = 0x1C, /**< Health data display minor device class of health */
- BT_MINOR_DEVICE_CLASS_HEATH_STEP_COUNTER = 0x20, /**< Step counter minor device class of health */
- BT_MINOR_DEVICE_CLASS_HEATH_BODY_COMPOSITION_ANALYZER = 0x24, /**< Body composition analyzer minor device class of health */
- BT_MINOR_DEVICE_CLASS_HEATH_PEAK_FLOW_MONITOR = 0x28, /**< Peak flow monitor minor device class of health */
- BT_MINOR_DEVICE_CLASS_HEATH_MEDICATION_MONITOR = 0x2C, /**< Medication monitor minor device class of health */
- BT_MINOR_DEVICE_CLASS_HEATH_KNEE_PROSTHESIS = 0x30, /**< Knee prosthesis minor device class of health */
- BT_MINOR_DEVICE_CLASS_HEATH_ANKLE_PROSTHESIS = 0x34, /**< Ankle prosthesis minor device class of health */
-} bt_minor_device_class_e;
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_PAN_PANU_MODULE
- * @brief Enumerations for the types of PAN(Personal Area Networking) service
- */
-typedef enum {
- BT_PANU_SERVICE_TYPE_NAP = 0, /**< Network Access Point */
-} bt_panu_service_type_e;
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_MODULE
- * @brief Enumerations for the types of profiles related with audio
- */
-typedef enum {
- BT_AUDIO_PROFILE_TYPE_ALL = 0, /**< All supported profiles related with audio */
- BT_AUDIO_PROFILE_TYPE_HSP_HFP, /**< HSP(Headset Profile) and HFP(Hands-Free Profile) */
- BT_AUDIO_PROFILE_TYPE_A2DP, /**< A2DP(Advanced Audio Distribution Profile) */
-} bt_audio_profile_type_e;
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
- * @brief Enumerations for the equalizer state
- */
-typedef enum {
- BT_AVRCP_EQUALIZER_STATE_OFF = 0x01, /**< Equalizer Off */
- BT_AVRCP_EQUALIZER_STATE_ON, /**< Equalizer On */
-} bt_avrcp_equalizer_state_e;
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
- * @brief Enumerations for the repeat mode
- */
-typedef enum {
- BT_AVRCP_REPEAT_MODE_OFF = 0x01, /**< Repeat Off */
- BT_AVRCP_REPEAT_MODE_SINGLE_TRACK, /**< Single track repeat */
- BT_AVRCP_REPEAT_MODE_ALL_TRACK, /**< All track repeat */
- BT_AVRCP_REPEAT_MODE_GROUP, /**< Group repeat */
-} bt_avrcp_repeat_mode_e;
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
- * @brief Enumerations for the shuffle mode
- */
-typedef enum {
- BT_AVRCP_SHUFFLE_MODE_OFF = 0x01, /**< Shuffle Off */
- BT_AVRCP_SHUFFLE_MODE_ALL_TRACK, /**< All tracks shuffle */
- BT_AVRCP_SHUFFLE_MODE_GROUP, /**< Group shuffle */
-} bt_avrcp_shuffle_mode_e;
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
- * @brief Enumerations for the scan mode
- */
-typedef enum {
- BT_AVRCP_SCAN_MODE_OFF = 0x01, /**< Scan Off */
- BT_AVRCP_SCAN_MODE_ALL_TRACK, /**< All tracks scan */
- BT_AVRCP_SCAN_MODE_GROUP, /**< Group scan */
-} bt_avrcp_scan_mode_e;
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
- * @brief Enumerations for the player state
- */
-typedef enum {
- BT_AVRCP_PLAYER_STATE_STOPPED = 0x00, /**< Stopped */
- BT_AVRCP_PLAYER_STATE_PLAYING, /**< Playing */
- BT_AVRCP_PLAYER_STATE_PAUSED, /**< Paused */
- BT_AVRCP_PLAYER_STATE_FORWARD_SEEK, /**< Seek Forward */
- BT_AVRCP_PLAYER_STATE_REWIND_SEEK, /**< Seek Rewind */
-} bt_avrcp_player_state_e;
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_HDP_MODULE
- * @brief Enumerations for the data channel type
- */
-typedef enum {
- BT_HDP_CHANNEL_TYPE_RELIABLE = 0x01, /**< Reliable Data Channel */
- BT_HDP_CHANNEL_TYPE_STREAMING, /**< Streaming Data Channel */
-} bt_hdp_channel_type_e;
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
- * @brief Class structure of device and service.
- *
- * @see #bt_device_info_s
- * @see #bt_adapter_device_discovery_info_s
- * @see bt_device_bond_created_cb()
- * @see bt_adapter_device_discovery_state_changed_cb()
- */
-typedef struct
-{
- bt_major_device_class_e major_device_class; /**< Major device class. */
- bt_minor_device_class_e minor_device_class; /**< Minor device class. */
- int major_service_class_mask; /**< Major service class mask.
- This value can be a combination of #bt_major_service_class_e like #BT_MAJOR_SERVICE_CLASS_RENDERING | #BT_MAJOR_SERVICE_CLASS_AUDIO */
-} bt_class_s;
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
- * @brief Structure of device discovery information.
- *
- * @see #bt_class_s
- * @see bt_adapter_device_discovery_state_changed_cb()
- */
-typedef struct
-{
- char *remote_address; /**< The address of remote device */
- char *remote_name; /**< The name of remote device */
- bt_class_s bt_class; /**< The Bluetooth classes */
- int rssi; /**< The strength indicator of received signal */
- bool is_bonded; /**< The bonding state */
- char **service_uuid; /**< The UUID list of service */
- int service_count; /**< The number of services */
-} bt_adapter_device_discovery_info_s;
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
- * @brief Device information structure used for identifying pear device.
- *
- * @see #bt_class_s
- * @see bt_device_bond_created_cb()
- */
-typedef struct
-{
- char *remote_address; /**< The address of remote device */
- char *remote_name; /**< The name of remote device */
- bt_class_s bt_class; /**< The Bluetooth classes */
- char **service_uuid; /**< The UUID list of service */
- int service_count; /**< The number of services */
- bool is_bonded; /**< The bonding state */
- bool is_connected; /**< The connection state */
- bool is_authorized; /**< The authorization state */
-} bt_device_info_s;
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
- * @brief Service Discovery Protocol (SDP) data structure.
- *
- * @details This protocol is used for discovering available services or pear device,
- * and finding one to connect with.
- *
- * @see bt_device_service_searched_cb()
- */
-typedef struct
-{
- char *remote_address; /**< The address of remote device */
- char **service_uuid; /**< The UUID list of service */
- int service_count; /**< The number of services. */
-} bt_device_sdp_info_s;
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
- *
- * @brief Rfcomm connection data used for exchanging data between Bluetooth devices.
- *
- * @see bt_socket_connection_state_changed_cb()
- */
-typedef struct
-{
- int socket_fd; /**< The file descriptor of connected socket */
- bt_socket_role_e local_role; /**< The local device role in this connection */
- char *remote_address; /**< The remote device address */
- char *service_uuid; /**< The service UUId */
-} bt_socket_connection_s;
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
- *
- * @brief Structure of RFCOMM received data.
- *
- * @remarks User can use standard linux functions for reading/writing
- * data from/to sockets.
- *
- * @see bt_socket_data_received_cb()
- */
-typedef struct
-{
- int socket_fd; /**< The socket fd */
- int data_size; /**< The length of the received data */
- char *data; /**< The received data */
-} bt_socket_received_data_s;
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
- * @brief Called when the Bluetooth adapter state changes.
- * @param[in] result The result of the adapter state changing
- * @param[in] adapter_state The adapter state to be changed
- * @param[in] user_data The user data passed from the callback registration function
- * @pre Either bt_adapter_enable() or bt_adapter_disable() will invoke this callback if you register this callback using bt_adapter_set_state_changed_cb().
- * @see bt_adapter_enable()
- * @see bt_adapter_disable()
- * @see bt_adapter_set_state_changed_cb()
- * @see bt_adapter_unset_state_changed_cb()
- */
-typedef void (*bt_adapter_state_changed_cb)(int result, bt_adapter_state_e adapter_state, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
- * @brief Called when adapter name changes.
- * @param[in] device_name The name of the Bluetooth device to be changed
- * @param[in] user_data The user data passed from the callback registration function
- * @pre This function will be invoked when the name of Bluetooth adapter changes
- * if you register this callback using bt_adapter_set_name_changed_cb().
- * @see bt_adapter_set_name()
- * @see bt_adapter_set_name_changed_cb()
- * @see bt_adapter_unset_name_changed_cb()
- */
-typedef void (*bt_adapter_name_changed_cb)(char *device_name, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
- * @brief Called when the visibility mode changes.
- * @param[in] result The result of the visibility mode changing
- * @param[in] visibility_mode The visibility mode to be changed
- * @param[in] user_data The user data passed from the callback registration function
- *
- * @pre This function will be invoked when the visibility of Bluetooth adapter changes
- * if you register this callback using bt_adapter_set_visibility_mode_changed_cb().
- *
- * @see bt_adapter_set_visibility()
- * @see bt_adapter_set_visibility_mode_changed_cb()
- * @see bt_adapter_unset_visibility_mode_changed_cb()
- */
-typedef void (*bt_adapter_visibility_mode_changed_cb)
- (int result, bt_adapter_visibility_mode_e visibility_mode, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
- * @brief Called when the state of device discovery changes.
- *
- * @remarks If \a discovery_state is #BT_ADAPTER_DEVICE_DISCOVERY_FOUND,
- * then you can get some information, such as remote device address, remote device name, rssi, and bonding state.
- *
- * @param[in] result The result of the device discovery
- * @param[in] discovery_state The discovery state to be changed
- * @param[in] device_info The information of the discovered device \n
- * If \a discovery_state is #BT_ADAPTER_DEVICE_DISCOVERY_STARTED or
- * #BT_ADAPTER_DEVICE_DISCOVERY_FINISHED, then \a device_info is NULL.
- * @param[in] user_data The user data passed from the callback registration function
- *
- * @pre Either bt_adapter_start_device_discovery() or bt_adapter_stop_device_discovery() will invoke this function
- * if you register this callback using bt_adapter_set_device_discovery_state_changed_cb().
- *
- * @see bt_adapter_start_device_discovery()
- * @see bt_adapter_stop_device_discovery()
- * @see bt_adapter_set_device_discovery_state_changed_cb()
- * @see bt_adapter_unset_device_discovery_state_changed_cb()
- *
- */
-typedef void (*bt_adapter_device_discovery_state_changed_cb)
- (int result, bt_adapter_device_discovery_state_e discovery_state, bt_adapter_device_discovery_info_s *discovery_info, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
- * @brief Called when you get bonded devices repeatedly.
- *
- * @param[in] device_info The bonded device information
- * @param[in] user_data The user data passed from the foreach function
- * @return @c true to continue with the next iteration of the loop,
- * \n @c false to break out of the loop.
- * @pre bt_adapter_foreach_bonded_device() will invoke this function.
- *
- * @see bt_adapter_foreach_bonded_device()
- *
- */
-typedef bool (*bt_adapter_bonded_device_cb)(bt_device_info_s *device_info, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
- * @brief Called when the process of creating bond finishes.
- * @remarks If the remote user does not respond within 60 seconds, a time out will happen with #BT_ERROR_TIMED_OUT result code.\n
- * If bt_device_cancel_bonding() is called and it returns #BT_ERROR_NONE, then this callback function will be called
- * with #BT_ERROR_CANCELLED result. \n
- * If creating a bond succeeds but service search fails, then this callback will be called with #BT_ERROR_SERVICE_SEARCH_FAILED.
- * In this case, you should try service search again by bt_device_start_service_search() to get the supported service list.
- *
- * @param[in] result The result of the bonding device
- * @param[in] device_info The device information which you creates bond with
- * @param[in] user_data The user data passed from the callback registration function
- *
- * @pre Either bt_device_create_bond() will invoke this function
- * if you register this callback using bt_device_set_bond_created_cb().
- *
- * @see bt_device_create_bond()
- * @see bt_device_cancel_bonding()
- * @see bt_device_set_bond_created_cb()
- * @see bt_device_unset_bond_created_cb()
- */
-typedef void (*bt_device_bond_created_cb)(int result, bt_device_info_s *device_info, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
- * @brief Called when the bond destroys.
- * @param[in] result The result that a bond is destroyed
- * @param[in] remote_address The address of the remote Bluetooth device to destroy bond with
- * @param[in] user_data The user data passed from the callback registration function
- * @pre bt_device_destroy_bond() will invoke this function
- * if you register this callback using bt_device_set_bond_destroyed_cb().
- *
- * @see bt_device_destroy_bond()
- * @see bt_device_set_bond_destroyed_cb()
- * @see bt_device_unset_bond_destroyed_cb()
- */
-typedef void (*bt_device_bond_destroyed_cb)(int result, char *remote_address, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
- * @brief Called when the authorization of device changes.
- * @param[in] authorization The authorization of device
- * @param[in] remote_address The address of the remote Bluetooth device which is (un)authorized
- * @param[in] user_data The user data passed from the callback registration function
- * @pre bt_device_set_authorization() will invoke this function if you register this callback using bt_device_set_authorization_changed_cb().
- *
- * @see bt_device_set_authorization()
- * @see #bt_device_set_authorization_changed_cb()
- * @see #bt_device_unset_authorization_changed_cb()
- */
-typedef void (*bt_device_authorization_changed_cb)
- (bt_device_authorization_e authorization, char *remote_address, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
- * @brief Called when the process of service search finishes.
- * @remark If bt_device_cancel_service_search() is called and it returns #BT_ERROR_NONE,
- * then this callback function will be called with #BT_ERROR_CANCELLED result.
- *
- * @param[in] result The result of the service searching
- * @param[in] sdp_info The structure of service lists found on a device
- * @param[in] user_data The user data passed from the callback registration function
- * @pre Either bt_device_start_service_search() will invoke this function
- * if you register this callback using bt_device_set_service_searched_cb().
- *
- * @see bt_device_start_service_search()
- * @see bt_device_cancel_service_search()
- * @see bt_device_set_service_searched_cb()
- * @see bt_device_unset_service_searched_cb()
- *
- */
-typedef void (*bt_device_service_searched_cb)(int result, bt_device_sdp_info_s *sdp_info, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
- * @brief Called when you receive data.
- *
- * @param[in] data The received data from the remote device
- * @param[in] user_data The user data passed from the callback registration function
- *
- * @pre When the connected remote Bluetooth device invokes bt_socket_send_data(),
- * this function will be invoked if you register this function using bt_socket_set_data_received_cb().
- *
- * @see bt_socket_set_data_received_cb()
- * @see bt_socket_unset_data_received_cb()
- * @see bt_socket_send_data()
- */
-typedef void (*bt_socket_data_received_cb)(bt_socket_received_data_s *data, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
- * @brief Called when the socket connection state changes.
- * @remarks This function won't be invoked when you call bt_socket_disconnect_rfcomm(), which is synchronous function.
- *
- * @param[in] result The result of connection state changing
- * @param[in] connection_state The connection state
- * @param[in] connection The connection information which is established or disconnected
- * @param[in] user_data The user data passed from the callback registration function
- * @pre Either bt_socket_listen_and_accept_rfcomm() or bt_socket_connect_rfcomm() will invoke this function
- * if you register this callback using bt_socket_set_connection_state_changed_cb(). \n
- * If the remote Bluetooth device is connected when bt_socket_destroy_rfcomm() is called, then bt_socket_connection_state_changed_cb() will be invoked.
- *
- * @see bt_socket_listen_and_accept_rfcomm()
- * @see bt_socket_connect_rfcomm()
- * @see bt_socket_set_connection_state_changed_cb()
- * @see bt_socket_unset_connection_state_changed_cb()
- */
-typedef void (*bt_socket_connection_state_changed_cb)
- (int result, bt_socket_connection_state_e connection_state, bt_socket_connection_s *connection, void *user_data);
-
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_MODULE
- * @brief Initializes the Bluetooth API.
- *
- * @remarks This function must be called before Bluetooth API starts. \n
- * You must free all resources of the Bluetooth service by calling bt_deinitialize() if Bluetooth service is no longer needed.
- *
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- *
- * @see bt_deinitialize()
- */
-int bt_initialize(void);
-
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_MODULE
- * @brief Releases all resources of the Bluetooth API.
- *
- * @remarks This function must be called if Bluetooth API is no longer needed.
- *
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- *
- * @pre Bluetooth API must be initialized with bt_initialize().
- *
- * @see bt_initialize()
- */
-int bt_deinitialize(void);
-
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
- * @brief Enables the local Bluetooth adapter, asynchronously.
- *
- * @details This function enables Bluetooth protocol stack and hardware.
- *
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_ALREADY_DONE Already enabled
- * @retval #BT_ERROR_NOW_IN_PROGRESS Operation now in progress
- *
- * @pre Bluetooth service must be initialized with bt_initialize().
- * @post This function invokes bt_adapter_state_changed_cb().
- *
- * @see bt_initialize()
- * @see bt_adapter_get_state()
- * @see bt_adapter_disable()
- * @see bt_adapter_set_state_changed_cb()
- * @see bt_adapter_unset_state_changed_cb()
- * @see bt_adapter_state_changed_cb()
- *
- */
-int bt_adapter_enable(void);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
- * @brief Disables the local Bluetooth adapter, asynchronously.
- *
- * @details This function disables Bluetooth protocol stack and hardware.
- *
- * @remarks You should disable Bluetooth adapter to switch off Bluetooth chip, which is helpful for saving power.
- *
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_NOW_IN_PROGRESS Operation now in progress
- *
- * @pre Bluetooth API must be enabled with bt_adapter_enable().
- * @post This function invokes bt_adapter_state_changed_cb().
- *
- * @see bt_adapter_get_state()
- * @see bt_adapter_enable()
- * @see bt_adapter_state_changed_cb()
- * @see bt_adapter_set_state_changed_cb()
- * @see bt_adapter_unset_state_changed_cb ()
- *
- */
-int bt_adapter_disable(void);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
- * @brief Gets the current state of local Bluetooth adapter.
- *
- * @param[out] adapter_state The current adapter state
- *
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- *
- * @pre Bluetooth service must be initialized with bt_initialize().
- *
- * @see bt_initialize()
- * @see bt_adapter_enable()
- * @see bt_adapter_disable()
- */
-int bt_adapter_get_state(bt_adapter_state_e *adapter_state);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
- * @brief Gets the address of local Bluetooth adapter.
- *
- * @remarks The @a local_address must be released with free() by you.
- *
- * @param[out] local_address The device address of local Bluetooth adapter
- *
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED with bt_adapter_enable().
- * @see bt_adapter_enable()
- * @see bt_adapter_get_name()
- */
-int bt_adapter_get_address(char **local_address);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
- * @brief Gets the name of local Bluetooth adapter.
- *
- * @details Use this function to get the friendly name associated with Bluetooth
- * device, retrieved by the remote Bluetooth devices.
- *
- * @remarks The @a local_name must be released with free() by you.
- *
- * @param[out] local_name The local device name
- *
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- *
- * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED with bt_adapter_enable().
- *
- * @see bt_adapter_enable()
- * @see bt_adapter_set_name()
- */
-int bt_adapter_get_name(char **local_name);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
- * @brief Sets the name of local Bluetooth adapter.
- *
- * @param[in] local_name The name of the Bluetooth device. \n
- * The maximum length is 248 characters.
- *
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- *
- * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED with bt_adapter_enable().
- * @post bt_adapter_name_changed_cb() will be invoked if this function returns #BT_ERROR_NONE.
- *
- * @see bt_adapter_enable()
- * @see bt_adapter_get_name()
- * @see bt_adapter_name_changed_cb()
- * @see bt_adapter_set_name_changed_cb()
- * @see bt_adapter_unset_name_changed_cb()
- */
-int bt_adapter_set_name(const char *local_name);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
- * @brief Gets the visibility mode of local Bluetooth adapter.
- *
- * @param[out] mode The visibility mode of the Bluetooth device
- *
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- *
- * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED with bt_adapter_enable().
- *
- * @see bt_adapter_enable()
- * @see bt_adapter_set_visibility()
- */
-int bt_adapter_get_visibility(bt_adapter_visibility_mode_e *mode);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
- * @brief Sets the visibility mode.
- *
- * @remarks #BT_ADAPTER_VISIBILITY_MODE_LIMITED_DISCOVERABLE will change to #BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE
- * after the given @a timeout_sec goes.
- *
- * @param[in] discoverable_mode The Bluetooth discoverable mode to set
- * @param[in] timeout_sec The discoverable time duration (in seconds)
- * @a timeout_sec is used only for #BT_ADAPTER_VISIBILITY_MODE_LIMITED_DISCOVERABLE mode.
- *
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- *
- * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED with bt_adapter_enable().
- * @post bt_adapter_visibility_mode_changed_cb() will be invoked if this function returns #BT_ERROR_NONE.
- *
- * @see bt_adapter_enable()
- * @see bt_adapter_get_visibility()
- * @see bt_adapter_visibility_mode_changed_cb()
- * @see bt_adapter_set_visibility_mode_changed_cb()
- * @see bt_adapter_unset_visibility_mode_changed_cb()
- */
-int bt_adapter_set_visibility(bt_adapter_visibility_mode_e discoverable_mode, int timeout_sec);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
- * @brief Starts the device discovery, asynchronously.
- *
- * @details If a device is discovered, bt_adapter_device_discovery_state_changed_cb() will be invoked
- * with #BT_ADAPTER_DEVICE_DISCOVERY_FOUND, and then bt_adapter_device_discovery_state_changed_cb()
- * will be called with #BT_ADAPTER_DEVICE_DISCOVERY_FINISHED in case of the completion or cancellation of the discovery.
- *
- * @remarks To connect to peer Bluetooth device, you need to know its Bluetooth address. \n
- * The device discovery can be stopped by bt_adapter_stop_device_discovery().
- *
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_NOW_IN_PROGRESS Operation is now in progress
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- *
- * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED with bt_adapter_enable().
- * @post This function invokes bt_adapter_device_discovery_state_changed_cb().
- *
- * @see bt_adapter_enable()
- * @see bt_adapter_is_discovering()
- * @see bt_adapter_stop_device_discovery()
- * @see bt_adapter_device_discovery_state_changed_cb()
- * @see bt_adapter_set_device_discovery_state_changed_cb()
- * @see bt_adapter_unset_device_discovery_state_changed_cb()
- */
-int bt_adapter_start_device_discovery(void);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
- * @brief Stops the device discovery, asynchronously.
- * @remarks The device discovery process will take 10 ~ 20 seconds to get all the devices in vicinity.
- *
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_NOT_IN_PROGRESS Operation is not in progress
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- *
- * @pre The device discovery must be in progress with bt_adapter_start_device_discovery().
- * @post This function invokes bt_adapter_device_discovery_state_changed_cb().
- *
- * @see bt_adapter_is_discovering()
- * @see bt_adapter_start_device_discovery()
- * @see bt_adapter_set_device_discovery_state_changed_cb()
- * @see bt_adapter_unset_device_discovery_state_changed_cb()
- * @see bt_adapter_device_discovery_state_changed_cb()
- */
-int bt_adapter_stop_device_discovery(void);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
- * @brief Checks for the device discovery is in progress or not.
- *
- * @remarks If Bluetooth discovery is in progress, other operations are not allowed and
- * you have to either stop the discovery operation, or wait for it to be finished,
- * before performing other operations.
-
- * @param[out] is_discovering The discovering status: (@c true = in progress , @c false = not in progress )
- *
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- *
- * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED with bt_adapter_enable().
- *
- * @see bt_adapter_enable()
- * @see bt_adapter_start_device_discovery()
- * @see bt_adapter_stop_device_discovery()
- */
-int bt_adapter_is_discovering(bool *is_discovering);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
- * @brief Retrieves the device information of all bonded devices.
- *
- * @param [in] callback The callback function to invoke
- * @param [in] user_data The user data passed from the foreach function
- *
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- *
- * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED with bt_adapter_enable().
- * @post This function invokes bt_adapter_bonded_device_cb().
- *
- * @see bt_adapter_bonded_device_cb()
- * @see bt_adapter_enable()
- */
-int bt_adapter_foreach_bonded_device(bt_adapter_bonded_device_cb callback, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
- * @brief Gets the device information of a bonded device.
- * @remarks The @a device_info must be released with bt_adapter_free_device_info() by you .
- *
- * @param [in] remote_address The address of remote device
- * @param [out] device_info The bonded device information
- *
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- * @retval #BT_ERROR_REMOTE_DEVICE_NOT_BONDED Remote device not bonded
- *
- * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED with bt_adapter_enable().
- * @post This function invokes bt_adapter_bonded_device_cb().
- *
- * @see bt_adapter_bonded_device_cb()
- * @see bt_adapter_enable()
- */
-int bt_adapter_get_bonded_device_info(const char *remote_address, bt_device_info_s **device_info);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
- * @brief Frees device info.
- *
- * @param [in] device_info The bonded device information
- *
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- *
- * @see bt_adapter_get_bonded_device_info()
- */
-int bt_adapter_free_device_info(bt_device_info_s *device_info);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
- * @brief Checks whether the UUID of service is used or not
- * @param[in] service_uuid The UUID of service
- * @param[out] used Indicates whether the service is used or not
- * @return true on success, otherwise false.
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- * @see bt_adapter_enable()
- */
-int bt_adapter_is_service_used(const char *service_uuid, bool *used);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
- * @brief Registers a callback function to be invoked when the Bluetooth adapter state changes.
- *
- * @param[in] callback The callback function to invoke
- * @param[in] user_data The user data to be passed to the callback function
- *
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- *
- * @pre The Bluetooth service must be initialized with bt_initialize().
- * @post bt_adapter_state_changed_cb() will be invoked.
- *
- * @see bt_initialize()
- * @see bt_adapter_state_changed_cb()
- * @see bt_adapter_set_state_changed_cb()
- * @see bt_adapter_unset_state_changed_cb()
- */
-int bt_adapter_set_state_changed_cb(bt_adapter_state_changed_cb callback, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
- * @brief Unregisters the callback function.
- *
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- *
- * @pre The Bluetooth service must be initialized with bt_initialize().
- *
- * @see bt_initialize()
- * @see bt_adapter_set_state_changed_cb()
- */
-int bt_adapter_unset_state_changed_cb(void);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
- * @brief Registers a callback function to be invoked when the name of Bluetooth adapter changes.
- *
- * @param[in] callback The callback function to invoke
- * @param[in] user_data The user data to be passed to the callback function
- *
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- *
- * @pre The Bluetooth service must be initialized with bt_initialize().
- * @post bt_adapter_name_changed_cb() will be invoked.
- *
- * @see bt_initialize()
- * @see bt_adapter_name_changed_cb()
- * @see bt_adapter_unset_name_changed_cb()
- */
-int bt_adapter_set_name_changed_cb(bt_adapter_name_changed_cb callback, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
- * @brief Unregisters the callback function.
- *
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- *
- * @pre The Bluetooth service must be initialized with bt_initialize().
- *
- * @see bt_initialize()
- * @see bt_adapter_set_name_changed_cb()
- */
-int bt_adapter_unset_name_changed_cb(void);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
- * @brief Registers a callback function to be invoked when the visibility mode changes.
- *
- * @param[in] callback The callback function to register
- * @param[in] user_data The user data to be passed to the callback function
- *
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- *
- * @pre The Bluetooth service must be initialized with bt_initialize().
- * @post bt_adapter_visibility_mode_changed_cb() will be invoked.
- *
- * @see bt_initialize()
- * @see bt_adapter_visibility_mode_changed_cb()
- * @see bt_adapter_unset_visibility_mode_changed_cb()
- */
-int bt_adapter_set_visibility_mode_changed_cb(bt_adapter_visibility_mode_changed_cb callback, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
- * @brief Unregisters the callback function.
- *
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- *
- * @pre The Bluetooth service must be initialized with bt_initialize().
- *
- * @see bt_initialize()
- * @see bt_adapter_set_visibility_mode_changed_cb()
- */
-int bt_adapter_unset_visibility_mode_changed_cb(void);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
- * @brief Registers a callback function to be invoked when the device discovery state changes.
- *
- * @param[in] callback The callback function to register
- * @param[in] user_data The user data to be passed to the callback function
- *
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- *
- * @pre The Bluetooth service must be initialized with bt_initialize().
- * @post bt_adapter_device_discovery_state_changed_cb() will be invoked.
- *
- * @see bt_initialize()
- * @see bt_adapter_device_discovery_state_changed_cb()
- * @see bt_adapter_set_device_discovery_state_changed_cb()
- * @see bt_adapter_unset_device_discovery_state_changed_cb()
- */
-int bt_adapter_set_device_discovery_state_changed_cb(bt_adapter_device_discovery_state_changed_cb callback, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
- * @brief Unregisters the callback function.
- *
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- *
- * @pre The Bluetooth service must be initialized with bt_initialize().
- *
- * @see bt_initialize()
- * @see bt_adapter_set_device_discovery_state_changed_cb()
- */
-int bt_adapter_unset_device_discovery_state_changed_cb(void);
-
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
- * @brief Creates a bond with a remote Bluetooth device, asynchronously.
- *
- * @remarks A bond can be destroyed by bt_device_destroy_bond().\n
- * The bonding request can be cancelled by bt_device_cancel_bonding().
- *
- * @param[in] remote_address The address of the remote Bluetooth device with which the bond should be created
- *
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_RESOURCE_BUSY Device or resource busy
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- *
- * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED with bt_adapter_enable()
- * @pre The remote device must be discoverable with bt_adapter_start_device_discovery().
- * @post This function invokes bt_device_bond_created_cb().
- *
- * @see bt_adapter_enable()
- * @see bt_adapter_start_device_discovery()
- * @see bt_device_bond_created_cb()
- * @see bt_device_cancel_bonding()
- * @see bt_device_destroy_bond()
- * @see bt_device_set_bond_created_cb()
- * @see bt_device_unset_bond_created_cb()
- */
-int bt_device_create_bond(const char *remote_address);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
- * @brief Cancels the bonding process.
- *
- * @remakrs Use this function when the remote Bluetooth device is not responding to the
- * bond request or you wish to cancel the bonding request.
- *
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_NOT_IN_PROGRESS Operation not in progress
- * @pre The creating a bond must be in progress by bt_device_create_bond().
- *
- * @see bt_device_create_bond()
- * @see bt_device_bond_created_cb()
- * @see bt_device_set_bond_created_cb()
- * @see bt_device_unset_bond_created_cb()
- */
-int bt_device_cancel_bonding(void);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
- * @brief Destroys the bond, asynchronously.
- *
- * @param[in] remote_address The address of the remote Bluetooth device to remove bonding
- *
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_RESOURCE_BUSY Device or resource busy
- * @retval #BT_ERROR_REMOTE_DEVICE_NOT_BONDED Remote device not bonded
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- *
- * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED with bt_adapter_enable().
- * @pre The bond with the remote device must be created with bt_device_create_bond().
- * @post This function invokes bt_device_bond_destroyed_cb().
- *
- * @see bt_adapter_enable()
- * @see bt_device_create_bond()
- * @see bt_device_bond_destroyed_cb()
- * @see bt_device_set_bond_destroyed_cb()
- * @see bt_device_unset_bond_destroyed_cb()
- */
-int bt_device_destroy_bond(const char *remote_address);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
- * @brief Sets an alias for the bonded device.
- *
- * @param[in] remote_address The address of the remote Bluetooth device
- * @param[in] alias The alias of the remote Bluetooth device
- *
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_REMOTE_DEVICE_NOT_BONDED Remote device not bonded
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- *
- * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED with bt_adapter_enable().
- * @pre The bond with the remote device must be created with bt_device_create_bond().
- *
- * @see bt_adapter_enable()
- * @see bt_device_create_bond()
- */
-int bt_device_set_alias(const char *remote_address, const char *alias);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
- * @brief Sets the authorization of a bonded device, asynchronously.
- *
- * @remarks Once a device is authorized, you don't need to receive a confirmation.
- *
- * @param[in] remote_address The address of the remote Bluetooth device to authorize
- * @param[in] authorization The Bluetooth authorization state
- *
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_REMOTE_DEVICE_NOT_BONDED Remote device not bonded
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- *
- * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED with bt_adapter_enable().
- * @pre The bond with the remote device must be created with bt_device_create_bond().
- * @post bt_device_authorization_changed_cb() will be invoked.
- *
- * @see bt_adapter_enable()
- * @see bt_device_create_bond()
- * @see bt_device_authorization_changed_cb()
- * @see bt_device_set_authorization_changed_cb()
- * @see bt_device_unset_authorization_changed_cb()
- */
-int bt_device_set_authorization(const char *remote_address, bt_device_authorization_e authorization_state);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
- * @brief Starts the search for services supported by the specified device, asynchronously.
- *
- * @remarks If creating a bond succeeds, which means bt_device_bond_created_cb() is called with result #BT_ERROR_NONE,
- * then you don't need to run this function.\n
- * The service search takes a couple of seconds to complete normally. \n
- * The service search can be canceled by bt_device_cancel_service_search().
- *
- * @param[in] remote_address The address of the remote Bluetooth device whose services need to be checked
- *
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_REMOTE_DEVICE_NOT_BONDED Remote device not bonded
- * @retval #BT_ERROR_SERVICE_SEARCH_FAILED Service search failed
- *
- * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED with bt_adapter_enable().
- * @pre The remote device must be discoverable with bt_adapter_start_device_discovery().
- * @pre The bond with the remote device must be created with bt_device_create_bond().
- * @post This function invokes bt_device_service_searched_cb().
- *
- * @see bt_adapter_enable()
- * @see bt_adapter_start_device_discovery()
- * @see bt_device_create_bond()
- * @see bt_device_bond_created_cb()
- * @see bt_device_service_searched_cb()
- * @see bt_device_cancel_service_search()
- * @see bt_device_set_service_searched_cb()
- * @see bt_device_unset_service_searched_cb()
- */
-int bt_device_start_service_search(const char *remote_address);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
- * @brief Cancels service search process.
- *
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_REMOTE_DEVICE_NOT_BONDED Remote device not bonded
- * @retval #BT_ERROR_NOT_IN_PROGRESS Operation not in progress
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- *
- * @pre The service search must be in progress by bt_device_start_service_search().
- *
- * @see bt_device_start_service_search()
- * @see bt_device_service_searched_cb()
- * @see bt_device_set_service_searched_cb()
- * @see bt_device_unset_service_searched_cb()
- */
-int bt_device_cancel_service_search(void);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
- * @brief Registers a callback function to be invoked when the bond creates.
- * @param[in] callback The callback function to register
- * @param[in] user_data The user data to be passed to the callback function
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @pre The Bluetooth service must be initialized with bt_initialize().
- * @post bt_device_bond_created_cb() will be invoked.
- * @see bt_initialize()
- * @see bt_device_bond_created_cb()
- * @see bt_device_unset_bond_created_cb()
- */
-int bt_device_set_bond_created_cb(bt_device_bond_created_cb callback, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
- * @brief Unregisters the callback function.
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @pre The Bluetooth service must be initialized with bt_initialize().
- * @see bt_initialize()
- * @see bt_device_set_bond_created_cb()
- */
-int bt_device_unset_bond_created_cb(void);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
- * @brief Registers a callback function to be invoked when the bond destroys.
- * @param[in] callback The callback function to register
- * @param[in] user_data The user data to be passed to the callback function
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @pre The Bluetooth service must be initialized with bt_initialize().
- * @post bt_device_bond_destroyed_cb() will be invoked.
- * @see bt_initialize()
- * @see bt_device_bond_destroyed_cb()
- * @see bt_device_unset_bond_destroyed_cb()
- */
-int bt_device_set_bond_destroyed_cb(bt_device_bond_destroyed_cb callback, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
- * @brief Unregisters the callback function.
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @pre The Bluetooth service must be initialized with bt_initialize().
- * @see bt_initialize()
- * @see bt_device_set_bond_destroyed_cb()
- */
-int bt_device_unset_bond_destroyed_cb(void);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
- * @brief Registers a callback function to be invoked when the authorization of device changes.
- * @param[in] callback The callback function to register
- * @param[in] user_data The user data to be passed to the callback function
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @pre The Bluetooth service must be initialized with bt_initialize().
- * @post bt_device_authorization_changed_cb() will be invoked.
- * @see bt_initialize()
- * @see bt_device_authorization_changed_cb()
- * @see bt_device_set_authorization_changed_cb()
- * @see bt_device_unset_authorization_changed_cb()
- */
-int bt_device_set_authorization_changed_cb(bt_device_authorization_changed_cb callback, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
- * @brief Unregisters the callback function.
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @pre The Bluetooth service must be initialized with bt_initialize().
- * @see bt_initialize()
- * @see bt_device_set_authorization_changed_cb()
- */
-int bt_device_unset_authorization_changed_cb(void);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
- * @brief Registers a callback function to be invoked when the process of service search finishes.
- * @param[in] callback The callback function to register
- * @param[in] user_data The user data to be passed to the callback function
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @pre The Bluetooth service must be initialized with bt_initialize().
- * @post bt_device_service_searched_cb() will be invoked.
- * @see bt_initialize()
- * @see bt_device_service_searched_cb()
- * @see bt_device_unset_service_searched_cb()
- */
-int bt_device_set_service_searched_cb(bt_device_service_searched_cb callback, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
- * @brief Unregisters the callback function.
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @pre The Bluetooth service must be initialized with bt_initialize().
- * @see bt_initialize()
- * @see bt_device_set_service_searched_cb()
- */
-int bt_device_unset_service_searched_cb(void);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
- * @brief Registers a rfcomm socket with a specific UUID.
- *
- * @remarks A socket can be destroyed by bt_socket_destroy_rfcomm().
- *
- * @param[in] service_uuid The UUID of service to provide
- * @param[out] socket_fd The file descriptor of socket to listen
- * @return 0 on success, otherwise a negative error value.
- *
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED with bt_adapter_enable().
- *
- * @see bt_adapter_enable()
- * @see bt_socket_listen_and_accept_rfcomm()
- * @see bt_socket_destroy_rfcomm()
- */
-int bt_socket_create_rfcomm(const char *service_uuid, int *socket_fd);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
- * @brief Removes the rfcomm socket with the given socket.
- *
- * @param[in] socket_fd The file descriptor of socket to destroy
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- *
- * @pre The socket must be created with bt_socket_create_rfcomm().
- * @post If callback function bt_socket_connection_state_changed_cb() is set and the remote Bluetooth device is connected,
- * then bt_socket_connection_state_changed_cb() will be called.
- *
- * @see bt_socket_create_rfcomm()
- * @see bt_socket_connection_state_changed_cb()
- * @see bt_socket_set_connection_state_changed_cb()
- * @see bt_socket_unset_connection_state_changed_cb()
- */
-int bt_socket_destroy_rfcomm(int socket_fd);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
- * @brief Starts listening on passed rfcomm socket and accepts connection requests.
- * @details Pop-up is shown automatically when a RFCOMM connection is requested.
- * bt_socket_connection_state_changed_cb() will be called with
- * #BT_SOCKET_CONNECTED if you click "yes" and connection is finished successfully.
- *
- * @param[in] socket_fd The file descriptor of socket on which start to listen
- * @param[in] max_pending_connections The maximum number of pending connections
- *
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- *
- * @pre The socket must be created with bt_socket_create_rfcomm().
- * @post This function invokes bt_socket_connection_state_changed_cb().
- *
- * @see bt_socket_create_rfcomm()
- * @see bt_socket_connection_state_changed_cb()
- * @see bt_socket_set_connection_state_changed_cb()
- * @see bt_socket_unset_connection_state_changed_cb()
- */
-int bt_socket_listen_and_accept_rfcomm(int socket_fd, int max_pending_connections);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
- * @brief Called when a RFCOMM connection is requested.
- * @details You must call bt_socket_accept() if you want to accept. Otherwise, you must call bt_socket_reject().
- * @param[in] socket_fd The file descriptor of socket on which a connection is requested
- * @param[in] remote_address The address of remote device
- * @param[in] user_data The user data passed from the callback registration function
- * @pre If you register this callback function by bt_socket_set_connection_requested_cb() and listen a socket by bt_socket_listen(),
- * bt_socket_connection_requested_cb() will be invoked.
- * @see bt_socket_listen()
- * @see bt_socket_accept()
- * @see bt_socket_reject()
- */
-typedef void (*bt_socket_connection_requested_cb) (int socket_fd, const char *remote_address, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
- * @brief Starts listening on passed rfcomm socket.
- * @details bt_socket_connection_requested_cb() will be called when a RFCOMM connection is requested.
- *
- * @param[in] socket_fd The file descriptor socket on which start to listen
- * @param[in] user_data The user data to be passed to the callback function
- *
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- *
- * @pre The socket must be created with bt_socket_create_rfcomm().
- * @post This function invokes bt_socket_connection_state_changed_cb().
- *
- * @see bt_socket_create_rfcomm()
- * @see bt_socket_set_connection_requested_cb()
- * @see bt_socket_unset_connection_requested_cb()
- * @see bt_socket_connection_requested_cb()
- */
-int bt_socket_listen(int socket_fd, int max_pending_connections);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
- * @brief Accepts a connection request.
- * @param[in] requested_socket_fd The file descriptor of socket on which a connection is requested
- * @param[out] connected_socket_fd The file descriptor of connected socket
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- * @pre The connection is requested by bt_socket_connection_requested_cb().
- * @see bt_socket_create_rfcomm()
- * @see bt_socket_connection_requested_cb()
- * @see bt_socket_listen()
- * @see bt_socket_reject()
-*/
-int bt_socket_accept(int requested_socket_fd, int *connected_socket_fd);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
- * @brief Rejects a connection request.
- * @param[in] socket_fd The file descriptor of socket on which a connection is requested
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- * @pre The connection is requested by bt_socket_connection_requested_cb().
- * @see bt_socket_create_rfcomm()
- * @see bt_socket_connection_requested_cb()
- * @see bt_socket_listen()
- * @see bt_socket_accept()
- */
-int bt_socket_reject(int socket_fd);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
- * @brief Connects to a specific RFCOMM based service on a remote Bluetooth device UUID, asynchronously.
- *
- * @remarks A connection can be disconnected by bt_socket_disconnect_rfcomm().
- *
- * @param[in] remote_address The address of the remote Bluetooth device
- * @param[in] service_uuid The UUID of service provided by the remote Bluetooth device
- *
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_REMOTE_DEVICE_NOT_BONDED Remote device not bonded
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- *
- * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED with bt_adapter_enable().
- * @pre The remote device must be discoverable with bt_adapter_start_device_discovery().
- * @pre The bond with the remote device must be created with bt_device_create_bond().
- * @post This function invokes bt_socket_connection_state_changed_cb().
- *
- * @see bt_adapter_enable()
- * @see bt_device_create_bond()
- * @see bt_adapter_start_device_discovery()
- * @see bt_device_start_service_search()
- * @see bt_socket_disconnect_rfcomm()
- * @see bt_socket_connection_state_changed_cb()
- * @see bt_socket_set_connection_state_changed_cb()
- * @see bt_socket_unset_connection_state_changed_cb()
- */
-int bt_socket_connect_rfcomm(const char *remote_address, const char *service_uuid);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
- * @brief Disconnects the RFCOMM connection with the given file descriptor of conneted socket.
- * @remarks Because this function is synchronous, bt_socket_connection_state_changed_cb() won't be called
- * @param[in] socket_fd The file descriptor of socket to close
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @pre The connection must be established.
- */
-int bt_socket_disconnect_rfcomm(int socket_fd);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
- * @brief Sends data to the connected device.
- *
- * @param[in] socket_fd The file descriptor of connected socket
- * @param[in] data The data to be sent
- * @param[in] length The length of data to be sent
- *
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- *
- * @pre The connection must be established.
- */
-int bt_socket_send_data(int socket_fd, const char *data, int length);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
- * @brief Register a callback function that will be invoked when you receive data.
- * @param[in] callback The callback function to register
- * @param[in] user_data The user data to be passed to the callback function
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @pre The Bluetooth service must be initialized with bt_initialize().
- * @post bt_socket_data_received_cb() will be invoked.
- * @see bt_initialize()
- * @see bt_socket_data_received_cb()
- * @see bt_socket_set_data_received_cb()
- * @see bt_socket_unset_data_received_cb()
- */
-int bt_socket_set_data_received_cb(bt_socket_data_received_cb callback, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
- * @brief Unregisters the callback function.
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @pre The Bluetooth service must be initialized with bt_initialize().
- * @see bt_initialize()
- * @see bt_socket_data_received_cb()
- * @see bt_socket_set_data_received_cb()
- */
-int bt_socket_unset_data_received_cb(void);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
- * @brief Register a callback function that will be invoked when a RFCOMM connection is requested.
- * @param[in] callback The callback function to register
- * @param[in] user_data The user data to be passed to the callback function
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @pre The Bluetooth service must be initialized with bt_initialize().
- * @post If you listen a socket by bt_socket_listen(), bt_socket_connection_requested_cb() will be invoked.
- * @see bt_initialize()
- * @see bt_socket_unset_connection_requested_cb()
- */
-int bt_socket_set_connection_requested_cb(bt_socket_connection_requested_cb callback, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
- * @brief Unregisters the callback function.
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @pre The Bluetooth service must be initialized with bt_initialize().
- * @see bt_initialize()
- * @see bt_socket_set_connection_requested_cb()
- * @see bt_socket_connection_requested_cb()
- */
-int bt_socket_unset_connection_requested_cb(void);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
- * @brief Register a callback function that will be invoked when the connection state changes.
- * @param[in] callback The callback function to register
- * @param[in] user_data The user data to be passed to the callback function
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @pre The Bluetooth service must be initialized with bt_initialize().
- * @post bt_socket_connection_state_changed_cb() will be invoked.
- * @see bt_initialize()
- * @see bt_socket_connection_state_changed_cb()
- * @see bt_socket_unset_connection_state_changed_cb()
- */
-int bt_socket_set_connection_state_changed_cb(bt_socket_connection_state_changed_cb callback, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
- * @brief Unregisters the callback function.
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @pre The Bluetooth service must be initialized with bt_initialize().
- * @see bt_initialize()
- * @see bt_socket_connection_state_changed_cb()
- * @see bt_socket_set_connection_state_changed_cb()
- */
-int bt_socket_unset_connection_state_changed_cb(void);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_SERVER_MODULE
- * @brief Called when the push is requested.
- * @details You must call bt_opp_server_accept_push() if you want to accept.
- * Otherwise, you must call bt_opp_server_reject_push().
- * @param[in] file The path of file to be pushed
- * @param[in] size The file size (bytes)
- * @param[in] user_data The user data passed from the callback registration function
- * @see bt_opp_server_initialize()
- */
-typedef void (*bt_opp_server_push_requested_cb)(const char *file, int size, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_SERVER_MODULE
- * @brief Called when an OPP connection is requested.
- * @details You must call bt_opp_server_accept_connection() if you want to accept.
- * Otherwise, you must call bt_opp_server_reject_connection().
- * @param[in] remote_address The address of remote device
- * @param[in] user_data The user data passed from the callback registration function
- * @see bt_opp_server_initialize()
- * @see bt_opp_server_accept_connection()
- * @see bt_opp_server_reject_connection()
- */
-typedef void (*bt_opp_server_connection_requested_cb)(const char *remote_address, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_SERVER_MODULE
- * @brief Initializes the Bluetooth OPP server requested by bt_opp_server_push_requested_cb().
- * @details The popup appears when an OPP connection is requested from a remote device.
- * If you accept the request, then connection will be established and bt_opp_server_push_requested_cb() will be called.
- * At that time, you can call either bt_opp_server_accept() or bt_opp_server_reject().
- * @remarks This function must be called to start Bluetooth OPP server. You must free all resources of the Bluetooth service
- * by calling bt_opp_server_deinitialize() if Bluetooth OPP service is no longer needed.
- * @param[in] destination The destination path
- * @param[in] push_requested_cb The callback called when a push is requested
- * @param[in] user_data The user data to be passed to the callback function
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_RESOURCE_BUSY Device or resource busy
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- * @see bt_opp_server_push_requested_cb()
- * @see bt_opp_server_deinitialize()
- * @see bt_opp_server_accept_push()
- * @see bt_opp_server_reject_push()
- */
-int bt_opp_server_initialize(const char *destination, bt_opp_server_push_requested_cb push_requested_cb, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_SERVER_MODULE
- * @brief Initializes the Bluetooth OPP server requested by bt_opp_server_connection_requested_cb().
- * @details No popup appears when an OPP connection is requested from a remote device.
- * Instead, @a connection_requested_cb() will be called.
- * At that time, you can call either bt_opp_server_accept() or bt_opp_server_reject().
- * @remarks This function must be called to start Bluetooth OPP server. \n
- * You must free all resources of the Bluetooth service by calling bt_opp_server_deinitialize() if Bluetooth OPP service is no longer needed.
- * @param[in] destination The destination path
- * @param[in] connection_requested_cb The callback called when an OPP connection is requested
- * @param[in] user_data The user data to be passed to the callback function
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_RESOURCE_BUSY Device or resource busy
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- * @see bt_opp_server_connection_requested_cb()
- * @see bt_opp_server_deinitialize()
- * @see bt_opp_server_accept_connection()
- * @see bt_opp_server_reject_connection()
- */
-int bt_opp_server_initialize_by_connection_request(const char *destination, bt_opp_server_connection_requested_cb connection_requested_cb, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_SERVER_MODULE
- * @brief Denitializes the Bluetooth OPP server.
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- * @see bt_opp_server_initialize()
- * @see bt_opp_server_deinitialize()
- * @see bt_opp_server_initialize()
- */
-int bt_opp_server_deinitialize(void);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_SERVER_MODULE
- * @brief Called when a file is being transfered.
- * @param[in] file The path of file to be pushed
- * @param[in] size The file size (bytes)
- * @param[in] percent The progress in percentage (1 ~ 100)
- * @param[in] user_data The user data passed from the callback registration function
- * @see bt_opp_server_accept_push()
- * @see bt_opp_server_accept_connection()
- */
-typedef void (*bt_opp_server_transfer_progress_cb) (const char *file, long long size, int percent, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_SERVER_MODULE
- * @brief Called when a transfer is finished.
- * @param[in] error_code The result of push
- * @param[in] file The path of file to be pushed
- * @param[in] size The file size (bytes)
- * @param[in] user_data The user data passed from the callback registration function
- * @see bt_opp_server_accept_push()
- * @see bt_opp_server_accept_connection()
- */
-typedef void (*bt_opp_server_transfer_finished_cb) (int result, const char *file, long long size, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_SERVER_MODULE
- * @brief Accepts the push request from the remote device.
- * @remarks If you initialize OPP server by bt_opp_server_initialize_by_connection_request(), then name is ignored.
- * You can cancel the pushes by bt_opp_server_cancel_transfer() with transfer_id.
- * @param[in] progress_cb The callback called when a file is being transfered
- * @param[in] finished_cb The callback called when a transfer is finished
- * @param[in] name The name to store. This can be NULL if you initialize OPP server by bt_opp_server_initialize_by_connection_request().
- * @param[in] user_data The user data to be passed to the callback function
- * @param[out] transfer_id The ID of transfer
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- * @retval #BT_ERROR_NOW_IN_PROGRESS Operation now in progress
- * @see bt_opp_server_reject()
- */
-int bt_opp_server_accept(bt_opp_server_transfer_progress_cb progress_cb, bt_opp_server_transfer_finished_cb finished_cb, const char *name,
- void *user_data, int *transfer_id);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_SERVER_MODULE
- * @brief Rejects the push request from the remote device.
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- * @see bt_opp_server_accept_push()
- */
-int bt_opp_server_reject(void);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_SERVER_MODULE
- * @brief Cancels the transfer.
- * @param[in] transfer_id The ID of transfer
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- * @see bt_opp_server_accept_connection()
- * @see bt_opp_server_accept_push()
- */
-int bt_opp_server_cancel_transfer(int transfer_id);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_SERVER_MODULE
- * @brief Sets the destination path of file to be pushed.
- * @param[in] destination The destination path of file to be pushed
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- * @see bt_opp_server_initialize()
- */
-int bt_opp_server_set_destination(const char *destination);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_CLIENT_MODULE
- * @brief Initializes the Bluetooth OPP client.
- * @remarks This function must be called before Bluetooth OPP client starts. \n
- * You must free all resources of the Bluetooth service by calling bt_opp_client_deinitialize()
- * if Bluetooth OPP service is no longer needed.
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_RESOURCE_BUSY Device or resource busy
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- * @see bt_opp_client_deinitialize()
- */
-int bt_opp_client_initialize(void);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_CLIENT_MODULE
- * @brief Denitializes the Bluetooth OPP client.
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- * @see bt_opp_client_initialize()
- */
-int bt_opp_client_deinitialize(void);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_CLIENT_MODULE
- * @brief Adds file to be pushed.
- * @param[in] file The path of file to be pushed
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- * @see bt_opp_client_clear_files()
- * @see bt_opp_client_push_files()
- */
-int bt_opp_client_add_file(const char *file);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_CLIENT_MODULE
- * @brief Adds file to be pushed.
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- * @see bt_opp_client_add_file()
- * @see bt_opp_client_push_files()
- */
-int bt_opp_client_clear_files(void);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_CLIENT_MODULE
- * @brief Called when OPP server responds to the push request.
- * @param[in] result The result of OPP server response
- * @param[in] remote_address The remote address
- * @param[in] user_data The user data passed from the callback registration function
- * @pre bt_opp_client_push_files() will invoke this function.
- * @see bt_opp_client_push_files()
- */
-typedef void (*bt_opp_client_push_responded_cb)(int result, const char *remote_address, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_CLIENT_MODULE
- * @brief Called when each file is being transfered.
- * @param[in] file The path of file to be pushed
- * @param[in] size The file size (bytes)
- * @param[in] percent The progress in percentage (1 ~ 100). 100 means that a file is transfered completely.
- * @param[in] user_data The user data passed from the callback registration function
- * @pre bt_opp_client_push_files() will invoke this function.
- * @see bt_opp_client_push_files()
- */
-typedef void (*bt_opp_client_push_progress_cb)(const char *file, long long size, int percent, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_CLIENT_MODULE
- * @brief Called when the push request is finished.
- * @param[in] result The result of the push request
- * @param[in] remote_address The remote address
- * @param[in] user_data The user data passed from the callback registration function
- * @see bt_opp_client_push_files()
- */
-typedef void (*bt_opp_client_push_finished_cb)(int result, const char *remote_address, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_CLIENT_MODULE
- * @brief Pushes the file to the remote device, asynchronously.
- * @details At first, bt_opp_client_push_responded_cb() will be called when OPP server responds to the push request.
- * After connection is established, bt_opp_client_push_progress_cb() will be called repeatedly until a file is tranfered completely.
- * If you send several files, then bt_opp_client_push_progress_cb() with another file will be called repeatedly until the file is tranfered completely.
- * bt_opp_client_push_finished_cb() will be called when the push request is finished.
- * @param[in] remote_address The remote address
- * @param[in] responded_cb The callback called when OPP server responds to the push request
- * @param[in] progress_cb The callback called when each file is being transfered
- * @param[in] finished_cb The callback called when the push request is finished
- * @param[in] user_data The user data to be passed to the callback function
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- * @retval #BT_ERROR_NOW_IN_PROGRESS Operation now in progress
- * @see bt_opp_client_initialize()
- * @see bt_opp_client_cancel_push
- */
-int bt_opp_client_push_files(const char *remote_address, bt_opp_client_push_responded_cb responded_cb,
- bt_opp_client_push_progress_cb progress_cb, bt_opp_client_push_finished_cb finished_cb, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_CLIENT_MODULE
- * @brief Cancels the push request in progress, asynchronously.
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- * @pre bt_opp_client_push_files() must be called.
- * @post bt_opp_client_push_finished_cb() will be invoked with result #BT_ERROR_CANCELLED,
- * which is a parameter of bt_opp_client_push_files().
- * @see bt_opp_client_initialize()
- * @see bt_opp_client_push_files()
- */
-int bt_opp_client_cancel_push(void);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_PAN_NAP_MODULE
- * @brief Called when the connection state is changed.
- * @param[in] connected Indicates whether a client is connected or disconnected
- * @param[in] remote_address The remote address
- * @param[in] interface_name The interface name. For example, bnep0, bnep1.
- * @param[in] user_data The user data passed from the callback registration function
- * @see bt_nap_set_connection_state_changed_cb()
- * @see bt_nap_unset_connection_state_changed_cb()
- */
-typedef void (*bt_nap_connection_state_changed_cb) (bool connected, const char *remote_address, const char *interface_name, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_PAN_NAP_MODULE
- * @brief Activates the NAP(Network Access Point).
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- * @pre The Bluetooth must be enabled with bt_adapter_enable().
- * @see bt_adapter_enable()
- * @see bt_nap_deactivate()
- */
-int bt_nap_activate(void);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_PAN_NAP_MODULE
- * @brief Deactivates the NAP(Network Access Point).
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- * @pre The Bluetooth NAP service must be activated with bt_nap_activate().
- * @see bt_nap_activate()
- */
-int bt_nap_deactivate(void);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_PAN_NAP_MODULE
- * @brief Registers a callback function that will be invoked when the connection state changes.
- * @param[in] callback The callback function to register
- * @param[in] user_data The user data to be passed to the callback function
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @pre The Bluetooth service must be initialized with bt_initialize().
- * @post bt_nap_connection_state_changed_cb() will be invoked.
- * @see bt_initialize()
- * @see bt_nap_connection_state_changed_cb()
- * @see bt_nap_unset_connection_state_changed_cb()
- */
-int bt_nap_set_connection_state_changed_cb(bt_nap_connection_state_changed_cb callback, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_PAN_NAP_MODULE
- * @brief Unregisters a callback function that will be invoked when the connection state changes.
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @pre The Bluetooth service must be initialized with bt_initialize().
- * @post bt_nap_connection_state_changed_cb() will be invoked.
- * @see bt_initialize()
- * @see bt_nap_connection_state_changed_cb()
- * @see bt_nap_set_connection_state_changed_cb()
- */
-int bt_nap_unset_connection_state_changed_cb(void);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_PAN_PANU_MODULE
- * @brief Called when the connection state is changed.
- * @details This callback is called when the connection state is changed.
- * When you call bt_panu_connect() or bt_panu_disconnect(), this callback is also called with error result even though these functions fail.
- * @param[in] result The result of changing the connection state
- * @param[in] connected The state to be changed. @a true means connected state, Otherwise, @a false.
- * @param[in] remote_address The remote address
- * @param[in] type The type of PAN service
- * @param[in] user_data The user data passed from the callback registration function
- * @see bt_nap_set_connection_state_changed_cb()
- * @see bt_nap_unset_connection_state_changed_cb()
- */
-typedef void (*bt_panu_connection_state_changed_cb) (int result, bool connected, const char *remote_address, bt_panu_service_type_e type, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_PAN_PANU_MODULE
- * @brief Registers a callback function that will be invoked when the connection state changes.
- * @param[in] callback The callback function to register
- * @param[in] user_data The user data to be passed to the callback function
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @pre The Bluetooth service must be initialized with bt_initialize().
- * @post bt_nap_connection_state_changed_cb() will be invoked.
- * @see bt_initialize()
- * @see bt_panu_connection_state_changed_cb()
- * @see bt_panu_unset_connection_state_changed_cb()
- */
-int bt_panu_set_connection_state_changed_cb(bt_panu_connection_state_changed_cb callback, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_PAN_PANU_MODULE
- * @brief Unregisters a callback function that will be invoked when the connection state changes.
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @pre The Bluetooth service must be initialized with bt_initialize().
- * @post bt_nap_connection_state_changed_cb() will be invoked.
- * @see bt_initialize()
- * @see bt_panu_connection_state_changed_cb()
- * @see bt_panu_set_connection_state_changed_cb()
- */
-int bt_panu_unset_connection_state_changed_cb(void);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_PAN_PANU_MODULE
- * @brief Connects the remote device with the PAN(Personal Area Networking) service, asynchronously.
- * @param[in] remote_address The remote address
- * @param[in] type The type of PAN service
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_REMOTE_DEVICE_NOT_BONDED Remote device is not bonded
- * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- * @pre The local device must be bonded with the remote device by bt_device_create_bond().
- * @post bt_panu_connection_state_changed_cb() will be invoked.
- * @see bt_panu_disconnect()
- * @see bt_panu_connection_state_changed_cb()
- */
-int bt_panu_connect(const char *remote_address, bt_panu_service_type_e type);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_PAN_PANU_MODULE
- * @brief Disconnects the remote device with the PAN(Personal Area Networking) service, asynchronously.
- * @param[in] remote_address The remote address
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
- * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- * @pre The remote device must be connected by bt_panu_connect().
- * @post bt_panu_connection_state_changed_cb() will be invoked.
- * @see bt_panu_connect()
- * @see bt_panu_connection_state_changed_cb()
- */
-int bt_panu_disconnect(const char *remote_address);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_HID_MODULE
- * @brief Called when the connection state is changed.
- * @details This callback is called when the connection state is changed.
- * When you call bt_hid_host_connect() or bt_hid_host_disconnect(), this callback is also called with error result even though these functions fail.
- * @param[in] result The result of changing the connection state
- * @param[in] connected The state to be changed. @a true means connected state, Otherwise, @a false.
- * @param[in] remote_address The remote address
- * @param[in] user_data The user data passed from the callback registration function
- * @see bt_hid_host_connect()
- * @see bt_hid_host_disconnect()
- */
-typedef void (*bt_hid_host_connection_state_changed_cb) (int result, bool connected, const char *remote_address, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_HID_MODULE
- * @brief Initializes the Bluetooth HID(Human Interface Device) Host.
- * @remarks This function must be called before Bluetooth HID Host starts. \n
- * You must free all resources of the Bluetooth service by calling bt_hid_host_deinitialize()
- * if Bluetooth HID Host service is no longer needed.
- * @param[in] connection_cb The callback called when the connection state is changed
- * @param[in] user_data The user data to be passed to the callback function
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- * @pre The Bluetooth service must be initialized with bt_initialize().
- * @see bt_initialize()
- * @see bt_hid_host_deinitialize()
- */
-int bt_hid_host_initialize(bt_hid_host_connection_state_changed_cb connection_cb, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_HID_MODULE
- * @brief Deinitializes the Bluetooth HID(Human Interface Device) Host.
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- * @pre The Bluetooth HID service must be initialized with bt_hid_host_initialize().
- * @see bt_hid_host_initialize()
- */
-int bt_hid_host_deinitialize(void);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_HID_MODULE
- * @brief Connects the remote device with the HID(Human Interface Device) service, asynchronously.
- * @param[in] remote_address The remote address
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_REMOTE_DEVICE_NOT_BONDED Remote device is not bonded
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- * @pre The local device must be bonded with the remote device by bt_device_create_bond().
- * @pre The Bluetooth HID service must be initialized with bt_hid_host_initialize().
- * @post bt_hid_host_connection_state_changed_cb() will be invoked.
- * @see bt_hid_host_disconnect()
- * @see bt_hid_host_connection_state_changed_cb()
- */
-int bt_hid_host_connect(const char *remote_address);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_HID_MODULE
- * @brief Disconnects the remote device with the HID(Human Interface Device) service, asynchronously.
- * @param[in] remote_address The remote address
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- * @pre The remote device must be connected by bt_hid_host_connect().
- * @post bt_hid_host_connection_state_changed_cb() will be invoked.
- * @see bt_hid_host_connect()
- * @see bt_hid_host_connection_state_changed_cb()
- */
-int bt_hid_host_disconnect(const char *remote_address);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_MODULE
- * @brief Initializes the Bluetooth profiles related with audio.
- * @remarks This function must be called before Bluetooth profiles related with audio starts. \n
- * You must free all resources of the this service by calling bt_audio_deinitialize()
- * if Bluetooth profiles related with audio service is no longer needed.
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- * @pre The Bluetooth service must be initialized with bt_initialize().
- * @see bt_initialize()
- * @see bt_audio_deinitialize()
- */
-int bt_audio_initialize(void);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_MODULE
- * @brief Deinitializes the Bluetooth profiles related with audio.
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
- * @see bt_audio_initialize()
- */
-int bt_audio_deinitialize(void);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_MODULE
- * @brief Connects the remote device with the given audio profile, asynchronously.
- * @details If you input type as #BT_AUDIO_PROFILE_TYPE_ALL and connection request succeeds, then bt_audio_connection_state_changed_cb() will be called twice
- * when #BT_AUDIO_PROFILE_TYPE_HSP_HFP is connected and #BT_AUDIO_PROFILE_TYPE_A2DP is connected.
- * @param[in] remote_address The remote address
- * @param[in] type The type of audio profile
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_REMOTE_DEVICE_NOT_BONDED Remote device is not bonded
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
- * @pre The local device must be bonded with the remote device by bt_device_create_bond().
- * @post bt_audio_connection_state_changed_cb() will be invoked.
- * @see bt_audio_disconnect()
- * @see bt_audio_connection_state_changed_cb()
- */
-int bt_audio_connect(const char *remote_address, bt_audio_profile_type_e type);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_MODULE
- * @brief Disconnects the remote device with the given audio profile, asynchronously.
- * @details If you input type as #BT_AUDIO_PROFILE_TYPE_ALL and disconnection request succeeds, then bt_audio_connection_state_changed_cb() will be called twice
- * when #BT_AUDIO_PROFILE_TYPE_HSP_HFP is disconnected and #BT_AUDIO_PROFILE_TYPE_A2DP is disconnected.
- * @param[in] remote_address The remote address
- * @param[in] type The type of audio profile
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- * @pre The remote device must be connected by bt_audio_connect().
- * @post bt_audio_connection_state_changed_cb() will be invoked.
- * @see bt_audio_connect()
- * @see bt_audio_connection_state_changed_cb()
- */
-int bt_audio_disconnect(const char *remote_address, bt_audio_profile_type_e type);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_MODULE
- * @brief Called when the connection state is changed.
- * @details This callback is called when the connection state is changed.
- * When you call bt_audio_connect() or bt_audio_disconnect(), this callback is also called with error result even though these functions fail.
- * @param[in] result The result of changing the connection state
- * @param[in] connected The state to be changed. @a true means connected state, Otherwise, @a false.
- * @param[in] remote_address The remote address
- * @param[in] type The type of audio profile except #BT_AUDIO_PROFILE_TYPE_ALL
- * @param[in] user_data The user data passed from the callback registration function
- * @see bt_audio_set_connection_state_changed_cb()
- * @see bt_audio_unset_connection_state_changed_cb()
- */
-typedef void (*bt_audio_connection_state_changed_cb) (int result, bool connected, const char *remote_address, bt_audio_profile_type_e type, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_MODULE
- * @brief Registers a callback function that will be invoked when the connection state is changed.
- * @param[in] callback The callback function to register
- * @param[in] user_data The user data to be passed to the callback function
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
- * @see bt_audio_initialize()
- * @see bt_audio_connection_state_changed_cb()
- * @see bt_panu_unset_connection_state_changed_cb()
- */
-int bt_audio_set_connection_state_changed_cb(bt_audio_connection_state_changed_cb callback, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_MODULE
- * @brief Unregisters a callback function that will be invoked when the connection state is changed.
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
- * @see bt_audio_initialize()
- * @see bt_audio_connection_state_changed_cb()
- * @see bt_audio_set_connection_state_changed_cb()
- */
-int bt_audio_unset_connection_state_changed_cb(void);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
- * @brief Notifies the speaker gain to the remote device.
- * @details This function sends a signal to the remote device. This signal has the gain value.
- * @a gain is represented on a scale from 0 to 15. This value is absolute value relating to a particular volume level.
- * When the speaker gain of remote device is changed to the requested gain, bt_audio_speaker_gain_changed_cb() will be called.
- * @param[in] remote_address The remote address
- * @param[in] gain The gain of speaker (0 ~ 15)
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
- * @pre The remote device is connected by bt_audio_connect() with #BT_AUDIO_PROFILE_TYPE_HSP_HFP service.
- * @see bt_ag_get_speaker_gain()
- * @see bt_ag_set_speaker_gain_changed_cb()
- * @see bt_ag_unset_speaker_gain_changed_cb()
- */
-int bt_ag_notify_speaker_gain(const char *remote_address, int gain);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
- * @brief Gets the current speaker gain of the remote device.
- * @details This function gets the value of speaker gain of the remote device.
- * @a gain is represented on a scale from 0 to 15. This value is absolute value relating to a particular volume level.
- * @param[in] remote_address The remote address
- * @param[out] gain The gain of speaker (0 ~ 15)
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
- * @pre The remote device is connected by bt_audio_connect() with #BT_AUDIO_PROFILE_TYPE_HSP_HFP service.
- * @see bt_ag_notify_speaker_gain()
- * @see bt_ag_set_speaker_gain_changed_cb()
- * @see bt_ag_unset_speaker_gain_changed_cb()
- */
-int bt_ag_get_speaker_gain(const char *remote_address, int *gain);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_MODULE
- * @brief Called when the speaker gain of the remote device is changed.
- * @param[in] remote_address The remote address
- * @param[in] gain The gain of speaker (0 ~ 15)
- * @param[in] user_data The user data passed from the callback registration function
- * @see bt_ag_set_speaker_gain_changed_cb()
- * @see bt_ag_unset_speaker_gain_changed_cb()
- */
-typedef void (*bt_ag_speaker_gain_changed_cb) (const char *remote_address, int gain, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
- * @brief Registers a callback function that will be invoked when the speaker gain of the remote device is changed.
- * @details This function let you know the change of the speaker gain of the remote device.
- * @a gain is represented on a scale from 0 to 15. This value is absolute value relating to a particular volume level.
- * @param[in] callback The callback function to register
- * @param[in] user_data The user data to be passed to the callback function
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
- * @see bt_audio_initialize()
- * @see bt_ag_unset_speaker_gain_changed_cb()
- */
-int bt_ag_set_speaker_gain_changed_cb(bt_ag_speaker_gain_changed_cb callback, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
- * @brief Unregisters a callback function that will be invoked when the speaker gain of the remote device is changed.
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
- * @see bt_audio_initialize()
- * @see bt_ag_set_speaker_gain_changed_cb()
- */
-int bt_ag_unset_speaker_gain_changed_cb(void);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_MODULE
- * @brief Called when the microphone gain of the remote device is changed.
- * @param[in] remote_address The remote address
- * @param[in] gain The gain of microphone (0 ~ 15)
- * @param[in] user_data The user data passed from the callback registration function
- * @see bt_ag_set_microphone_gain_changed_cb()
- * @see bt_ag_unset_microphone_gain_changed_cb()
- */
-typedef void (*bt_ag_microphone_gain_changed_cb) (const char *remote_address, int gain, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
- * @brief Registers a callback function that will be invoked when the microphone gain of the remote device is changed.
- * @param[in] callback The callback function to register
- * @param[in] user_data The user data to be passed to the callback function
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
- * @see bt_audio_initialize()
- * @see bt_ag_unset_microphone_gain_changed_cb()
- */
-int bt_ag_set_microphone_gain_changed_cb(bt_ag_microphone_gain_changed_cb callback, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
- * @brief Unregisters a callback function that will be invoked when the microphone gain of the remote device is changed.
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
- * @see bt_audio_initialize()
- * @see bt_ag_set_microphone_gain_changed_cb()
- */
-int bt_ag_unset_microphone_gain_changed_cb(void);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
- * @brief Called when the connection state is changed.
- * @param[in] connected The state to be changed. @a true means connected state, Otherwise, @a false.
- * @param[in] remote_address The remote address
- * @param[in] user_data The user data passed from the callback registration function
- * @see bt_avrcp_target_initialize()
- * @see bt_avrcp_target_deinitialize()
- */
-typedef void (*bt_avrcp_target_connection_state_changed_cb) (bool connected, const char *remote_address, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
- * @brief Initializes the Bluetooth AVRCP(Audio/Video Remote Control Profile) service.
- * @remarks This function must be called before Bluetooth AVRCP service. \n
- * You must free all resources of the this service by calling bt_avrcp_target_deinitialize()
- * if Bluetooth AVRCP service is no longer needed.
- * @param[in] callback The callback function called when the connection state is changed
- * @param[in] user_data The user data to be passed to the callback function
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- * @pre The Bluetooth service must be initialized with bt_initialize().
- * @see bt_initialize()
- * @see bt_avrcp_target_deinitialize()
- */
-int bt_avrcp_target_initialize(bt_avrcp_target_connection_state_changed_cb callback, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
- * @brief Deinitializes the Bluetooth AVRCP(Audio/Video Remote Control Profile) service.
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @pre The Bluetooth audio service must be initialized with bt_avrcp_target_initialize().
- * @see bt_avrcp_target_initialize()
- */
-int bt_avrcp_target_deinitialize(void);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
- * @brief Notify the equalize state to the remote device.
- * @param[in] state The state of equalizer
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
- * @pre The remote device must be connected.
- * @see bt_avrcp_target_connection_state_changed_cb()
- * @see bt_avrcp_target_initialize()
- */
-int bt_avrcp_target_notify_equalizer_state(bt_avrcp_equalizer_state_e state);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
- * @brief Notify the repeat mode to the remote device.
- * @param[in] mode The repeat mode
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
- * @pre The remote device must be connected.
- * @see bt_avrcp_target_connection_state_changed_cb()
- * @see bt_avrcp_target_initialize()
- */
-int bt_avrcp_target_notify_repeat_mode(bt_avrcp_repeat_mode_e mode);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
- * @brief Notify the shuffle mode to the remote device.
- * @param[in] mode The repeat mode
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
- * @pre The remote device must be connected.
- * @see bt_avrcp_target_connection_state_changed_cb()
- * @see bt_avrcp_target_initialize()
- */
-int bt_avrcp_target_notify_shuffle_mode(bt_avrcp_shuffle_mode_e mode);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
- * @brief Notify the scan mode to the remote device.
- * @param[in] mode The scan mode
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
- * @pre The remote device must be connected.
- * @see bt_avrcp_target_connection_state_changed_cb()
- * @see bt_avrcp_target_initialize()
- */
-int bt_avrcp_target_notify_scan_mode(bt_avrcp_scan_mode_e mode);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
- * @brief Notify the player state to the remote device.
- * @param[in] state The player state
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
- * @pre The remote device must be connected.
- * @see bt_avrcp_target_connection_state_changed_cb()
- * @see bt_avrcp_target_initialize()
- */
-int bt_avrcp_target_notify_player_state(bt_avrcp_player_state_e state);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
- * @brief Notify the current position of song to the remote device.
- * @param[in] position The current position in milliseconds
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
- * @pre The remote device must be connected.
- * @see bt_avrcp_target_connection_state_changed_cb()
- * @see bt_avrcp_target_initialize()
- */
-int bt_avrcp_target_notify_position(unsigned int position);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
- * @brief Notify the track to the remote device.
- * @param[in] title The title of track
- * @param[in] artist The artist of track
- * @param[in] album The album of track
- * @param[in] genre The genre of track
- * @param[in] track_num The track number
- * @param[in] total_tracks The number of all tracks
- * @param[in] duration The duration of track in milliseconds
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
- * @pre The remote device must be connected.
- * @see bt_avrcp_target_connection_state_changed_cb()
- * @see bt_avrcp_target_initialize()
- */
-int bt_avrcp_target_notify_track(const char *title, const char *artist, const char *album, const char *genre, unsigned int track_num, unsigned int total_tracks, unsigned int duration);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_HDP_MODULE
- * @brief Registers an application that acts as the @a Sink role of HDP(Health Device Profile).
- * @param[in] data_type The data type of MDEP. This value is defined in ISO/IEEE 11073-20601 spec.
- * For example, pulse oximeter is 0x1004 and blood pressure monitor is 0x1007.
- * @param[out] app_id The ID of application
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @pre The Bluetooth must be enabled with bt_adapter_enable().
- * @see bt_adapter_enable()
- * @see bt_hdp_deactivate_sink()
- */
-int bt_hdp_register_sink_app(unsigned short data_type, char **app_id);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_HDP_MODULE
- * @brief Unregisters the given application that acts as the @a Sink role of HDP(Health Device Profile).
- * @param[in] app_id The ID of application
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- * @see bt_hdp_register_sink_app()
- */
-int bt_hdp_unregister_sink_app(const char *app_id);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_HDP_MODULE
- * @brief Connects the remote device which acts as @a Source role, asynchronously.
- * @param[in] remote_address The remote address
- * @param[in] app_id The ID of application
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_REMOTE_DEVICE_NOT_BONDED Remote device is not bonded
- * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- * @pre The Sink role of HDP must be activated with bt_hdp_activate_sink().
- * @pre The local device must be bonded with the remote device by bt_device_create_bond().
- * @post bt_hdp_connected_cb() will be invoked.
- * @see bt_hdp_disconnect()
- * @see bt_hdp_set_connection_state_changed_cb()
- * @see bt_hdp_unset_connection_state_changed_cb()
- */
-int bt_hdp_connect_to_source(const char *remote_address, const char *app_id);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_HDP_MODULE
- * @brief Disconnects the remote device, asynchronously.
- * @param[in] remote_address The remote address
- * @param[in] channel The connected data channel
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
- * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- * @pre The remote device must be connected.
- * @post bt_hdp_disconnected_cb() will be invoked.
- * @see bt_hdp_set_connection_state_changed_cb()
- * @see bt_hdp_unset_connection_state_changed_cb()
- */
-int bt_hdp_disconnect(const char *remote_address, unsigned int channel);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_HDP_MODULE
- * @brief Sends the data to the remote device.
- * @param[in] channel The connected data channel
- * @param[in] data The data to send
- * @param[in] size The size of data to send (byte)
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @retval #BT_ERROR_NOT_ENABLED Not enabled
- * @retval #BT_ERROR_OPERATION_FAILED Operation failed
- * @pre The remote device must be connected.
- * @see bt_hdp_data_received_cb()
- * @see bt_hdp_set_data_received_cb()
- * @see bt_hdp_unset_data_received_cb()
- */
-int bt_hdp_send_data(unsigned int channel, const char *data, unsigned int size);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_HDP_MODULE
- * @brief Called when the connection is established.
- * @param[in] result The result of connecting to the remote device
- * @param[in] remote_address The address of connected remote device
- * @param[in] app_id The ID of application
- * @param[in] type The type of HDP(Health Device Profile) channel
- * @param[in] channel The connected data channel
- * @param[in] user_data The user data passed from the callback registration function
- * @see bt_hdp_disconnected_cb
- * @see bt_hdp_set_connection_state_changed_cb()
- * @see bt_hdp_unset_connection_state_changed_cb()
- */
-typedef void (*bt_hdp_connected_cb) (int result, const char *remote_address, const char *app_id,
- bt_hdp_channel_type_e type, unsigned int channel, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_HDP_MODULE
- * @brief Called when the connection is disconnected.
- * @param[in] result The result of disconnecting from the remote device
- * @param[in] remote_address The address of disconnected remote device
- * @param[in] channel The connected data channel
- * @param[in] user_data The user data passed from the callback registration function
- * @see bt_hdp_connected_cb
- * @see bt_hdp_set_connection_state_changed_cb()
- * @see bt_hdp_unset_connection_state_changed_cb()
- */
-typedef void (*bt_hdp_disconnected_cb) (int result, const char *remote_address, unsigned int channel, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_HDP_MODULE
- * @brief Registers a callback function that will be invoked when the connection state is changed.
- * @param[in] connected_cb The callback function called when a connection is established
- * @param[in] disconnected_cb The callback function called when a connection is disconnected
- * @param[in] user_data The user data to be passed to the callback function
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @pre The Bluetooth service must be initialized with bt_initialize().
- * @see bt_hdp_unset_connection_state_changed_cb()
- */
-int bt_hdp_set_connection_state_changed_cb(bt_hdp_connected_cb connected_cb, bt_hdp_disconnected_cb disconnected_cb, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_HDP_MODULE
- * @brief Unregisters a callback function that will be invoked when the connection state is changed.
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @pre The Bluetooth service must be initialized with bt_initialize().
- * @see bt_hdp_set_connection_state_changed_cb()
- */
-int bt_hdp_unset_connection_state_changed_cb(void);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_HDP_MODULE
- * @brief Called when the you receive the data.
- * @param[in] channel The connected data channel
- * @param[in] data The received data
- * @param[in] size The size of received data (byte)
- * @param[in] user_data The user data passed from the callback registration function
- * @see bt_hdp_set_data_received_cb()
- * @see bt_hdp_unset_data_received_cb()
- */
-typedef void (*bt_hdp_data_received_cb) (unsigned int channel, const char *data, unsigned int size, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_HDP_MODULE
- * @brief Registers a callback function that will be invoked when you receive the data.
- * @param[in] callback The callback function to register
- * @param[in] user_data The user data to be passed to the callback function
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
- * @pre The Bluetooth service must be initialized with bt_initialize().
- * @see bt_hdp_unset_data_received_cb()
- */
-int bt_hdp_set_data_received_cb(bt_hdp_data_received_cb callback, void *user_data);
-
-/**
- * @ingroup CAPI_NETWORK_BLUETOOTH_HDP_MODULE
- * @brief Unregisters a callback function that will be invoked when you receive the data.
- * @return 0 on success, otherwise a negative error value.
- * @retval #BT_ERROR_NONE Successful
- * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
- * @pre The Bluetooth service must be initialized with bt_initialize().
- * @see bt_hdp_set_data_received_cb()
- */
-int bt_hdp_unset_data_received_cb(void);
-
-/**
- * @}
- */
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif // __TIZEN_NETWORK_BLUETOOTH_H__
diff --git a/include/bluetooth_private.h b/include/bluetooth_private.h
index 5135d81..8367ce8 100644
--- a/include/bluetooth_private.h
+++ b/include/bluetooth_private.h
@@ -22,15 +22,24 @@
#include <stdbool.h>
#include <bluetooth-api.h>
#include <bluetooth-audio-api.h>
+#include <bluetooth-telephony-api.h>
#include <bluetooth-media-control.h>
#include <bluetooth-hid-api.h>
#include "bluetooth.h"
+#include "bluetooth_internal.h"
#ifdef __cplusplus
extern "C" {
#endif
+#undef LOG_TAG
+#define LOG_TAG "CAPI_NETWORK_BLUETOOTH"
+
+#define BT_INFO(fmt, args...) SLOGI(fmt, ##args)
+#define BT_DBG(fmt, args...) SLOGD(fmt, ##args)
+#define BT_ERR(fmt, args...) SLOGE(fmt, ##args)
+
#define OPP_UUID "00001105-0000-1000-8000-00805f9b34fb"
/**
@@ -40,9 +49,13 @@ extern "C" {
typedef enum
{
BT_EVENT_STATE_CHANGED = 0x00, /**< Adapter state is changed */
+ BT_EVENT_LE_STATE_CHANGED, /**< Adapter le state is changed */
BT_EVENT_NAME_CHANGED, /**< Adapter name is changed */
BT_EVENT_VISIBILITY_MODE_CHANGED, /**< Adapter visibility mode is changed */
+ BT_EVENT_VISIBILITY_DURATION_CHANGED, /**< Adapter visibility duration is changed */
BT_EVENT_DEVICE_DISCOVERY_STATE_CHANGED, /**< Device discovery state is changed */
+ BT_EVENT_LE_DEVICE_DISCOVERY_STATE_CHANGED, /**< LE Device discovery state is changed */
+ BT_EVENT_LE_SCAN_RESULT_UPDATED, /**< LE Scan result is updated */
BT_EVENT_BOND_CREATED, /**< A bond is created */
BT_EVENT_BOND_DESTROYED, /**< A bond is destroyed */
BT_EVENT_AUTHORIZATION_CHANGED, /**< Authorization is changed */
@@ -61,24 +74,255 @@ typedef enum
BT_EVENT_NAP_CONNECTION_STATE_CHANGED, /**< NAP connection change */
BT_EVENT_HDP_CONNECTED, /**< HDP connection change */
BT_EVENT_HDP_DISCONNECTED, /**< HDP disconnection change */
- BT_EVENT_HDP_DATA_RECIEVED, /**< HDP Data recieve Callabck */
+ BT_EVENT_HDP_DATA_RECEIVED, /**< HDP Data receive Callabck */
BT_EVENT_AUDIO_CONNECTION_STATUS, /**< Audio Connection change callback */
+ BT_EVENT_A2DP_SOURCE_CONNECTION_STATUS, /**< A2dp Source Connection Change */
+ BT_EVENT_AG_SCO_CONNECTION_STATUS, /**< Audio - AG SCO Connection state change callback */
+ BT_EVENT_AG_CALL_HANDLING_EVENT, /**< Audio - AG call event callback */
+ BT_EVENT_AG_MULTI_CALL_HANDLING_EVENT, /**< Audio - AG 3-way call event callback */
+ BT_EVENT_AG_DTMF_TRANSMITTED, /**< Audio - DTMF tone sending request */
BT_EVENT_AG_MICROPHONE_GAIN_CHANGE, /**< Audio Microphone change callback */
BT_EVENT_AG_SPEAKER_GAIN_CHANGE, /**< Audio Speaker gain change callback */
+ BT_EVENT_AG_VENDOR_CMD, /**< Audio - XSAT Vendor cmd */
BT_EVENT_AVRCP_CONNECTION_STATUS, /**< AVRCP connection change callback */
- BT_EVENT_HID_CONNECTION_STATUS /**< HID connection status callback */
+ BT_EVENT_AVRCP_EQUALIZER_STATE_CHANGED, /**< AVRCP equalizer state change callback */
+ BT_EVENT_AVRCP_REPEAT_MODE_CHANGED, /**< AVRCP repeat mode change callback */
+ BT_EVENT_AVRCP_SHUFFLE_MODE_CHANGED, /**< AVRCP equalizer mode change callback */
+ BT_EVENT_AVRCP_SCAN_MODE_CHANGED, /**< AVRCP scan mode change callback */
+ BT_EVENT_AVRCP_PLAY_STATUS_CHANGED, /**< AVRCP scan mode change callback */
+ BT_EVENT_AVRCP_SONG_POSITION_CHANGED, /**< AVRCP scan mode change callback */
+ BT_EVENT_AVRCP_TRACK_INFO_CHANGED, /**< AVRCP scan mode change callback */
+ BT_EVENT_HID_CONNECTION_STATUS, /**< HID connection status callback */
+ BT_EVENT_DEVICE_CONNECTION_STATUS, /**< Device connection status callback */
+ BT_EVENT_GATT_CONNECTION_STATUS, /** < GATT connection status callback */
+ BT_EVENT_GATT_CLIENT_SERVICE_DISCOVERED, /** GATT services discovered callback */
+ BT_EVENT_GATT_CLIENT_VALUE_CHANGED, /**< GATT characteristic value changed callback */
+ BT_EVENT_GATT_CLIENT_READ_CHARACTERISTIC, /**< GATT characteristic value read callback */
+ BT_EVENT_GATT_CLIENT_WRITE_CHARACTERISTIC, /**< GATT characteristic value write callback */
+ BT_EVENT_GATT_CLIENT_READ_DESCRIPTOR, /**< GATT descriptor value read callback */
+ BT_EVENT_GATT_CLIENT_WRITE_DESCRIPTOR, /**< GATT descriptor value write callback */
+ BT_EVENT_GATT_SERVER_READ_REQUESTED, /**< GATT Characteristic/Descriptor Read Requested callback*/
+#ifdef BT_ENABLE_LEGACY_GATT_CLIENT
+ BT_EVENT_GATT_CLIENT_CHARACTERISTIC_DISCOVERED_LEGACY, /**< GATT characteristic discovered callback */
+ BT_EVENT_GATT_CLIENT_CHARACTERISTIC_DESCRIPTOR_DISCOVERED_LEGACY, /**< GATT characteristic descriptor discovered callback */
+ BT_EVENT_GATT_CLIENT_VALUE_CHANGED_LEGACY, /**< GATT characteristic value changed callback */
+ BT_EVENT_GATT_CLIENT_READ_CHARACTERISTIC_LEGACY, /**< GATT characteristic value read callback */
+ BT_EVENT_GATT_CLIENT_WRITE_CHARACTERISTIC_LEGACY, /**< GATT characteristic value write callback */
+#endif
+ BT_EVENT_ADVERTISING_STATE_CHANGED, /**< Advertising state changed callback */
+ BT_EVENT_MANUFACTURER_DATA_CHANGED, /**< Manufacturer data changed callback */
+ BT_EVENT_CONNECTABLE_CHANGED_EVENT, /**< Adapter connectable changed callback */
+ BT_EVENT_RSSI_ENABLED_EVENT, /**< RSSI Enabled callback */
+ BT_EVENT_RSSI_ALERT_EVENT, /**< RSSI Alert callback */
+ BT_EVENT_GET_RSSI_EVENT, /**< Get RSSI Strength callback */
+#ifdef TIZEN_WEARABLE
+ BT_EVENT_PBAP_CONNECTION_STATUS, /**< PBAP connection status callback */
+ BT_EVENT_PBAP_PHONEBOOK_SIZE, /**< PBAP Phonebook Size status callback */
+ BT_EVENT_PBAP_PHONEBOOK_PULL, /**< PBAP Phonebook Pull status callback */
+ BT_EVENT_PBAP_VCARD_LIST, /**< PBAP vCard List status callback */
+ BT_EVENT_PBAP_VCARD_PULL, /**< PBAP vCard Pull status callback */
+ BT_EVENT_PBAP_PHONEBOOK_SEARCH, /**< PBAP Phonebook Search status callback */
+ BT_EVENT_HF_SCO_CONNECTION_STATUS, /**< Audio - HF SCO Connection state change callback */
+ BT_EVENT_HF_SPEAKER_GAIN_CHANGE, /**< Audio - HF Speaker gain change callback */
+ BT_EVENT_HF_CALL_HANDLING_EVENT, /**< Audio - HF call event callback */
+ BT_EVENT_HF_VENDOR_DEP_CMD_EVENT, /**< Audio - HF Vendor Command callback */
+ BT_EVENT_HF_MULTI_CALL_HANDLING_EVENT, /**< Audio - HF 3-way call event callback */
+ BT_EVENT_HF_CALL_STATUS_UPDATED_EVENT, /**< Audio - HF call status updated callback */
+#endif
+ BT_EVENT_MAX
} bt_event_e;
+typedef enum {
+ BT_GATT_ROLE_SERVER = 0x01,
+ BT_GATT_ROLE_CLIENT = 0x02,
+} bt_gatt_role_e;
+
+#ifdef TIZEN_WEARABLE
+/**
+ * @internal
+ */
+typedef enum {
+ BT_ADAPTER_LE_ADVERTISING_CONNECTABLE = 0x00, /**< Connectable undirected advertising (ADV_IND) */
+ BT_ADAPTER_LE_ADVERTISING_CONNECTABLE_DIRECT_HIGH = 0x01, /* @Deprecated since Tizen 2.4 */
+ BT_ADAPTER_LE_ADVERTISING_SCANNABLE = 0x02, /**< Scannable undirected advertising (ADV_SCAN_IND) */
+ BT_ADAPTER_LE_ADVERTISING_NON_CONNECTABLE = 0x03, /**< Non connectable undirected advertising (ADV_NONCOND_IND) */
+ BT_ADAPTER_LE_ADVERTISING_CONNECTABLE_DIRECT_LOW = 0x04, /* @Deprecated since Tizen 2.4 */
+} bt_adapter_le_advertising_type_e;
+
+/**
+ * @internal
+ */
+typedef enum {
+ BT_ADAPTER_LE_PACKET_DATA_INCOMP_LIST_16_BIT_SERVICE_CLASS_UUIDS = 0x02, /**<Incomplete list of 16 bit UUIDs */
+ BT_ADAPTER_LE_PACKET_DATA_COMP_LIST_16_BIT_SERVICE_CLASS_UUIDS = 0x03, /**< Complete list of 16 bit UUIDs */
+ BT_ADAPTER_LE_PACKET_DATA_INCOMP_LIST_128_BIT_SERVICE_CLASS_UUIDS = 0x06, /**< Incomplete list of 128 bit UUIDs */
+ BT_ADAPTER_LE_PACKET_DATA_COMP_LIST_128_BIT_SERVICE_CLASS_UUIDS = 0x07, /**< Complete list of 128 bit UUID */
+ BT_ADAPTER_LE_PACKET_DATA_LOCAL_NAME = 0x09, /**<local device name */
+ BT_ADAPTER_LE_PACKET_DATA_TX_POWER_LEVEL = 0x0a, /**< TX-Power level*/
+ BT_ADAPTER_LE_PACKET_DATA_16_BIT_SERVICE_SOLICITATION_UUIDS = 0x14, /**< List of 16-bit Service Solicitation UUIDs*/
+ BT_ADAPTER_LE_PACKET_DATA_128_BIT_SERVICE_SOLICITATION_UUIDS = 0x15, /**< List of 128-bit Service Solicitation UUIDs*/
+ BT_ADAPTER_LE_PACKET_DATA_SERVICE_DATA = 0x16, /**< Service data */
+ BT_ADAPTER_LE_PACKET_DATA_APPEARANCE = 0x19, /**< Appearance*/
+ BT_ADAPTER_LE_PACKET_DATA_MANUFACTURER_SPECIFIC_DATA = 0xff, /**< Manufacturer data */
+} bt_adapter_le_packet_data_type_e;
+#endif
+
+/**
+ * @internal
+ */
+typedef enum {
+ BT_ADAPTER_LE_ADVERTISING_DATA_INCOMP_LIST_16_BIT_SERVICE_CLASS_UUIDS = 0x02, /**<Incomplete list of 16 bit UUIDs */
+ BT_ADAPTER_LE_ADVERTISING_DATA_COMP_LIST_16_BIT_SERVICE_CLASS_UUIDS = 0x03, /**< Complete list of 16 bit UUIDs */
+ BT_ADAPTER_LE_ADVERTISING_DATA_INCOMP_LIST_128_BIT_SERVICE_CLASS_UUIDS = 0x06, /**< Incomplete list of 128 bit UUIDs */
+ BT_ADAPTER_LE_ADVERTISING_DATA_COMP_LIST_128_BIT_SERVICE_CLASS_UUIDS = 0x07, /**< Complete list of 128 bit UUID */
+ BT_ADAPTER_LE_ADVERTISING_DATA_LOCAL_NAME = 0x09, /**<local device name */
+ BT_ADAPTER_LE_ADVERTISING_DATA_TX_POWER_LEVEL = 0x0a, /**< TX-Power level*/
+ BT_ADAPTER_LE_ADVERTISING_DATA_16_BIT_SERVICE_SOLICITATION_UUIDS = 0x14, /**< List of 16-bit Service Solicitation UUIDs*/
+ BT_ADAPTER_LE_ADVERTISING_DATA_128_BIT_SERVICE_SOLICITATION_UUIDS = 0x15, /**< List of 128-bit Service Solicitation UUIDs*/
+ BT_ADAPTER_LE_ADVERTISING_DATA_SERVICE_DATA = 0x16, /**< Service data */
+ BT_ADAPTER_LE_ADVERTISING_DATA_APPEARANCE = 0x19, /**< Appearance*/
+ BT_ADAPTER_LE_ADVERTISING_DATA_MANUFACTURER_SPECIFIC_DATA = 0xff, /**< Manufacturer data */
+} bt_adapter_le_advertising_data_type_e;
+
+/**
+ * @internal
+ */
+ typedef struct {
+ bt_adapter_le_advertising_mode_e mode;
+ bt_adapter_le_advertising_filter_policy_e filter_policy;
+ bt_adapter_le_advertising_type_e type;
+} bt_adapter_le_advertising_parameters_s;
+
+typedef struct {
+ int handle;
+
+ bt_adapter_le_advertising_state_changed_cb cb;
+ void *user_data;
+
+ bt_adapter_le_advertising_parameters_s adv_params;
+
+ unsigned int adv_data_len;
+ char *adv_data;
+ unsigned int adv_system_data_len;
+
+ unsigned int scan_rsp_data_len;
+ char *scan_rsp_data;
+ unsigned int scan_rsp_system_data_len;
+} bt_advertiser_s;
+
+typedef struct {
+ int slot_id;
+ char *device_address;
+ char *device_name;
+ char *service_uuid;
+ char *service_uuid_mask;
+ char *service_solicitation_uuid;
+ char *service_solicitation_uuid_mask;
+ char *service_data_uuid;
+ char *service_data;
+ unsigned int service_data_len;
+ char *service_data_mask;
+ int manufacturer_id;
+ char *manufacturer_data;
+ unsigned int manufacturer_data_len;
+ char *manufacturer_data_mask;
+} bt_le_scan_filter_s;
+
/**
* @internal
*/
typedef struct bt_event_sig_event_slot_s
{
- int event_type;
const void *callback;
void *user_data;
} bt_event_sig_event_slot_s;
+typedef struct {
+ GSList *services;
+} bt_gatt_server_s;
+
+typedef struct {
+ GSList *services;
+ char *remote_address;
+ bool services_discovered;
+} bt_gatt_client_s;
+
+typedef struct {
+ bt_gatt_type_e type;
+ bt_gatt_role_e role;
+ void *parent;
+ char *path;
+ char *uuid;
+} bt_gatt_common_s;
+
+typedef struct {
+ bt_gatt_type_e type;
+ bt_gatt_role_e role;
+ void *parent;
+ char *path;
+ char *uuid;
+
+ bool is_included_service;
+
+ bt_gatt_service_type_e service_type;
+
+ GSList *included_services;
+ GSList *characteristics;
+} bt_gatt_service_s;
+
+typedef struct {
+ bt_gatt_type_e type;
+ bt_gatt_role_e role;
+ void *parent;
+ char *path;
+ char *uuid;
+
+ int permissions;
+ int properties;
+ bt_gatt_write_type_e write_type;
+
+ GSList *descriptors;
+
+ bt_gatt_client_characteristic_value_changed_cb value_changed_cb;
+ void *value_changed_user_data;
+
+ bt_gatt_server_value_changed_cb server_value_changed_cb;
+ void *server_value_changed_user_data;
+
+ bt_gatt_server_read_value_requested_cb read_requested_cb;
+ void *read_requested_user_data;
+
+ int value_length;
+ char *value;
+} bt_gatt_characteristic_s;
+
+typedef struct {
+ bt_gatt_type_e type;
+ bt_gatt_role_e role;
+ void *parent;
+ char *path;
+ char *uuid;
+
+ int permissions;
+
+ int value_length;
+ char *value;
+} bt_gatt_descriptor_s;
+
+typedef struct {
+ bt_gatt_client_h client;
+ bt_gatt_h gatt_handle;
+ void *user_data;
+
+ /*
+ * Temp callback. Once bluez's discover service issue is fixed,
+ * it will be removed
+ */
+ bt_gatt_client_request_completed_cb cb;
+} bt_gatt_client_cb_data_s;
+
+typedef void (*_bt_gatt_client_value_changed_cb)(char *char_path,
+ unsigned char *value, int value_length, void *user_data);
#define BT_CHECK_INPUT_PARAMETER(arg) \
if (arg == NULL) \
@@ -87,6 +331,16 @@ typedef struct bt_event_sig_event_slot_s
return BT_ERROR_INVALID_PARAMETER; \
}
+#ifdef TIZEN_BT_DISABLE
+#define BT_CHECK_BT_SUPPORT() \
+ { \
+ LOGE("[%s] NOT_SUPPORTED(0x%08x)", __FUNCTION__, BT_ERROR_NOT_SUPPORTED); \
+ return BT_ERROR_NOT_SUPPORTED; \
+ }
+#else
+#define BT_CHECK_BT_SUPPORT()
+#endif
+
/**
* @internal
* @brief Check the initialzating status
@@ -100,6 +354,25 @@ int _bt_check_init_status(void);
return BT_ERROR_NOT_INITIALIZED; \
}
+#define BT_CHECK_ADAPTER_STATUS() \
+ if (bluetooth_check_adapter() == BLUETOOTH_ADAPTER_DISABLED) \
+ { \
+ LOGE("[%s] BT_ERROR_NOT_ENABLED(0x%08x)", __FUNCTION__, BT_ERROR_NOT_ENABLED); \
+ return BT_ERROR_NOT_ENABLED; \
+ }
+
+/**
+ * @internal
+ * @brief Initialize Bluetooth LE adapter
+ */
+int _bt_le_adapter_init(void);
+
+/**
+ * @internal
+ * @brief Deinitialize Bluetooth LE adapter
+ */
+int _bt_le_adapter_deinit(void);
+
/**
* @internal
* @brief Set the event callback.
@@ -170,6 +443,20 @@ bt_adapter_visibility_mode_e _bt_get_bt_visibility_mode_e(bluetooth_discoverable
*/
void _bt_audio_event_proxy(int event, bt_audio_event_param_t *param, void *user_data);
+#ifdef TIZEN_WEARABLE
+/**
+ * @internal
+ * @brief Since the HF call back and event proxy call backs have different prototype it is wrapper function.
+ */
+void _bt_hf_event_proxy(int event, bt_hf_event_param_t *param, void *user_data);
+#endif
+
+/**
+ * @internal
+ * @brief Since the Telephony call back and event proxy call backs have different prototype it is wrapper function.
+ */
+void _bt_telephony_event_proxy(int event, telephony_event_param_t *param, void *user_data);
+
/**
* @internal
* @brief Since the AVRCP call back and event proxy call backs have different prototype it is wrapper function.
@@ -182,6 +469,17 @@ void _bt_avrcp_event_proxy(int event, media_event_param_t *param, void *user_dat
*/
void _bt_hid_event_proxy(int event, hid_event_param_t *param, void *user_data);
+void _bt_adapter_le_invoke_advertising_state_cb(int handle, int result, bt_adapter_le_advertising_state_e adv_state);
+
+#ifdef BT_ENABLE_LEGACY_GATT_CLIENT
+bool _bt_gatt_is_legacy_client_mode(void);
+#endif
+
+const GSList* _bt_gatt_get_client_list(void);
+
+const GSList* _bt_gatt_get_server_list(void);
+
+int _bt_gatt_client_update_all(bt_gatt_client_h client);
#ifdef __cplusplus
}
diff --git a/include/mobile/bluetooth.h b/include/mobile/bluetooth.h
new file mode 100755
index 0000000..13fe96f
--- /dev/null
+++ b/include/mobile/bluetooth.h
@@ -0,0 +1,5621 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef __TIZEN_NETWORK_BLUETOOTH_H__
+#define __TIZEN_NETWORK_BLUETOOTH_H__
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <stdbool.h>
+#include <tizen_error.h>
+
+#include "bluetooth_type.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+
+/**
+ * @file bluetooth.h
+ * @brief API to control the Bluetooth adapter and devices and communications.
+ * @ingroup CAPI_NETWORK_BLUETOOTH_MODULE
+ */
+
+
+/**
+ * @addtogroup CAPI_NETWORK_BLUETOOTH_MODULE
+ * @{
+ */
+
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_MODULE
+ * @brief Initializes the Bluetooth API.
+ * @since_tizen 2.3
+ *
+ * @remarks This function must be called before Bluetooth API starts. \n
+ * You must free all resources of the Bluetooth service by calling bt_deinitialize() if Bluetooth service is no longer needed.
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_deinitialize()
+ */
+int bt_initialize(void);
+
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_MODULE
+ * @brief Releases all resources of the Bluetooth API.
+ * @since_tizen 2.3
+ *
+ * @remarks This function must be called if Bluetooth API is no longer needed.
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre Bluetooth API must be initialized with bt_initialize().
+ *
+ * @see bt_initialize()
+ */
+int bt_deinitialize(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Enables the local Bluetooth adapter, asynchronously.
+ * @since_tizen 2.3
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ *
+ * @details This function enables Bluetooth protocol stack and hardware.
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_ALREADY_DONE Already enabled
+ * @retval #BT_ERROR_NOW_IN_PROGRESS Operation now in progress
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre Bluetooth service must be initialized with bt_initialize().
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_DISABLED
+ * @post This function invokes bt_adapter_state_changed_cb().
+ *
+ * @see bt_initialize()
+ * @see bt_adapter_get_state()
+ * @see bt_adapter_set_state_changed_cb()
+ * @see bt_adapter_unset_state_changed_cb()
+ * @see bt_adapter_state_changed_cb()
+ *
+ */
+int bt_adapter_enable(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Disables the local Bluetooth adapter, asynchronously.
+ * @since_tizen 2.3
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ *
+ * @details This function disables Bluetooth protocol stack and hardware.
+ *
+ * @remarks You should disable Bluetooth adapter, which is helpful for saving power.
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_NOW_IN_PROGRESS Operation now in progress
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED
+ * @post This function invokes bt_adapter_state_changed_cb().
+ *
+ * @see bt_adapter_get_state()
+ * @see bt_adapter_state_changed_cb()
+ * @see bt_adapter_set_state_changed_cb()
+ * @see bt_adapter_unset_state_changed_cb ()
+ *
+ */
+int bt_adapter_disable(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Recover the local Bluetooth adapter, asynchronously.
+ * @since_tizen 2.3
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ *
+ * @details This function does recovery logic, disables Bluetooth protocol stack and hardware, then enables after a few seconds.
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_NOW_IN_PROGRESS Operation now in progress
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED
+ * @post This function invokes bt_adapter_state_changed_cb().
+ *
+ * @see bt_adapter_get_state()
+ * @see bt_adapter_state_changed_cb()
+ * @see bt_adapter_set_state_changed_cb()
+ * @see bt_adapter_unset_state_changed_cb ()
+ *
+ */
+int bt_adapter_recover(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Reset the local Bluetooth adapter, synchronously.
+ * @since_tizen 2.3
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ *
+ * @details This function resets Bluetooth protocol and values.
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre Bluetooth service must be initialized with bt_initialize().
+ * @post bt_adapter_state_changed_cb() will be invoked if The state of local Bluetooth was #BT_ADAPTER_ENABLED.
+ *
+ * @see bt_initialize()
+ * @see bt_adapter_get_state()
+ * @see bt_adapter_set_state_changed_cb()
+ * @see bt_adapter_unset_state_changed_cb()
+ * @see bt_adapter_state_changed_cb()
+ *
+ */
+int bt_adapter_reset(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Gets the current state of local Bluetooth adapter.
+ * @since_tizen 2.3
+ *
+ * @param[out] adapter_state The current adapter state
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_initialize()
+ */
+int bt_adapter_get_state(bt_adapter_state_e *adapter_state);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Gets the address of local Bluetooth adapter.
+ * @since_tizen 2.3
+ *
+ * @remarks The @a local_address must be released with free() by you.
+ *
+ * @param[out] local_address The device address of local Bluetooth adapter
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @see bt_adapter_get_name()
+ */
+int bt_adapter_get_address(char **local_address);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Gets the version of local Bluetooth adapter.
+ * @since_tizen 2.3
+ * @remarks The @a local_version must be released with free() by you.
+ *
+ * @param[out] local_version The version of local Bluetooth adapter
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ */
+int bt_adapter_get_version(char **local_version);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Gets the information regarding local Bluetooth adapter.
+ * @since_tizen 2.3
+ * @remarks The @a all parameters must be released with free() by you.
+ *
+ * @param[out] chipset Chipset name of local Bluetooth adapter
+ * @param[out] firmware Firmware info. of local Bluetooth adapter
+ * @param[out] stack_version Bluetooth stack version
+ * @param[out] profiles The profile list of local Bluetooth adapter
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ */
+int bt_adapter_get_local_info(char **chipset, char **firmware, char **stack_version, char **profiles);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Gets the name of local Bluetooth adapter.
+ * @since_tizen 2.3
+ *
+ * @details Use this function to get the friendly name associated with Bluetooth
+ * device, retrieved by the remote Bluetooth devices.
+ *
+ * @remarks The @a local_name must be released with free() by you.
+ *
+ * @param[out] local_name The local device name
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ *
+ * @see bt_adapter_set_name()
+ */
+int bt_adapter_get_name(char **local_name);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Sets the name of local Bluetooth adapter.
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @param[in] local_name The name of the Bluetooth device. \n
+ * The maximum length is 248 characters.
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @post bt_adapter_name_changed_cb() will be invoked if this function returns #BT_ERROR_NONE.
+ *
+ * @see bt_adapter_get_name()
+ * @see bt_adapter_name_changed_cb()
+ * @see bt_adapter_set_name_changed_cb()
+ * @see bt_adapter_unset_name_changed_cb()
+ */
+int bt_adapter_set_name(const char *local_name);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Gets the visibility mode of local Bluetooth adapter.
+ * @since_tizen 2.3
+ * @param[out] mode The visibility mode of the Bluetooth device
+ * @param[out] duration The duration until the visibility mode is changed to #BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE (in seconds).
+ * @a duration is valid only if @a mode is #BT_ADAPTER_VISIBILITY_MODE_LIMITED_DISCOVERABLE. This value can be NULL.
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ */
+int bt_adapter_get_visibility(bt_adapter_visibility_mode_e *mode, int *duration);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Sets the visibility mode.
+ * @since_tizen 2.3
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ *
+ * @remarks #BT_ADAPTER_VISIBILITY_MODE_LIMITED_DISCOVERABLE will change to #BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE
+ * after the given @a duration goes.
+ *
+ * @param[in] discoverable_mode The Bluetooth visibility mode to set
+ * @param[in] duration The duration until the visibility mode is changed to #BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE (in seconds).
+ * @a duration is used only for #BT_ADAPTER_VISIBILITY_MODE_LIMITED_DISCOVERABLE mode.
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @post bt_adapter_visibility_mode_changed_cb() will be invoked if this function returns #BT_ERROR_NONE.
+ *
+ * @see bt_adapter_get_visibility()
+ * @see bt_adapter_visibility_mode_changed_cb()
+ * @see bt_adapter_set_visibility_mode_changed_cb()
+ * @see bt_adapter_unset_visibility_mode_changed_cb()
+ */
+int bt_adapter_set_visibility(bt_adapter_visibility_mode_e discoverable_mode, int duration);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Starts the device discovery, asynchronously.
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @details If a device is discovered, bt_adapter_device_discovery_state_changed_cb() will be invoked
+ * with #BT_ADAPTER_DEVICE_DISCOVERY_FOUND, and then bt_adapter_device_discovery_state_changed_cb()
+ * will be called with #BT_ADAPTER_DEVICE_DISCOVERY_FINISHED in case of the completion or cancellation of the discovery.
+ *
+ * @remarks To connect to peer Bluetooth device, you need to know its Bluetooth address. \n
+ * The device discovery can be stopped by bt_adapter_stop_device_discovery().
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_NOW_IN_PROGRESS Operation is now in progress
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @post This function invokes bt_adapter_device_discovery_state_changed_cb().
+ *
+ * @see bt_adapter_is_discovering()
+ * @see bt_adapter_stop_device_discovery()
+ * @see bt_adapter_device_discovery_state_changed_cb()
+ * @see bt_adapter_set_device_discovery_state_changed_cb()
+ * @see bt_adapter_unset_device_discovery_state_changed_cb()
+ */
+int bt_adapter_start_device_discovery(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Stops the device discovery, asynchronously.
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @remarks The device discovery process will take 10 ~ 20 seconds to get all the devices in vicinity.
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_NOT_IN_PROGRESS Operation is not in progress
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The device discovery must be in progress with bt_adapter_start_device_discovery().
+ * @post This function invokes bt_adapter_device_discovery_state_changed_cb().
+ *
+ * @see bt_adapter_is_discovering()
+ * @see bt_adapter_start_device_discovery()
+ * @see bt_adapter_set_device_discovery_state_changed_cb()
+ * @see bt_adapter_unset_device_discovery_state_changed_cb()
+ * @see bt_adapter_device_discovery_state_changed_cb()
+ */
+int bt_adapter_stop_device_discovery(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Checks for the device discovery is in progress or not.
+ * @since_tizen 2.3
+ *
+ * @remarks If Bluetooth discovery is in progress, other operations are not allowed and
+ * you have to either stop the discovery operation, or wait for it to be finished,
+ * before performing other operations.
+
+ * @param[out] is_discovering The discovering status: (@c true = in progress , @c false = not in progress )
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ *
+ * @see bt_adapter_start_device_discovery()
+ * @see bt_adapter_stop_device_discovery()
+ */
+int bt_adapter_is_discovering(bool *is_discovering);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Get the service mask from the uuid list.
+ * @since_tizen 2.3
+ *
+ * @param[in] uuids The UUID list of the device.
+ * @param[in] no_of_service The number of the UUID list count.
+ * @param[out] service_mask_list Service mask list converted from the given UUID list.
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_service_class_t
+ */
+int bt_device_get_service_mask_from_uuid_list(char **uuids,
+ int no_of_service,
+ bt_service_class_t *service_mask_list);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Retrieves the device information of all bonded devices.
+ * @since_tizen 2.3
+ *
+ * @param [in] callback The callback function to invoke
+ * @param [in] user_data The user data passed from the foreach function
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @post This function invokes bt_adapter_bonded_device_cb().
+ *
+ * @see bt_adapter_bonded_device_cb()
+ */
+int bt_adapter_foreach_bonded_device(bt_adapter_bonded_device_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Gets the device information of a bonded device.
+ * @since_tizen 2.3
+ * @remarks The @a device_info must be released with bt_adapter_free_device_info() by you .
+ *
+ * @param [in] remote_address The address of remote device
+ * @param [out] device_info The bonded device information
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_BONDED Remote device not bonded
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @post This function invokes bt_adapter_bonded_device_cb().
+ *
+ * @see bt_adapter_bonded_device_cb()
+ */
+int bt_adapter_get_bonded_device_info(const char *remote_address, bt_device_info_s **device_info);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Frees device info.
+ * @since_tizen 2.3
+ *
+ * @param [in] device_info The bonded device information
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_adapter_get_bonded_device_info()
+ */
+int bt_adapter_free_device_info(bt_device_info_s *device_info);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Checks whether the UUID of service is used or not
+ * @since_tizen 2.3
+ * @param[in] service_uuid The UUID of service
+ * @param[out] used Indicates whether the service is used or not
+ * @return true on success, otherwise false.
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ */
+int bt_adapter_is_service_used(const char *service_uuid, bool *used);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Registers a callback function to be invoked when the Bluetooth adapter state changes.
+ * @since_tizen 2.3
+ *
+ * @param[in] callback The callback function to invoke
+ * @param[in] user_data The user data to be passed to the callback function
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @post bt_adapter_state_changed_cb() will be invoked.
+ *
+ * @see bt_initialize()
+ * @see bt_adapter_state_changed_cb()
+ * @see bt_adapter_set_state_changed_cb()
+ * @see bt_adapter_unset_state_changed_cb()
+ */
+int bt_adapter_set_state_changed_cb(bt_adapter_state_changed_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Unregisters the callback function.
+ * @since_tizen 2.3
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_initialize()
+ * @see bt_adapter_set_state_changed_cb()
+ */
+int bt_adapter_unset_state_changed_cb(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Registers a callback function to be invoked when the name of Bluetooth adapter changes.
+ * @since_tizen 2.3
+ *
+ * @param[in] callback The callback function to invoke
+ * @param[in] user_data The user data to be passed to the callback function
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @post bt_adapter_name_changed_cb() will be invoked.
+ *
+ * @see bt_initialize()
+ * @see bt_adapter_name_changed_cb()
+ * @see bt_adapter_unset_name_changed_cb()
+ */
+int bt_adapter_set_name_changed_cb(bt_adapter_name_changed_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Unregisters the callback function.
+ * @since_tizen 2.3
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_initialize()
+ * @see bt_adapter_set_name_changed_cb()
+ */
+int bt_adapter_unset_name_changed_cb(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Registers a callback function to be invoked when the visibility mode changes.
+ * @since_tizen 2.3
+ *
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @post bt_adapter_visibility_mode_changed_cb() will be invoked.
+ *
+ * @see bt_initialize()
+ * @see bt_adapter_visibility_mode_changed_cb()
+ * @see bt_adapter_unset_visibility_mode_changed_cb()
+ */
+int bt_adapter_set_visibility_mode_changed_cb(bt_adapter_visibility_mode_changed_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Unregisters the callback function.
+ * @since_tizen 2.3
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_initialize()
+ * @see bt_adapter_set_visibility_mode_changed_cb()
+ */
+int bt_adapter_unset_visibility_mode_changed_cb(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Registers a callback function to be invoked every second
+ * @since_tizen 2.3
+ * until the visibility mode is changed from #BT_ADAPTER_VISIBILITY_MODE_LIMITED_DISCOVERABLE
+ * to #BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE.
+ * @details When you set visibility mode as #BT_ADAPTER_VISIBILITY_MODE_LIMITED_DISCOVERABLE,
+ * @a callback will be called every second until visibility mode is changed to #BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE.
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized by bt_initialize().
+ * @post bt_adapter_visibility_duration_changed_cb() will be invoked.
+ * @see bt_initialize()
+ * @see bt_adapter_visibility_duration_changed_cb()
+ * @see bt_adapter_unset_visibility_duration_changed_cb()
+ */
+int bt_adapter_set_visibility_duration_changed_cb(bt_adapter_visibility_duration_changed_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Unregisters the callback function.
+ * @since_tizen 2.3
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @see bt_initialize()
+ * @see bt_adapter_set_visibility_duration_changed_cb()
+ */
+int bt_adapter_unset_visibility_duration_changed_cb(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Registers a callback function to be invoked when the device discovery state changes.
+ * @since_tizen 2.3
+ *
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @post bt_adapter_device_discovery_state_changed_cb() will be invoked.
+ *
+ * @see bt_initialize()
+ * @see bt_adapter_device_discovery_state_changed_cb()
+ * @see bt_adapter_set_device_discovery_state_changed_cb()
+ * @see bt_adapter_unset_device_discovery_state_changed_cb()
+ */
+int bt_adapter_set_device_discovery_state_changed_cb(bt_adapter_device_discovery_state_changed_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Unregisters the callback function.
+ * @since_tizen 2.3
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_initialize()
+ * @see bt_adapter_set_device_discovery_state_changed_cb()
+ */
+int bt_adapter_unset_device_discovery_state_changed_cb(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Get the Hash and Randmoizer value, synchronously.
+ * @since_tizen 2.3
+ *
+ * @param[out] hash The hash value recieved from the controller
+ * @param[out] randomizer The hash value recieved from the controller
+ * @param[out] hash_len The length of the hash value
+ * @param[out] randomizer_len The length of the randomizer value
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @see bt_initialize()
+ */
+int bt_adapter_get_local_oob_data(unsigned char **hash, unsigned char **randomizer,
+ int *hash_len, int *randomizer_len);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Sets the Hash and Randmoizer value, synchronously.
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @param[in] remote_address Remote device address
+ * @param[in] hash The hash value recieved from the controller
+ * @param[in] randomizer The hash value recieved from the controller
+ * @param[in] hash_len The length of the hash value. Allowed value is 16
+ * @param[in] randomizer_len The length of the randomizer value. Allowed value is 16
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @see bt_initialize()
+ */
+int bt_adapter_set_remote_oob_data(const char *remote_address,
+ unsigned char *hash, unsigned char *randomizer,
+ int hash_len, int randomizer_len);
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Deletes the Hash and Randomizer value, synchronously.
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @param[in] remote_address Remote device address
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @see bt_initialize()
+ */
+int bt_adapter_remove_remote_oob_data(const char *remote_address);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Registers a callback function to be invoked when the connectable state changes.
+ * @since_tizen 2.3
+ *
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @post bt_adapter_connectable_changed_cb() will be invoked.
+ *
+ * @see bt_initialize()
+ * @see bt_adapter_connectable_changed_cb()
+ * @see bt_adapter_unset_connectable_changed_cb()
+ */
+int bt_adapter_set_connectable_changed_cb(bt_adapter_connectable_changed_cb callback, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Unregisters the callback function.
+ * @since_tizen 2.3
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_initialize()
+ * @see bt_adapter_set_connectable_changed_cb()
+ */
+int bt_adapter_unset_connectable_changed_cb(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Gets the connectable state of local Bluetooth adapter.
+ * @since_tizen 2.3
+ *
+ * @remarks When connectable state is false, no device can connect to this device and visibility mode cannot be changed.
+ *
+ * @param[out] connectable The connectable state of local Bluetooth adapter
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ *
+ * @see bt_adapter_set_connectable()
+ */
+int bt_adapter_get_connectable(bool *connectable);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Sets the connectable state of local Bluetooth adapter.
+ * @since_tizen 2.3
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ *
+ * @remarks When connectable state is false, no device can connect to this device and visibility mode cannot be changed.
+ *
+ * @param[in] connectable The connectable state to set
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @post bt_adapter_connectable_changed_cb() will be invoked if this function returns #BT_ERROR_NONE.
+ *
+ * @see bt_adapter_get_connectable()
+ * @see bt_adapter_connectable_changed_cb()
+ * @see bt_adapter_set_connectable_changed_cb()
+ * @see bt_adapter_unset_connectable_changed_cb()
+ */
+int bt_adapter_set_connectable(bool connectable);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Enables the local Bluetooth le adapter, asynchronously.
+ * @since_tizen 2.3
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ *
+ * @details This function enables Bluetooth protocol stack and hardware.
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_ALREADY_DONE Already enabled
+ * @retval #BT_ERROR_NOW_IN_PROGRESS Operation now in progress
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre Bluetooth service must be initialized with bt_initialize().
+ * @post This function invokes bt_adapter_le_state_changed_cb().
+ *
+ * @see bt_initialize()
+ * @see bt_adapter_le_get_state()
+ * @see bt_adapter_le_set_state_changed_cb()
+ * @see bt_adapter_le_unset_state_changed_cb()
+ * @see bt_adapter_le_state_changed_cb()
+ *
+ */
+int bt_adapter_le_enable(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Disables the local Bluetooth le adapter, asynchronously.
+ * @since_tizen 2.3
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ *
+ * @details This function disables Bluetooth le protocol stack and hardware.
+ *
+ * @remarks
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_NOW_IN_PROGRESS Operation now in progress
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_LE_ENABLED
+ * @post This function invokes bt_adapter_le_state_changed_cb().
+ *
+ * @see bt_adapter_le_get_state()
+ * @see bt_adapter_le_state_changed_cb()
+ * @see bt_adapter_le_set_state_changed_cb()
+ * @see bt_adapter_le_unset_state_changed_cb ()
+ *
+ */
+int bt_adapter_le_disable(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Gets the current state of local Bluetooth adapter.
+ * @since_tizen 2.3
+ *
+ * @param[out] adapter_le_state The current adapter le state
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_initialize()
+ */
+int bt_adapter_le_get_state(bt_adapter_le_state_e *adapter_le_state);
+
+/**
+ * @deprecated Deprecated since 2.3.1
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Starts the LE device discovery.
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @details If a LE device is discovered, bt_adapter_le_device_discovery_state_changed_cb()
+* will be invoked with #BT_ADAPTER_LE_DEVICE_DISCOVERY_FOUND, and then bt_adapter_le_device_discovery_state_changed_cb()
+ * will be called with #BT_ADAPTER_LE_DEVICE_DISCOVERY_FINISHED in case of the completion or cancellation of the discovery.
+ *
+ * @remarks To connect to peer Bluetooth device, you need to know its Bluetooth address. \n
+ * The device discovery can be stopped by bt_adapter_le_stop_device_discovery().
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_NOW_IN_PROGRESS Operation is now in progress
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @post This function invokes bt_adapter_le_device_discovery_state_changed_cb().
+ *
+ * @see bt_adapter_le_is_discovering()
+ * @see bt_adapter_le_device_discovery_state_changed_cb()
+ * @see bt_adapter_le_set_device_discovery_state_changed_cb()
+ * @see bt_adapter_le_unset_device_discovery_state_changed_cb()
+ */
+int bt_adapter_le_start_device_discovery(void);
+
+/**
+ * @deprecated Deprecated since 2.3.1
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Stops the LE device discovery, asynchronously.
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_NOT_IN_PROGRESS Operation is not in progress
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The device discovery must be in progress with bt_adapter_le_start_device_discovery().
+ * @post This function invokes bt_adapter_le_device_discovery_state_changed_cb().
+ *
+ * @see bt_adapter_le_is_discovering()
+ * @see bt_adapter_le_start_device_discovery()
+ * @see bt_adapter_le_set_device_discovery_state_changed_cb()
+ * @see bt_adapter_le_unset_device_discovery_state_changed_cb()
+ * @see bt_adapter_le_device_discovery_state_changed_cb()
+ */
+int bt_adapter_le_stop_device_discovery(void);
+
+/**
+ * @deprecated Deprecated since 2.3.1
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Checks for the LE device discovery is in progress or not.
+ * @since_tizen 2.3
+ *
+ * @remarks If Bluetooth LE discovery is in progress, other operations are not allowed and
+ * you have to either stop the LE discovery operation, or wait for it to be finished,
+ * before performing other operations.
+
+ * @param[out] is_discovering The discovering status: (@c true = in progress , @c false = not in progress )
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ *
+ * @see bt_adapter_le_start_device_discovery()
+ * @see bt_adapter_le_stop_device_discovery()
+ */
+int bt_adapter_le_is_discovering(bool *is_discovering);
+
+/**
+ * @deprecated Deprecated since 2.3.1
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Registers a callback function to be invoked when the LE device discovery state changes.
+ * @since_tizen 2.3
+ *
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @post bt_adapter_le_device_discovery_state_changed_cb() will be invoked.
+ *
+ * @see bt_initialize()
+ * @see bt_adapter_le_device_discovery_state_changed_cb()
+ * @see bt_adapter_le_unset_device_discovery_state_changed_cb()
+ */
+int bt_adapter_le_set_device_discovery_state_changed_cb(bt_adapter_le_device_discovery_state_changed_cb callback, void *user_data);
+
+/**
+ * @deprecated Deprecated since 2.3.1
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Unregisters the callback function.
+ * @since_tizen 2.3
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_initialize()
+ * @see bt_adapter_le_set_device_discovery_state_changed_cb()
+ */
+int bt_adapter_le_unset_device_discovery_state_changed_cb(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Starts the LE scan to find LE advertisement.
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @details If a LE advertisement is found, bt_adapter_le_scan_result_cb() will be invoked.
+ *
+ * @param[in] cb The callback to report the result of this function
+ * @param[in] user_data The user data to be passed when callback is called
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_NOW_IN_PROGRESS Operation is now in progress
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @post This function invokes bt_adapter_le_scan_result_cb().
+ *
+ * @see bt_adapter_le_scan_result_cb()
+ */
+int bt_adapter_le_start_scan(bt_adapter_le_scan_result_cb cb, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Stops the LE scan.
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_NOT_IN_PROGRESS Operation is not in progress
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The LE scan must be in progress with bt_adapter_le_start_scan().
+ *
+ * @see bt_adapter_le_start_scan()
+ */
+int bt_adapter_le_stop_scan(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Gets the service UUID list from the scan result information
+ * @since_tizen 2.3.1
+ *
+ * @remarks The @a uuids must be iterated as count and each pointed data must be released with free().
+ * Then uuids must be released with free(). \n
+ * 16-bit service UUID or 128-bit service UUID is supported. (e.g. 180F, 0000180F-0000-1000-8000-00805F9B34FB)
+ *
+ * @param[in] info The scan result information
+ * @param[in] pkt_type The packet type
+ * @param[out] uuids The list of string of the service uuid
+ * @param[out] count The count of the service UUIDs
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NO_DATA No data available
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_adapter_le_scan_result_cb()
+ */
+int bt_adapter_le_get_scan_result_service_uuids(const bt_adapter_le_device_scan_result_info_s *info,
+ bt_adapter_le_packet_type_e pkt_type, char ***uuids, int *count);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Gets the device name from the scan result information
+ * @since_tizen 2.3.1
+ *
+ * @remarks The @a name must be released with free() by you.
+ *
+ * @param[in] info The scan result information
+ * @param[in] pkt_type The packet type
+ * @param[out] name The device name
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NO_DATA No data available
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_adapter_le_scan_result_cb()
+ */
+int bt_adapter_le_get_scan_result_device_name(const bt_adapter_le_device_scan_result_info_s *info,
+ bt_adapter_le_packet_type_e pkt_type, char **name);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Gets the transmission power level from the scan result information
+ * @since_tizen 2.3.1
+ *
+ * @param[in] info The scan result information
+ * @param[in] pkt_type The packet type
+ * @param[out] power_level The transmission power level in dBm
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NO_DATA No data available
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_adapter_le_scan_result_cb()
+ */
+int bt_adapter_le_get_scan_result_tx_power_level(const bt_adapter_le_device_scan_result_info_s *info,
+ bt_adapter_le_packet_type_e pkt_type, int *power_level);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Gets the service solicitation UUID list from the scan result information
+ * @since_tizen 2.3.1
+ *
+ * @remarks The @a uuids must be iterated as count and each pointed data must be released with free().
+ * Then uuids must be released with free(). \n
+ * 16-bit service solicitation UUID or 128-bit service solicitaion UUID is supported.
+ * (e.g. 180F, 0000180F-0000-1000-8000-00805F9B34FB)
+ *
+ * @param[in] info The scan result information
+ * @param[in] pkt_type The packet type
+ * @param[out] uuids The list of string of the service solicitation uuid
+ * @param[out] count The count of the service UUIDs
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NO_DATA No data available
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_adapter_le_scan_result_cb()
+ */
+int bt_adapter_le_get_scan_result_service_solicitation_uuids(const bt_adapter_le_device_scan_result_info_s *info,
+ bt_adapter_le_packet_type_e pkt_type, char ***uuids, int *count);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Gets the service data list from the scan result information
+ * @since_tizen 2.3.1
+ *
+ * @remarks The @a data_list must be released with bt_adapter_le_free_service_data_list() by you .
+ *
+ * @param[in] info The scan result information
+ * @param[in] pkt_type The packet type
+ * @param[out] data_list The list of the service data
+ * @param[out] count The count of the service data list
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NO_DATA No data available
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_adapter_le_scan_result_cb()
+ */
+int bt_adapter_le_get_scan_result_service_data_list(const bt_adapter_le_device_scan_result_info_s *info,
+ bt_adapter_le_packet_type_e pkt_type, bt_adapter_le_service_data_s **data_list, int *count);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Frees service data list.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] data_list The list of the service data
+ * @param[in] count The count of the service data list
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_adapter_le_get_scan_result_service_data_list()
+ */
+int bt_adapter_le_free_service_data_list(bt_adapter_le_service_data_s *data_list, int count);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Gets the appearance from the scan result information
+ * @since_tizen 2.3.1
+ *
+ * @param[in] info The scan result information
+ * @param[in] pkt_type The packet type
+ * @param[out] appearance The appearance
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NO_DATA No data available
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_adapter_le_scan_result_cb()
+ */
+int bt_adapter_le_get_scan_result_appearance(const bt_adapter_le_device_scan_result_info_s *info,
+ bt_adapter_le_packet_type_e pkt_type, int *appearance);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Gets the manufacturer data from the scan result information
+ * @since_tizen 2.3.1
+ *
+ * @remarks The @a manufacturer_data must be released with free() by you.
+ *
+ * @param[in] info The scan result information
+ * @param[in] pkt_type The packet type
+ * @param[out] manufacturer_id The manufacturer ID
+ * @param[out] manufacturer_data The manufacturer data (byte array)
+ * @param[out] manufacturer_data_len The length of manufacturer data
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NO_DATA No data available
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_adapter_le_scan_result_cb()
+ */
+int bt_adapter_le_get_scan_result_manufacturer_data(const bt_adapter_le_device_scan_result_info_s *info,
+ bt_adapter_le_packet_type_e pkt_type, int *manufacturer_id, char **manufacturer_data, int *manufacturer_data_len);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Registers a callback function to be invoked when the Bluetooth adapter le state changes.
+ * @since_tizen 2.3
+ *
+ * @param[in] callback The callback function to invoke
+ * @param[in] user_data The user data to be passed to the callback function
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @post bt_adapter_le_state_changed_cb() will be invoked.
+ *
+ * @see bt_initialize()
+ * @see bt_adapter_le_state_changed_cb()
+ * @see bt_adapter_le_unset_state_changed_cb()
+ */
+int bt_adapter_le_set_state_changed_cb(bt_adapter_le_state_changed_cb callback, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Unregisters the callback function.
+ * @since_tizen 2.3
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_initialize()
+ * @see bt_adapter_le_set_state_changed_cb()
+ */
+int bt_adapter_le_unset_state_changed_cb(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief add address to whitelist for accepting scanning request.
+ * @since_tizen 2.3
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ *
+ * @remarks If the adress is in the whitelist then other LE devices are able to
+ * search this device. Before calling this API, make sure that the adapter is
+ * enabled. There is no callback event for this API.
+
+ * @param[in] address The other device's address
+ * @param[in] address_type The other device's address type
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Adapter is not enabled
+ * @retval #BT_ERROR_RESOURCE_BUSY Device or resource busy
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ *
+ * @see bt_adapter_le_start_advertising_new()
+ * @see bt_adapter_le_stop_advertising()
+ */
+int bt_adapter_le_add_white_list(const char *address, bt_device_address_type_e address_type);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief remove address from the whitelist for not accepting scanning request.
+ * @since_tizen 2.3
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ *
+ * @remarks If the adress is in the whitelist then other LE devices are able to
+ * search this device. Before calling this API, make sure that the adapter is
+ * enabled. There is no callback event for this API.
+ *
+ * @param[in] address The other device's address
+ * @param[in] address_type The other device's address type
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Adapter is not enabled
+ * @retval #BT_ERROR_RESOURCE_BUSY Device or resource busy
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ *
+ * @see bt_adapter_le_start_advertising_new()
+ * @see bt_adapter_le_stop_advertising()
+ */
+int bt_adapter_le_remove_white_list(const char *address, bt_device_address_type_e address_type);
+
+/**
+ * @internal
+ * @deprecated Deprecated since 2.3.1
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief clear address from the whitelist for not accepting scanning request.
+ * @since_tizen 2.3
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ *
+ * @remarks If the adress is in the whitelist then other LE devices are able to
+ * search this device. Before calling this API, make sure that the adapter is
+ * enabled. There is no callback event for this API.
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Adapter is not enabled
+ * @retval #BT_ERROR_RESOURCE_BUSY Device or resource busy
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ *
+ * @see bt_adapter_le_start_advertising_new()
+ * @see bt_adapter_le_stop_advertising()
+ */
+int bt_adapter_le_clear_white_list(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Create advertiser to advertise device's existence or respond to LE scanning reqeust.
+ * @since_tizen 2.3
+ *
+ * @param[out] advertiser The handle of advertiser
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_adapter_le_destroy_advertiser()
+ */
+int bt_adapter_le_create_advertiser(bt_advertiser_h *advertiser);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Destroy advertiser.
+ * @since_tizen 2.3
+ *
+ * @param[out] advertiser The handle of advertiser
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_adapter_le_create_advertiser()
+ */
+int bt_adapter_le_destroy_advertiser(bt_advertiser_h advertiser);
+
+/**
+ * @deprecated Deprecated since 2.3.1
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Set the data to be advertised or responded to scan request from LE scanning device.
+ * The maximum advertised or responded data size is 31 bytes
+ * including data type and system wide data.
+ * @since_tizen 2.3
+ *
+ * @remarks In case the data_type is local name or tx power level, you don't need to input data
+ * because the data value is written automatically by system.
+ *
+ * @param[in] advertiser The handle of advertiser
+ * @param[in] pkt_type The packet type
+ * @param[in] data_type The data type that is included in packet
+ * @param[in] data The data to be advertised or be responded to scan request from LE scanning device, no need in case of LOCAL_NAME or TX_POWER_LEVEL
+ * @param[in] data_size The size of data to be set.
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_QUOTA_EXCEEDED Quota exceeded
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_adapter_le_clear_advertising_data()
+ */
+int bt_adapter_le_add_advertising_data(bt_advertiser_h advertiser,
+ bt_adapter_le_packet_type_e pkt_type, bt_adapter_le_packet_data_type_e data_type,
+ void *data, unsigned int data_size);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Add a service UUID to advertise or scan response data.
+ * The maximum advertised or responded data size is 31 bytes
+ * including data type and system wide data.
+ * @since_tizen 2.3.1
+ *
+ * @remarks 16-bit UUID or 128-bit UUID is supported. (e.g. 180F, 0000180F-0000-1000-8000-00805F9B34FB)
+ *
+ * @param[in] advertiser The handle of advertiser
+ * @param[in] pkt_type The packet type
+ * @param[in] uuid The string of the service UUID.
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_QUOTA_EXCEEDED Quota exceeded
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_adapter_le_clear_advertising_data()
+ */
+int bt_adapter_le_add_advertising_service_uuid(bt_advertiser_h advertiser,
+ bt_adapter_le_packet_type_e pkt_type, const char *uuid);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Add a service solicitation UUID to advertise or scan response data.
+ * The maximum advertised or responded data size is 31 bytes
+ * including data type and system wide data.
+ * @since_tizen 2.3.1
+ *
+ * @remarks 16-bit service solicitation UUID or 128-bit service solicitation UUID is supported.
+ * (e.g. 180F, 0000180F-0000-1000-8000-00805F9B34FB)
+ *
+ * @param[in] advertiser The handle of advertiser
+ * @param[in] pkt_type The packet type
+ * @param[in] uuid The string of the service solicitation UUID.
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_QUOTA_EXCEEDED Quota exceeded
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_adapter_le_clear_advertising_data()
+ */
+int bt_adapter_le_add_advertising_service_solicitation_uuid(bt_advertiser_h advertiser,
+ bt_adapter_le_packet_type_e pkt_type, const char *uuid);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Add service data to advertise or scan response data.
+ * The maximum advertised or responded data size is 31 bytes
+ * including data type and system wide data.
+ * @since_tizen 2.3.1
+ *
+ * @remarks 16-bit UUID is supported. (e.g. 180F)
+ *
+ * @param[in] advertiser The handle of advertiser
+ * @param[in] pkt_type The packet type
+ * @param[in] uuid 16-bit UUID of the service
+ * @param[in] service_data The service data
+ * @param[in] service_data_len The data length of service data
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_QUOTA_EXCEEDED Quota exceeded
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_adapter_le_clear_advertising_data()
+ */
+int bt_adapter_le_add_advertising_service_data(bt_advertiser_h advertiser,
+ bt_adapter_le_packet_type_e pkt_type, const char *uuid,
+ const char *service_data, int service_data_len);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Sets the external appearance of this device to advertise or scan response data.
+ * Please refer to the adopted Bluetooth specification for the the appearance.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] advertiser The handle of advertiser
+ * @param[in] pkt_type The packet type
+ * @param[in] appearance The external appearance of device
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_QUOTA_EXCEEDED Quota exceeded
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_adapter_le_clear_advertising_data()
+ */
+int bt_adapter_le_set_advertising_appearance(bt_advertiser_h advertiser,
+ bt_adapter_le_packet_type_e pkt_type, int appearance);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Add manufacturer specific data to advertise or scan response data.
+ * Please refer to the Bluetooth Assigned Numbers provided by the Bluetooth SIG for a list of existing company identifiers.
+ * The maximum advertised or responded data size is 31 bytes
+ * including data type and system wide data.
+ * @since_tizen 2.3.1
+ *
+ *
+ * @param[in] advertiser The handle of advertiser
+ * @param[in] pkt_type The packet type
+ * @param[in] manufacturer_id Manufacturer identifier
+ * @param[in] manufacturer_data The manufacturer specific data
+ * @param[in] manufacturer_data_len The data length of manufacturer data
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_QUOTA_EXCEEDED Quota exceeded
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_adapter_le_clear_advertising_data()
+ */
+int bt_adapter_le_add_advertising_manufacturer_data(bt_advertiser_h advertiser,
+ bt_adapter_le_packet_type_e pkt_type, int manufacturer_id, const char *manufacturer_data, int manufacturer_data_len);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Set whether the device name should be included in advertise or scan response data.
+ * The maximum advertised or responded data size is 31 bytes
+ * including data type and system wide data.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] advertiser The handle of advertiser
+ * @param[in] pkt_type The packet type
+ * @param[in] include_name Whether the device name should be included
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_QUOTA_EXCEEDED Quota exceeded
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_adapter_le_clear_advertising_data()
+ */
+int bt_adapter_le_set_advertising_device_name(bt_advertiser_h advertiser,
+ bt_adapter_le_packet_type_e pkt_type, bool include_name);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Set whether the transmission power level should be included in advertise or scan response data.
+ * The maximum advertised or responded data size is 31 bytes
+ * including data type and system wide data.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] advertiser The handle of advertiser
+ * @param[in] pkt_type The packet type
+ * @param[in] include_tx_power Whether the transmission power level should be included
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_QUOTA_EXCEEDED Quota exceeded
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_adapter_le_clear_advertising_data()
+ */
+int bt_adapter_le_set_advertising_tx_power_level(bt_advertiser_h advertiser,
+ bt_adapter_le_packet_type_e pkt_type, bool include_tx_power);
+
+/**
+ * @deprecated Deprecated since 2.3.1
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Unset the data to be advertised or responded to scan request from LE scanning device.
+ * @since_tizen 2.3
+ *
+ * @param[in] advertiser The handle of advertiser
+ * @param[in] pkt_type The packet type
+ * @param[in] data_type The data type to be removed from selected packet
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_adapter_le_add_advertising_data()
+ * @see bt_adapter_le_clear_advertising_data()
+ */
+int bt_adapter_le_remove_advertising_data(bt_advertiser_h advertiser,
+ bt_adapter_le_packet_type_e pkt_type, bt_adapter_le_packet_data_type_e data_type);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Clear all data to be advertised or responded to scan request from LE scanning device.
+ * @since_tizen 2.3
+ *
+ * @param[in] advertiser The handle of advertiser
+ * @param[in] pkt_type The packet type to be cleared
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_adapter_le_add_advertising_data()
+ */
+int bt_adapter_le_clear_advertising_data(bt_advertiser_h advertiser, bt_adapter_le_packet_type_e pkt_type);
+
+/**
+ * @deprecated Deprecated since 2.3.1
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Start advertising with passed advertiser and advertising parameters.
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @details Once Bluetooth advertising is started, nearby Bluetooth LE(Low Energy) supported
+ * devices can know this device's existence. And one of them can make a connection reqeust,
+ * if it is allowed.
+ *
+ * @param[in] advertiser The handle of advertiser
+ * @param[in] adv_params The parameters of advertising \n
+ * If NULL is passed, default values which are defined in driver / controller are used.
+ * @param[in] cb The callback to report the result of this function
+ * @param[in] user_data The user data to be passed when callback is called
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_NOW_IN_PROGRESS Operation is now in progress
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @post This function invokes bt_adapter_le_advertising_state_changed_cb().
+ *
+ * @see bt_adapter_le_stop_advertising()
+ * @see bt_adapter_le_advertising_state_changed_cb()
+ */
+int bt_adapter_le_start_advertising(bt_advertiser_h advertiser, bt_adapter_le_advertising_params_s *adv_params,
+ bt_adapter_le_advertising_state_changed_cb cb, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Stops the advertising.
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @param[in] advertiser The handle of advertiser
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_NOT_IN_PROGRESS Operation is not in progress
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The advertising must be going on with bt_adapter_le_start_advertising_new().
+ * @post This function invokes bt_adapter_le_advertising_state_changed_cb().
+ *
+ * @see bt_adapter_le_start_advertising_new()
+ * @see bt_adapter_le_advertising_state_changed_cb()
+ */
+int bt_adapter_le_stop_advertising(bt_advertiser_h advertiser);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Start advertising with passed advertiser and advertising parameters.
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @details Once Bluetooth advertising is started, nearby Bluetooth LE(Low Energy) supported
+ * devices can know this device's existence. And one of them can make a connection reqeust,
+ * if it is allowed.
+ *
+ * @param[in] advertiser The handle of advertiser
+ * @param[in] cb The callback to report the result of this function
+ * @param[in] user_data The user data to be passed when callback is called
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_NOW_IN_PROGRESS Operation is now in progress
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @post This function invokes bt_adapter_le_advertising_state_changed_cb().
+ *
+ * @see bt_adapter_le_stop_advertising()
+ * @see bt_adapter_le_advertising_state_changed_cb()
+ */
+int bt_adapter_le_start_advertising_new(bt_advertiser_h advertiser, bt_adapter_le_advertising_state_changed_cb cb, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Set advertising mode to control the advertising power and latency.
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @param[in] advertiser The handle of advertiser
+ * @param[in] mode The mode of advertising
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_NOW_IN_PROGRESS Operation is now in progress
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_adapter_le_start_advertising_new()
+ */
+int bt_adapter_le_set_advertising_mode(bt_advertiser_h advertiser, bt_adapter_le_advertising_mode_e mode);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Set whether the advertising type should be connectable or non-connectable
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @param[in] advertiser The handle of advertiser
+ * @param[in] connectable The type of advertising
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_NOW_IN_PROGRESS Operation is now in progress
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_adapter_le_start_advertising_new()
+ */
+int bt_adapter_le_set_advertising_connectable(bt_advertiser_h advertiser, bool connectable);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Sets the Privacy feature state of local Bluetooth adapter.
+ * @since_tizen 2.3
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ *
+ * @param[in] enable_privacy The privacy feature to set/unset.
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_LE_ENABLED.
+ *
+ */
+int bt_adapter_le_enable_privacy(bool enable_privacy);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Creates a bond with a remote Bluetooth device, asynchronously.
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @remarks A bond can be destroyed by bt_device_destroy_bond().\n
+ * The bonding request can be cancelled by bt_device_cancel_bonding().
+ *
+ * @param[in] remote_address The address of the remote Bluetooth device with which the bond should be created
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_RESOURCE_BUSY Device or resource busy
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @pre The remote device must be discoverable with bt_adapter_start_device_discovery().
+ * @post This function invokes bt_device_bond_created_cb().
+ *
+ * @see bt_adapter_start_device_discovery()
+ * @see bt_device_bond_created_cb()
+ * @see bt_device_cancel_bonding()
+ * @see bt_device_destroy_bond()
+ * @see bt_device_set_bond_created_cb()
+ * @see bt_device_unset_bond_created_cb()
+ */
+int bt_device_create_bond(const char *remote_address);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Creates a bond with a remote Bluetooth device, asynchronously.
+ * @since_tizen 2.3
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ *
+ * @remarks A bond can be destroyed by bt_device_destroy_bond().\n
+ * The bonding request can be cancelled by bt_device_cancel_bonding().
+ *
+ * @param[in] remote_address The address of the remote Bluetooth device with which the bond should be created
+ * @param[in] conn_type The connection type(LE or BREDR) to create bond with remote device
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_RESOURCE_BUSY Device or resource busy
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @pre The remote device must be discoverable with bt_adapter_start_device_discovery().
+ * @post This function invokes bt_device_bond_created_cb().
+ *
+ * @see bt_adapter_start_device_discovery()
+ * @see bt_device_create_bond()
+ * @see bt_device_bond_created_cb()
+ * @see bt_device_cancel_bonding()
+ * @see bt_device_destroy_bond()
+ * @see bt_device_set_bond_created_cb()
+ * @see bt_device_unset_bond_created_cb()
+ */
+int bt_device_create_bond_by_type(const char *remote_address,
+ bt_device_connection_link_type_e conn_type);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Cancels the bonding process.
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @remarks Use this function when the remote Bluetooth device is not responding to the
+ * bond request or you wish to cancel the bonding request.
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_NOT_IN_PROGRESS Operation not in progress
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The creating a bond must be in progress by bt_device_create_bond().
+ *
+ * @see bt_device_create_bond()
+ * @see bt_device_bond_created_cb()
+ * @see bt_device_set_bond_created_cb()
+ * @see bt_device_unset_bond_created_cb()
+ */
+int bt_device_cancel_bonding(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Destroys the bond, asynchronously.
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @param[in] remote_address The address of the remote Bluetooth device to remove bonding
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_RESOURCE_BUSY Device or resource busy
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_BONDED Remote device not bonded
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @pre The bond with the remote device must be created with bt_device_create_bond().
+ * @post This function invokes bt_device_bond_destroyed_cb().
+ *
+ * @see bt_device_create_bond()
+ * @see bt_device_bond_destroyed_cb()
+ * @see bt_device_set_bond_destroyed_cb()
+ * @see bt_device_unset_bond_destroyed_cb()
+ */
+int bt_device_destroy_bond(const char *remote_address);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Sets an alias for the bonded device.
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @param[in] remote_address The address of the remote Bluetooth device
+ * @param[in] alias The alias of the remote Bluetooth device
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_BONDED Remote device not bonded
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @pre The bond with the remote device must be created with bt_device_create_bond().
+ *
+ * @see bt_device_create_bond()
+ */
+int bt_device_set_alias(const char *remote_address, const char *alias);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Sets the authorization of a bonded device, asynchronously.
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @remarks Once a device is authorized, you don't need to receive a confirmation.
+ *
+ * @param[in] remote_address The address of the remote Bluetooth device to authorize
+ * @param[in] authorization_state The Bluetooth authorization state
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_BONDED Remote device not bonded
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @pre The bond with the remote device must be created with bt_device_create_bond().
+ * @post bt_device_authorization_changed_cb() will be invoked.
+ *
+ * @see bt_device_create_bond()
+ * @see bt_device_authorization_changed_cb()
+ * @see bt_device_set_authorization_changed_cb()
+ * @see bt_device_unset_authorization_changed_cb()
+ */
+int bt_device_set_authorization(const char *remote_address, bt_device_authorization_e authorization_state);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Starts the search for services supported by the specified device, asynchronously.
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @remarks If creating a bond succeeds, which means bt_device_bond_created_cb() is called with result #BT_ERROR_NONE,
+ * then you don't need to run this function.\n
+ * The service search takes a couple of seconds to complete normally. \n
+ *
+ * @param[in] remote_address The address of the remote Bluetooth device whose services need to be checked
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_BONDED Remote device not bonded
+ * @retval #BT_ERROR_SERVICE_SEARCH_FAILED Service search failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @pre The remote device must be discoverable with bt_adapter_start_device_discovery().
+ * @pre The bond with the remote device must be created with bt_device_create_bond().
+ * @post This function invokes bt_device_service_searched_cb().
+ *
+ * @see bt_adapter_start_device_discovery()
+ * @see bt_device_create_bond()
+ * @see bt_device_bond_created_cb()
+ * @see bt_device_service_searched_cb()
+ * @see bt_device_set_service_searched_cb()
+ * @see bt_device_unset_service_searched_cb()
+ */
+int bt_device_start_service_search(const char *remote_address);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Cancels service search process.
+ * @since_tizen 2.3
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_BONDED Remote device not bonded
+ * @retval #BT_ERROR_NOT_IN_PROGRESS Operation not in progress
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The service search must be in progress by bt_device_start_service_search().
+ *
+ * @see bt_device_start_service_search()
+ * @see bt_device_service_searched_cb()
+ * @see bt_device_set_service_searched_cb()
+ * @see bt_device_unset_service_searched_cb()
+ */
+int bt_device_cancel_service_search(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Gets the connected profiles.
+ * @since_tizen 2.3
+ * @param[in] remote_address The address of the remote device
+ * @param[in] callback The callback function to invoke
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @post bt_device_connected_profile() will be invoked.
+ * @see bt_device_connected_profile()
+ */
+int bt_device_foreach_connected_profiles(const char *remote_address, bt_device_connected_profile callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Gets the profile connected status.
+ * @since_tizen 2.3
+ * @param[in] remote_address The address of the remote device
+ * @param[in] bt_profile wish to know bt_profile
+ * @param[out] connected_status the connected status
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_BONDED Remote device not bonded
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ */
+int bt_device_is_profile_connected(const char *remote_address, bt_profile_e bt_profile,
+ bool *connected_status);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Registers a callback function to be invoked when the bond creates.
+ * @since_tizen 2.3
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @post bt_device_bond_created_cb() will be invoked.
+ * @see bt_initialize()
+ * @see bt_device_bond_created_cb()
+ * @see bt_device_unset_bond_created_cb()
+ */
+int bt_device_set_bond_created_cb(bt_device_bond_created_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Unregisters the callback function.
+ * @since_tizen 2.3
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @see bt_initialize()
+ * @see bt_device_set_bond_created_cb()
+ */
+int bt_device_unset_bond_created_cb(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Registers a callback function to be invoked when the bond destroys.
+ * @since_tizen 2.3
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @post bt_device_bond_destroyed_cb() will be invoked.
+ * @see bt_initialize()
+ * @see bt_device_bond_destroyed_cb()
+ * @see bt_device_unset_bond_destroyed_cb()
+ */
+int bt_device_set_bond_destroyed_cb(bt_device_bond_destroyed_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Unregisters the callback function.
+ * @since_tizen 2.3
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @see bt_initialize()
+ * @see bt_device_set_bond_destroyed_cb()
+ */
+int bt_device_unset_bond_destroyed_cb(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Registers a callback function to be invoked when the authorization of device changes.
+ * @since_tizen 2.3
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @post bt_device_authorization_changed_cb() will be invoked.
+ * @see bt_initialize()
+ * @see bt_device_authorization_changed_cb()
+ * @see bt_device_set_authorization_changed_cb()
+ * @see bt_device_unset_authorization_changed_cb()
+ */
+int bt_device_set_authorization_changed_cb(bt_device_authorization_changed_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Unregisters the callback function.
+ * @since_tizen 2.3
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @see bt_initialize()
+ * @see bt_device_set_authorization_changed_cb()
+ */
+int bt_device_unset_authorization_changed_cb(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Registers a callback function to be invoked when the process of service search finishes.
+ * @since_tizen 2.3
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @post bt_device_service_searched_cb() will be invoked.
+ * @see bt_initialize()
+ * @see bt_device_service_searched_cb()
+ * @see bt_device_unset_service_searched_cb()
+ */
+int bt_device_set_service_searched_cb(bt_device_service_searched_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Unregisters the callback function.
+ * @since_tizen 2.3
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @see bt_initialize()
+ * @see bt_device_set_service_searched_cb()
+ */
+int bt_device_unset_service_searched_cb(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Registers a callback function to be invoked when the connection state is changed.
+ * @since_tizen 2.3
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @post bt_device_connection_state_changed_cb() will be invoked.
+ * @see bt_initialize()
+ * @see bt_device_connection_state_changed_cb()
+ * @see bt_device_unset_connection_state_changed_cb()
+ */
+int bt_device_set_connection_state_changed_cb(bt_device_connection_state_changed_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Unregisters the callback function to be invoked when the connection state is changed.
+ * @since_tizen 2.3
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @see bt_initialize()
+ * @see bt_device_set_connection_state_changed_cb()
+ */
+int bt_device_unset_connection_state_changed_cb(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Registers a rfcomm server socket with a specific UUID.
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @remarks A socket can be destroyed by bt_socket_destroy_rfcomm().
+ *
+ * @param[in] service_uuid The UUID of service to provide
+ * @param[out] socket_fd The file descriptor of socket to listen
+ * @return 0 on success, otherwise a negative error value.
+ *
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ *
+ * @see bt_socket_listen_and_accept_rfcomm()
+ * @see bt_socket_destroy_rfcomm()
+ */
+int bt_socket_create_rfcomm(const char *service_uuid, int *socket_fd);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Removes the rfcomm server socket which was created using bt_socket_create_rfcomm().
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @remarks If callback function bt_socket_connection_state_changed_cb() is set and the remote Bluetooth device is connected,
+ * then bt_socket_connection_state_changed_cb() will be called when this function is finished successfully.
+ *
+ * @param[in] socket_fd The file descriptor of socket (which was created using bt_socket_create_rfcomm()) to destroy
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The socket must be created with bt_socket_create_rfcomm().
+ * @post If callback function bt_socket_connection_state_changed_cb() is set and the remote Bluetooth device is connected,
+ * then bt_socket_connection_state_changed_cb() will be called.
+ * @see bt_socket_create_rfcomm()
+ * @see bt_socket_connection_state_changed_cb()
+ * @see bt_socket_set_connection_state_changed_cb()
+ * @see bt_socket_unset_connection_state_changed_cb()
+ */
+int bt_socket_destroy_rfcomm(int socket_fd);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Starts listening on passed rfcomm socket and accepts connection requests.
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @details Pop-up is shown automatically when a RFCOMM connection is requested.
+ * bt_socket_connection_state_changed_cb() will be called with
+ * #BT_SOCKET_CONNECTED if you click "yes" and connection is finished successfully.
+ * @param[in] socket_fd The file descriptor of socket on which start to listen
+ * @param[in] max_pending_connections The maximum number of pending connections
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The socket must be created with bt_socket_create_rfcomm().
+ * @post If callback function bt_socket_connection_state_changed_cb() is set,
+ * then bt_socket_connection_state_changed_cb() will be called when the remote Bluetooth device is connected.
+ * @see bt_socket_create_rfcomm()
+ * @see bt_socket_connection_state_changed_cb()
+ * @see bt_socket_set_connection_state_changed_cb()
+ * @see bt_socket_unset_connection_state_changed_cb()
+ */
+int bt_socket_listen_and_accept_rfcomm(int socket_fd, int max_pending_connections);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Starts listening on passed rfcomm socket.
+ * @since_tizen 2.3
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @details bt_socket_connection_requested_cb() will be called when a RFCOMM connection is requested.
+ *
+ * @param[in] socket_fd The file descriptor socket on which start to listen
+ * @param[in] max_pending_connections The number of pending connections
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The socket must be created with bt_socket_create_rfcomm().
+ * @post This function invokes bt_socket_connection_state_changed_cb().
+ *
+ * @see bt_socket_create_rfcomm()
+ * @see bt_socket_set_connection_requested_cb()
+ * @see bt_socket_unset_connection_requested_cb()
+ * @see bt_socket_connection_requested_cb()
+ */
+int bt_socket_listen(int socket_fd, int max_pending_connections);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Accepts a connection request.
+ * @since_tizen 2.3
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] requested_socket_fd The file descriptor of socket on which a connection is requested
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The connection is requested by bt_socket_connection_requested_cb().
+ * @see bt_socket_create_rfcomm()
+ * @see bt_socket_connection_requested_cb()
+ * @see bt_socket_listen()
+ * @see bt_socket_reject()
+*/
+int bt_socket_accept(int requested_socket_fd);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Rejects a connection request.
+ * @since_tizen 2.3
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] socket_fd The file descriptor of socket on which a connection is requested
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The connection is requested by bt_socket_connection_requested_cb().
+ * @see bt_socket_create_rfcomm()
+ * @see bt_socket_connection_requested_cb()
+ * @see bt_socket_listen()
+ * @see bt_socket_accept()
+ */
+int bt_socket_reject(int socket_fd);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Connects to a specific RFCOMM based service on a remote Bluetooth device UUID, asynchronously.
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @remarks A connection can be disconnected by bt_socket_disconnect_rfcomm().
+ *
+ * @param[in] remote_address The address of the remote Bluetooth device
+ * @param[in] service_uuid The UUID of service provided by the remote Bluetooth device
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @pre The remote device must be discoverable with bt_adapter_start_device_discovery().
+ * @pre The bond with the remote device must be created with bt_device_create_bond().
+ * @post This function invokes bt_socket_connection_state_changed_cb().
+ *
+ * @see bt_device_create_bond()
+ * @see bt_adapter_start_device_discovery()
+ * @see bt_device_start_service_search()
+ * @see bt_socket_disconnect_rfcomm()
+ * @see bt_socket_connection_state_changed_cb()
+ * @see bt_socket_set_connection_state_changed_cb()
+ * @see bt_socket_unset_connection_state_changed_cb()
+ */
+int bt_socket_connect_rfcomm(const char *remote_address, const char *service_uuid);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Disconnects the RFCOMM connection with the given file descriptor of conneted socket.
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @param[in] socket_fd The file descriptor of socket to close which was received using bt_socket_connection_state_changed_cb().
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The connection must be established.
+ *
+ * @see bt_socket_connection_state_changed_cb()
+ * @see bt_socket_set_connection_state_changed_cb()
+ * @see bt_socket_unset_connection_state_changed_cb()
+ */
+int bt_socket_disconnect_rfcomm(int socket_fd);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Sends data to the connected device.
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @remark The specific error code can be obtained using the get_last_result() method. Error codes are described in Exception section.
+ *
+ * @param[in] socket_fd The file descriptor of connected socket which was received using bt_socket_connection_state_changed_cb()
+ * @param[in] data The data to be sent
+ * @param[in] length The length of data to be sent
+ *
+ * @return the number of bytes written (zero indicates nothing was written).
+ * @retval On error, -1 is returned, and errno is set appropriately. See write 2 man page.
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ * @exception BT_ERROR_PERMISSION_DENIED Permission denied
+ * @exception BT_ERROR_AGAIN Resource temporarily unavailable
+ *
+ * @pre The connection must be established.
+ *
+ * @see bt_socket_connection_state_changed_cb()
+ * @see bt_socket_set_connection_state_changed_cb()
+ * @see bt_socket_unset_connection_state_changed_cb()
+ */
+int bt_socket_send_data(int socket_fd, const char *data, int length);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Register a callback function that will be invoked when you receive data.
+ * @since_tizen 2.3
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @post bt_socket_data_received_cb() will be invoked.
+ * @see bt_initialize()
+ * @see bt_socket_data_received_cb()
+ * @see bt_socket_set_data_received_cb()
+ * @see bt_socket_unset_data_received_cb()
+ */
+int bt_socket_set_data_received_cb(bt_socket_data_received_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Unregisters the callback function.
+ * @since_tizen 2.3
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @see bt_initialize()
+ * @see bt_socket_data_received_cb()
+ * @see bt_socket_set_data_received_cb()
+ */
+int bt_socket_unset_data_received_cb(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Register a callback function that will be invoked when a RFCOMM connection is requested.
+ * @since_tizen 2.3
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @post If you listen and accept a socket by bt_socket_listen_and_accept_rfcomm(),
+ bt_socket_connection_requested_cb() will be invoked.
+ * @see bt_initialize()
+ * @see bt_socket_unset_connection_requested_cb()
+ */
+int bt_socket_set_connection_requested_cb(bt_socket_connection_requested_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Unregisters the callback function.
+ * @since_tizen 2.3
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @see bt_initialize()
+ * @see bt_socket_set_connection_requested_cb()
+ * @see bt_socket_connection_requested_cb()
+ */
+int bt_socket_unset_connection_requested_cb(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Register a callback function that will be invoked when the connection state changes.
+ * @since_tizen 2.3
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @post bt_socket_connection_state_changed_cb() will be invoked.
+ * @see bt_initialize()
+ * @see bt_socket_connection_state_changed_cb()
+ * @see bt_socket_unset_connection_state_changed_cb()
+ */
+int bt_socket_set_connection_state_changed_cb(bt_socket_connection_state_changed_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Unregisters the callback function.
+ * @since_tizen 2.3
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @see bt_initialize()
+ * @see bt_socket_connection_state_changed_cb()
+ * @see bt_socket_set_connection_state_changed_cb()
+ */
+int bt_socket_unset_connection_state_changed_cb(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_SERVER_MODULE
+ * @brief Initializes the Bluetooth OPP server requested by bt_opp_server_push_requested_cb().
+ * @since_tizen 2.3
+ * @details The popup appears when an OPP connection is requested from a remote device.
+ * If you accept the request, then connection will be established and bt_opp_server_push_requested_cb() will be called.
+ * At that time, you can call either bt_opp_server_accept() or bt_opp_server_reject().
+ * @remarks This function must be called to start Bluetooth OPP server. You must free all resources of the Bluetooth service
+ * by calling bt_opp_server_deinitialize() if Bluetooth OPP service is no longer needed.
+ * @param[in] destination The destination path
+ * @param[in] push_requested_cb The callback called when a push is requested
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_RESOURCE_BUSY Device or resource busy
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_opp_server_push_requested_cb()
+ * @see bt_opp_server_deinitialize()
+ * @see bt_opp_server_accept()
+ * @see bt_opp_server_reject()
+ */
+int bt_opp_server_initialize(const char *destination, bt_opp_server_push_requested_cb push_requested_cb, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_SERVER_MODULE
+ * @brief Initializes the Bluetooth OPP server requested by bt_opp_server_connection_requested_cb().
+ * @since_tizen 2.3
+ * @details No popup appears when an OPP connection is requested from a remote device.
+ * Instead, @a connection_requested_cb() will be called.
+ * At that time, you can call either bt_opp_server_accept() or bt_opp_server_reject().
+ * @remarks This function must be called to start Bluetooth OPP server. \n
+ * You must free all resources of the Bluetooth service by calling bt_opp_server_deinitialize() if Bluetooth OPP service is no longer needed.
+ * @param[in] destination The destination path
+ * @param[in] connection_requested_cb The callback called when an OPP connection is requested
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_RESOURCE_BUSY Device or resource busy
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_opp_server_connection_requested_cb()
+ * @see bt_opp_server_deinitialize()
+ * @see bt_opp_server_accept()
+ * @see bt_opp_server_reject()
+ */
+int bt_opp_server_initialize_by_connection_request(const char *destination, bt_opp_server_connection_requested_cb connection_requested_cb, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_SERVER_MODULE
+ * @brief Denitializes the Bluetooth OPP server.
+ * @since_tizen 2.3
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_opp_server_deinitialize()
+ */
+int bt_opp_server_deinitialize(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_SERVER_MODULE
+ * @brief Accepts the push request from the remote device.
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @remarks If you initialize OPP server by bt_opp_server_initialize_by_connection_request(), then name is ignored.
+ * You can cancel the pushes by bt_opp_server_cancel_transfer() with transfer_id.
+ * @param[in] progress_cb The callback called when a file is being transfered
+ * @param[in] finished_cb The callback called when a transfer is finished
+ * @param[in] name The name to store. This can be NULL if you initialize OPP server by bt_opp_server_initialize_by_connection_request().
+ * @param[in] user_data The user data to be passed to the callback function
+ * @param[out] transfer_id The ID of transfer
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOW_IN_PROGRESS Operation now in progress
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_opp_server_reject()
+ */
+int bt_opp_server_accept(bt_opp_server_transfer_progress_cb progress_cb, bt_opp_server_transfer_finished_cb finished_cb, const char *name,
+ void *user_data, int *transfer_id);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_SERVER_MODULE
+ * @brief Rejects the push request from the remote device.
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_opp_server_accept()
+ */
+int bt_opp_server_reject(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_SERVER_MODULE
+ * @brief Cancels the transfer.
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @param[in] transfer_id The ID of transfer
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_opp_server_accept()
+ */
+int bt_opp_server_cancel_transfer(int transfer_id);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_SERVER_MODULE
+ * @brief Sets the destination path of file to be pushed.
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @param[in] destination The destination path of file to be pushed
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ */
+int bt_opp_server_set_destination(const char *destination);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_CLIENT_MODULE
+ * @brief Initializes the Bluetooth OPP client.
+ * @since_tizen 2.3
+ * @remarks This function must be called before Bluetooth OPP client starts. \n
+ * You must free all resources of the Bluetooth service by calling bt_opp_client_deinitialize()
+ * if Bluetooth OPP service is no longer needed.
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_RESOURCE_BUSY Device or resource busy
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_opp_client_deinitialize()
+ */
+int bt_opp_client_initialize(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_CLIENT_MODULE
+ * @brief Denitializes the Bluetooth OPP client.
+ * @since_tizen 2.3
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_opp_client_initialize()
+ */
+int bt_opp_client_deinitialize(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_CLIENT_MODULE
+ * @brief Adds file to be pushed.
+ * @since_tizen 2.3
+ * @param[in] file The path of file to be pushed
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_opp_client_clear_files()
+ * @see bt_opp_client_push_files()
+ */
+int bt_opp_client_add_file(const char *file);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_CLIENT_MODULE
+ * @brief Adds file to be pushed.
+ * @since_tizen 2.3
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_opp_client_add_file()
+ * @see bt_opp_client_push_files()
+ */
+int bt_opp_client_clear_files(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_CLIENT_MODULE
+ * @brief Pushes the file to the remote device, asynchronously.
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @details At first, bt_opp_client_push_responded_cb() will be called when OPP server responds to the push request.
+ * After connection is established, bt_opp_client_push_progress_cb() will be called repeatedly until a file is tranfered completely.
+ * If you send several files, then bt_opp_client_push_progress_cb() with another file will be called repeatedly until the file is tranfered completely.
+ * bt_opp_client_push_finished_cb() will be called when the push request is finished.
+ * @param[in] remote_address The remote address
+ * @param[in] responded_cb The callback called when OPP server responds to the push request
+ * @param[in] progress_cb The callback called when each file is being transfered
+ * @param[in] finished_cb The callback called when the push request is finished
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOW_IN_PROGRESS Operation now in progress
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_opp_client_initialize()
+ * @see bt_opp_client_cancel_push
+ */
+int bt_opp_client_push_files(const char *remote_address, bt_opp_client_push_responded_cb responded_cb,
+ bt_opp_client_push_progress_cb progress_cb, bt_opp_client_push_finished_cb finished_cb, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_CLIENT_MODULE
+ * @brief Cancels the push request in progress, asynchronously.
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre bt_opp_client_push_files() must be called.
+ * @post bt_opp_client_push_finished_cb() will be invoked with result #BT_ERROR_CANCELLED,
+ * which is a parameter of bt_opp_client_push_files().
+ * @see bt_opp_client_initialize()
+ * @see bt_opp_client_push_files()
+ */
+int bt_opp_client_cancel_push(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_HID_MODULE
+ * @brief Initializes the Bluetooth HID(Human Interface Device) Host.
+ * @since_tizen 2.3
+ * @remarks This function must be called before Bluetooth HID Host starts. \n
+ * You must free all resources of the Bluetooth service by calling bt_hid_host_deinitialize()
+ * if Bluetooth HID Host service is no longer needed.
+ * @param[in] connection_cb The callback called when the connection state is changed
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @see bt_initialize()
+ * @see bt_hid_host_deinitialize()
+ */
+int bt_hid_host_initialize(bt_hid_host_connection_state_changed_cb connection_cb, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_HID_MODULE
+ * @brief Deinitializes the Bluetooth HID(Human Interface Device) Host.
+ * @since_tizen 2.3
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth HID service must be initialized with bt_hid_host_initialize().
+ * @see bt_hid_host_initialize()
+ */
+int bt_hid_host_deinitialize(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_HID_MODULE
+ * @brief Connects the remote device with the HID(Human Interface Device) service, asynchronously.
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @param[in] remote_address The remote address
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The local device must be bonded with the remote device by bt_device_create_bond().
+ * @pre The Bluetooth HID service must be initialized with bt_hid_host_initialize().
+ * @post bt_hid_host_connection_state_changed_cb() will be invoked.
+ * @see bt_hid_host_disconnect()
+ * @see bt_hid_host_connection_state_changed_cb()
+ */
+int bt_hid_host_connect(const char *remote_address);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_HID_MODULE
+ * @brief Disconnects the remote device with the HID(Human Interface Device) service, asynchronously.
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @param[in] remote_address The remote address
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device must be connected by bt_hid_host_connect().
+ * @post bt_hid_host_connection_state_changed_cb() will be invoked.
+ * @see bt_hid_host_connect()
+ * @see bt_hid_host_connection_state_changed_cb()
+ */
+int bt_hid_host_disconnect(const char *remote_address);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_MODULE
+ * @brief Initializes the Bluetooth profiles related with audio.
+ * @since_tizen 2.3
+ * @remarks This function must be called before Bluetooth profiles related with audio starts. \n
+ * You must free all resources of the this service by calling bt_audio_deinitialize()
+ * if Bluetooth profiles related with audio service is no longer needed.
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @see bt_initialize()
+ * @see bt_audio_deinitialize()
+ */
+int bt_audio_initialize(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_MODULE
+ * @brief Deinitializes the Bluetooth profiles related with audio.
+ * @since_tizen 2.3
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @see bt_audio_initialize()
+ */
+int bt_audio_deinitialize(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_MODULE
+ * @brief Connects the remote device with the given audio profile, asynchronously.
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @details If you input type as #BT_AUDIO_PROFILE_TYPE_ALL and connection request succeeds, then bt_audio_connection_state_changed_cb() will be called twice
+ * when #BT_AUDIO_PROFILE_TYPE_HSP_HFP is connected and #BT_AUDIO_PROFILE_TYPE_A2DP is connected.
+ * @param[in] remote_address The remote address
+ * @param[in] type The type of audio profile
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @pre The local device must be bonded with the remote device by bt_device_create_bond().
+ * @post bt_audio_connection_state_changed_cb() will be invoked.
+ * @see bt_audio_disconnect()
+ * @see bt_audio_connection_state_changed_cb()
+ */
+int bt_audio_connect(const char *remote_address, bt_audio_profile_type_e type);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_MODULE
+ * @brief Disconnects the remote device with the given audio profile, asynchronously.
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @details If you input type as #BT_AUDIO_PROFILE_TYPE_ALL and disconnection request succeeds, then bt_audio_connection_state_changed_cb() will be called twice
+ * when #BT_AUDIO_PROFILE_TYPE_HSP_HFP is disconnected and #BT_AUDIO_PROFILE_TYPE_A2DP is disconnected.
+ * @param[in] remote_address The remote address
+ * @param[in] type The type of audio profile
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device must be connected by bt_audio_connect().
+ * @post bt_audio_connection_state_changed_cb() will be invoked.
+ * @see bt_audio_connect()
+ * @see bt_audio_connection_state_changed_cb()
+ */
+int bt_audio_disconnect(const char *remote_address, bt_audio_profile_type_e type);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_MODULE
+ * @brief Registers a callback function that will be invoked when the connection state is changed.
+ * @since_tizen 2.3
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @see bt_audio_initialize()
+ * @see bt_audio_connection_state_changed_cb()
+ */
+int bt_audio_set_connection_state_changed_cb(bt_audio_connection_state_changed_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_MODULE
+ * @brief Unregisters a callback function that will be invoked when the connection state is changed.
+ * @since_tizen 2.3
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @see bt_audio_initialize()
+ * @see bt_audio_connection_state_changed_cb()
+ * @see bt_audio_set_connection_state_changed_cb()
+ */
+int bt_audio_unset_connection_state_changed_cb(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Opens a SCO(Synchronous Connection Oriented link) to connected remote device, asynchronously.
+ * @since_tizen 2.3
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_ALREADY_DONE Operation is already done
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio device must be connected with bt_audio_connect().
+ * @post bt_ag_sco_state_changed_cb() will be invoked.
+ * @see bt_ag_close_sco()
+ * @see bt_ag_sco_state_changed_cb()
+ * @see bt_audio_connect()
+ */
+int bt_ag_open_sco(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Closes an opened SCO(Synchronous Connection Oriented link), asynchronously.
+ * @since_tizen 2.3
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The SCO must be opened with bt_ag_open_sco().
+ * @post bt_ag_sco_state_changed_cb() will be invoked.
+ * @see bt_ag_open_sco()
+ * @see bt_ag_sco_state_changed_cb()
+ */
+int bt_ag_close_sco(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Checks whether an opened SCO(Synchronous Connection Oriented link) exists or not.
+ * @since_tizen 2.3
+ * @param[out] opened The SCO status: (@c true = opened, @c false = not opened)
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @see bt_ag_open_sco()
+ * @see bt_ag_close_sco()
+ */
+int bt_ag_is_sco_opened(bool *opened);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Registers a callback function that will be invoked when the SCO(Synchronous Connection Oriented link) state is changed.
+ * @since_tizen 2.3
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @see bt_audio_initialize()
+ * @see bt_ag_sco_state_changed_cb()
+ * @see bt_ag_unset_sco_state_changed_cb()
+ */
+int bt_ag_set_sco_state_changed_cb(bt_ag_sco_state_changed_cb callback, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Unregisters a callback function that will be invoked when the SCO(Synchronous Connection Oriented link) state is changed.
+ * @since_tizen 2.3
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @see bt_audio_initialize()
+ * @see bt_ag_sco_state_changed_cb()
+ * @see bt_ag_set_sco_state_changed_cb()
+ */
+int bt_ag_unset_sco_state_changed_cb(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Notifies the call event to the remote bluetooth device.
+ * @since_tizen 2.3
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @remarks Before notifying #BT_AG_CALL_EVENT_ANSWERED or #BT_AG_CALL_EVENT_DIALING, you should open SCO(Synchronous Connection Oriented link)
+ * if Bluetooth Hands-Free need SCO connection.
+ * @param[in] event The call event
+ * @param[in] call_id The call ID
+ * @param[in] phone_number The phone number. You must set this value in case of #BT_AG_CALL_EVENT_DIALING and #BT_AG_CALL_EVENT_INCOMING.
+ * In other cases, this value can be NULL.
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio device must be connected with bt_audio_connect().
+ * @see bt_audio_connect()
+ */
+int bt_ag_notify_call_event(bt_ag_call_event_e event, unsigned int call_id, const char *phone_number);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Notifies the call list to the remote bluetooth device.
+ * @since_tizen 2.3
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] list The call list
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio device must be connected with bt_audio_connect().
+ * @see bt_audio_connect()
+ */
+int bt_ag_notify_call_list(bt_call_list_h list);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Notifies the state of voice recognition.
+ * @since_tizen 2.3
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] state The state of voice recognition: (@c true = enabled, @c false = disabled)
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio device must be connected with bt_audio_connect().
+ * @see bt_audio_connect()
+ */
+int bt_ag_notify_voice_recognition_state(bool state);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Registers a callback function that will be invoked when a call handling event happened from Hands-Free.
+ * @since_tizen 2.3
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @see bt_audio_initialize()
+ * @see bt_ag_call_handling_event_cb()
+ * @see bt_ag_unset_call_handling_event_cb()
+ */
+int bt_ag_set_call_handling_event_cb(bt_ag_call_handling_event_cb callback, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Unregisters a callback function that will be invoked when a call handling event happened from Hands-Free.
+ * @since_tizen 2.3
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @see bt_audio_initialize()
+ * @see bt_ag_call_handling_event_cb()
+ * @see bt_ag_set_call_handling_event_cb()
+ */
+int bt_ag_unset_call_handling_event_cb(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Registers a callback function that will be invoked when a multi call handling event happened from Hands-Free.
+ * @since_tizen 2.3
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @see bt_audio_initialize()
+ * @see bt_ag_multi_call_handling_event_cb()
+ * @see bt_ag_unset_multi_call_handling_event_cb()
+ */
+int bt_ag_set_multi_call_handling_event_cb(bt_ag_multi_call_handling_event_cb callback, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Unregisters a callback function that will be invoked when a multi call handling event happened from Hands-Free.
+ * @since_tizen 2.3
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @see bt_audio_initialize()
+ * @see bt_ag_multi_call_handling_event_cb()
+ * @see bt_ag_set_multi_call_handling_event_cb()
+ */
+int bt_ag_unset_multi_call_handling_event_cb(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Registers a callback function that will be invoked when a DTMF(Dual Tone Multi Frequency) is transmitted from Hands-Free.
+ * @since_tizen 2.3
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @see bt_audio_initialize()
+ * @see bt_ag_dtmf_transmitted_cb()
+ * @see bt_ag_unset_dtmf_transmitted_cb()
+ */
+int bt_ag_set_dtmf_transmitted_cb(bt_ag_dtmf_transmitted_cb callback, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Unregisters a callback function that will be invoked when a DTMF(Dual Tone Multi Frequency) is transmitted from Hands-Free.
+ * @since_tizen 2.3
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @see bt_audio_initialize()
+ * @see bt_ag_dtmf_transmitted_cb()
+ * @see bt_ag_set_dtmf_transmitted_cb()
+ */
+int bt_ag_unset_dtmf_transmitted_cb(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Notifies the speaker gain to the remote device.
+ * @since_tizen 2.3
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @details This function sends a signal to the remote device. This signal has the gain value.
+ * @a gain is represented on a scale from 0 to 15. This value is absolute value relating to a particular volume level.
+ * When the speaker gain of remote device is changed to the requested gain, bt_audio_speaker_gain_changed_cb() will be called.
+ * @param[in] gain The gain of speaker (0 ~ 15)
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device is connected by bt_audio_connect() with #BT_AUDIO_PROFILE_TYPE_HSP_HFP service.
+ * @see bt_ag_get_speaker_gain()
+ * @see bt_ag_set_speaker_gain_changed_cb()
+ * @see bt_ag_unset_speaker_gain_changed_cb()
+ */
+int bt_ag_notify_speaker_gain(int gain);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Gets the current speaker gain of the remote device.
+ * @since_tizen 2.3
+ * @details This function gets the value of speaker gain of the remote device.
+ * @a gain is represented on a scale from 0 to 15. This value is absolute value relating to a particular volume level.
+ * @param[out] gain The gain of speaker (0 ~ 15)
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device is connected by bt_audio_connect() with #BT_AUDIO_PROFILE_TYPE_HSP_HFP service.
+ * @see bt_ag_notify_speaker_gain()
+ * @see bt_ag_set_speaker_gain_changed_cb()
+ * @see bt_ag_unset_speaker_gain_changed_cb()
+ */
+int bt_ag_get_speaker_gain(int *gain);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Checks whether the remoted device enables NREC(Noise Reduction and Echo Canceling) or not.
+ * @since_tizen 2.3
+ * @param[out] enabled The NREC status: (@c true = enabled, @c false = not enabled)
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device is connected by bt_audio_connect() with #BT_AUDIO_PROFILE_TYPE_HSP_HFP service.
+ * @see bt_audio_connect()
+ */
+int bt_ag_is_nrec_enabled(bool *enabled);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Registers a callback function that will be invoked when the speaker gain of the remote device is changed.
+ * @since_tizen 2.3
+ * @details This function let you know the change of the speaker gain of the remote device.
+ * @a gain is represented on a scale from 0 to 15. This value is absolute value relating to a particular volume level.
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @see bt_audio_initialize()
+ * @see bt_ag_unset_speaker_gain_changed_cb()
+ */
+int bt_ag_set_speaker_gain_changed_cb(bt_ag_speaker_gain_changed_cb callback, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Unregisters a callback function that will be invoked when the speaker gain of the remote device is changed.
+ * @since_tizen 2.3
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @see bt_audio_initialize()
+ * @see bt_ag_set_speaker_gain_changed_cb()
+ */
+int bt_ag_unset_speaker_gain_changed_cb(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Registers a callback function that will be invoked when the microphone gain of the remote device is changed.
+ * @since_tizen 2.3
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @see bt_audio_initialize()
+ * @see bt_ag_unset_microphone_gain_changed_cb()
+ */
+int bt_ag_set_microphone_gain_changed_cb(bt_ag_microphone_gain_changed_cb callback, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Unregisters a callback function that will be invoked when the microphone gain of the remote device is changed.
+ * @since_tizen 2.3
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @see bt_audio_initialize()
+ * @see bt_ag_set_microphone_gain_changed_cb()
+ */
+int bt_ag_unset_microphone_gain_changed_cb(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_CALL_MODULE
+ * @brief Creates a handle of call list.
+ * @since_tizen 2.3
+ * @param[out] list The handle of call list
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_call_list_destroy()
+ */
+int bt_call_list_create(bt_call_list_h *list);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_CALL_MODULE
+ * @brief Destroys the handle of call list.
+ * @since_tizen 2.3
+ * @param[in] list The handle of call list
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_call_list_create()
+ */
+int bt_call_list_destroy(bt_call_list_h list);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_CALL_MODULE
+ * @brief Resets the handle of call list.
+ * @since_tizen 2.3
+ * @param[in] list The handle of call list
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_call_list_create()
+ */
+int bt_call_list_reset(bt_call_list_h list);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_CALL_MODULE
+ * @brief Adds a call to the handle of call list.
+ * @since_tizen 2.3
+ * @param[in] list The handle of call list
+ * @param[in] call_id The call ID
+ * @param[in] state The state of audio gate call
+ * @param[in] phone_number The phone number. You must set this value in case of #BT_AG_CALL_EVENT_DIALING and #BT_AG_CALL_EVENT_INCOMING.
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_call_list_create()
+ */
+int bt_call_list_add(bt_call_list_h list, unsigned int call_id, bt_ag_call_state_e state, const char *phone_number);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Initializes the Bluetooth AVRCP(Audio/Video Remote Control Profile) service.
+ * @since_tizen 2.3
+ * @remarks This function must be called before Bluetooth AVRCP service. \n
+ * You must free all resources of the this service by calling bt_avrcp_target_deinitialize()
+ * if Bluetooth AVRCP service is no longer needed.
+ * @param[in] callback The callback function called when the connection state is changed
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @see bt_initialize()
+ * @see bt_avrcp_target_deinitialize()
+ */
+int bt_avrcp_target_initialize(bt_avrcp_target_connection_state_changed_cb callback, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Deinitializes the Bluetooth AVRCP(Audio/Video Remote Control Profile) service.
+ * @since_tizen 2.3
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio service must be initialized with bt_avrcp_target_initialize().
+ * @see bt_avrcp_target_initialize()
+ */
+int bt_avrcp_target_deinitialize(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Notifies the equalize state to the remote device.
+ * @since_tizen 2.3
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] state The state of equalizer
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device must be connected.
+ * @see bt_avrcp_target_connection_state_changed_cb()
+ * @see bt_avrcp_target_initialize()
+ */
+int bt_avrcp_target_notify_equalizer_state(bt_avrcp_equalizer_state_e state);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Notifies the repeat mode to the remote device.
+ * @since_tizen 2.3
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] mode The repeat mode
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device must be connected.
+ * @see bt_avrcp_target_connection_state_changed_cb()
+ * @see bt_avrcp_target_initialize()
+ */
+int bt_avrcp_target_notify_repeat_mode(bt_avrcp_repeat_mode_e mode);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Notifies the shuffle mode to the remote device.
+ * @since_tizen 2.3
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] mode The repeat mode
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device must be connected.
+ * @see bt_avrcp_target_connection_state_changed_cb()
+ * @see bt_avrcp_target_initialize()
+ */
+int bt_avrcp_target_notify_shuffle_mode(bt_avrcp_shuffle_mode_e mode);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Notifies the scan mode to the remote device.
+ * @since_tizen 2.3
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] mode The scan mode
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device must be connected.
+ * @see bt_avrcp_target_connection_state_changed_cb()
+ * @see bt_avrcp_target_initialize()
+ */
+int bt_avrcp_target_notify_scan_mode(bt_avrcp_scan_mode_e mode);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Notifies the player state to the remote device.
+ * @since_tizen 2.3
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] state The player state
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device must be connected.
+ * @see bt_avrcp_target_connection_state_changed_cb()
+ * @see bt_avrcp_target_initialize()
+ */
+int bt_avrcp_target_notify_player_state(bt_avrcp_player_state_e state);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Notifies the current position of song to the remote device.
+ * @since_tizen 2.3
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] position The current position in milliseconds
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device must be connected.
+ * @see bt_avrcp_target_connection_state_changed_cb()
+ * @see bt_avrcp_target_initialize()
+ */
+int bt_avrcp_target_notify_position(unsigned int position);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Notifies the track to the remote device.
+ * @since_tizen 2.3
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] title The title of track
+ * @param[in] artist The artist of track
+ * @param[in] album The album of track
+ * @param[in] genre The genre of track
+ * @param[in] track_num The track number
+ * @param[in] total_tracks The number of all tracks
+ * @param[in] duration The duration of track in milliseconds
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device must be connected.
+ * @see bt_avrcp_target_connection_state_changed_cb()
+ * @see bt_avrcp_target_initialize()
+ */
+int bt_avrcp_target_notify_track(const char *title, const char *artist, const char *album, const char *genre, unsigned int track_num, unsigned int total_tracks, unsigned int duration);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Registers a callback function that will be invoked when the equalizer state is changed by the remote control device.
+ * @since_tizen 2.3
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized by bt_initialize().
+ * @see bt_initialize()
+ * @see bt_avrcp_unset_equalizer_state_changed_cb()
+ */
+int bt_avrcp_set_equalizer_state_changed_cb(bt_avrcp_equalizer_state_changed_cb callback, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Unregisters a callback function that will be invoked when the equalizer state is changed by the remote control device.
+ * @since_tizen 2.3
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized by bt_initialize().
+ * @see bt_initialize()
+ * @see bt_avrcp_set_equalizer_state_changed_cb()
+ */
+int bt_avrcp_unset_equalizer_state_changed_cb(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Registers a callback function that will be invoked when the repeat mode is changed by the remote control device.
+ * @since_tizen 2.3
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized by bt_initialize().
+ * @see bt_initialize()
+ * @see bt_avrcp_unset_repeat_mode_changed_cb()
+ */
+int bt_avrcp_set_repeat_mode_changed_cb(bt_avrcp_repeat_mode_changed_cb callback, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Unregisters a callback function that will be invoked when the repeat mode is changed by the remote control device.
+ * @since_tizen 2.3
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized by bt_initialize().
+ * @see bt_initialize()
+ * @see bt_avrcp_set_repeat_mode_changed_cb()
+ */
+int bt_avrcp_unset_repeat_mode_changed_cb(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Registers a callback function that will be invoked when the shuffle mode is changed by the remote control device.
+ * @since_tizen 2.3
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized by bt_initialize().
+ * @see bt_initialize()
+ * @see bt_avrcp_unset_shuffle_mode_changed_cb()
+ */
+int bt_avrcp_set_shuffle_mode_changed_cb(bt_avrcp_shuffle_mode_changed_cb callback, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Unregisters a callback function that will be invoked when the shuffle mode is changed by the remote control device.
+ * @since_tizen 2.3
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized by bt_initialize().
+ * @see bt_initialize()
+ * @see bt_avrcp_set_shuffle_mode_changed_cb()
+ */
+int bt_avrcp_unset_shuffle_mode_changed_cb(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Registers a callback function that will be invoked when the scan mode is changed by the remote control device.
+ * @since_tizen 2.3
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized by bt_initialize().
+ * @see bt_initialize()
+ * @see bt_avrcp_unset_scan_mode_changed_cb()
+ */
+int bt_avrcp_set_scan_mode_changed_cb(bt_avrcp_scan_mode_changed_cb callback, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Unregisters a callback function that will be invoked when the scan mode is changed by the remote control device.
+ * @since_tizen 2.3
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized by bt_initialize().
+ * @see bt_initialize()
+ * @see bt_avrcp_set_scan_mode_changed_cb()
+ */
+int bt_avrcp_unset_scan_mode_changed_cb(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_HDP_MODULE
+ * @brief Registers an application that acts as the @a Sink role of HDP(Health Device Profile).
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @remarks The @a app_id must be released with free() by you.
+ * @param[in] data_type The data type of MDEP. This value is defined in ISO/IEEE 11073-20601 spec.
+ * For example, pulse oximeter is 0x1004 and blood pressure monitor is 0x1007.
+ * @param[out] app_id The ID of application
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @see bt_hdp_unregister_sink_app()
+ */
+int bt_hdp_register_sink_app(unsigned short data_type, char **app_id);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_HDP_MODULE
+ * @brief Unregisters the given application that acts as the @a Sink role of HDP(Health Device Profile).
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @param[in] app_id The ID of application
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_hdp_register_sink_app()
+ */
+int bt_hdp_unregister_sink_app(const char *app_id);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_HDP_MODULE
+ * @brief Connects the remote device which acts as @a Source role, asynchronously.
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @param[in] remote_address The remote address
+ * @param[in] app_id The ID of application
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Sink role of HDP must be registered with bt_hdp_register_sink_app().
+ * @pre The local device must be bonded with the remote device by bt_device_create_bond().
+ * @post bt_hdp_connected_cb() will be invoked.
+ * @see bt_hdp_disconnect()
+ * @see bt_hdp_set_connection_state_changed_cb()
+ * @see bt_hdp_unset_connection_state_changed_cb()
+ */
+int bt_hdp_connect_to_source(const char *remote_address, const char *app_id);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_HDP_MODULE
+ * @brief Disconnects the remote device, asynchronously.
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @param[in] remote_address The remote address
+ * @param[in] channel The connected data channel
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device must be connected.
+ * @post bt_hdp_disconnected_cb() will be invoked.
+ * @see bt_hdp_set_connection_state_changed_cb()
+ * @see bt_hdp_unset_connection_state_changed_cb()
+ */
+int bt_hdp_disconnect(const char *remote_address, unsigned int channel);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_HDP_MODULE
+ * @brief Sends the data to the remote device.
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @param[in] channel The connected data channel
+ * @param[in] data The data to send
+ * @param[in] size The size of data to send (byte)
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device must be connected.
+ * @see bt_hdp_data_received_cb()
+ * @see bt_hdp_set_data_received_cb()
+ * @see bt_hdp_unset_data_received_cb()
+ */
+int bt_hdp_send_data(unsigned int channel, const char *data, unsigned int size);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_HDP_MODULE
+ * @brief Registers a callback function that will be invoked when the connection state is changed.
+ * @since_tizen 2.3
+ * @param[in] connected_cb The callback function called when a connection is established
+ * @param[in] disconnected_cb The callback function called when a connection is disconnected
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @see bt_hdp_unset_connection_state_changed_cb()
+ */
+int bt_hdp_set_connection_state_changed_cb(bt_hdp_connected_cb connected_cb, bt_hdp_disconnected_cb disconnected_cb, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_HDP_MODULE
+ * @brief Unregisters a callback function that will be invoked when the connection state is changed.
+ * @since_tizen 2.3
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @see bt_hdp_set_connection_state_changed_cb()
+ */
+int bt_hdp_unset_connection_state_changed_cb(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_HDP_MODULE
+ * @brief Registers a callback function that will be invoked when you receive the data.
+ * @since_tizen 2.3
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @see bt_hdp_unset_data_received_cb()
+ */
+int bt_hdp_set_data_received_cb(bt_hdp_data_received_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_HDP_MODULE
+ * @brief Unregisters a callback function that will be invoked when you receive the data.
+ * @since_tizen 2.3
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @see bt_hdp_set_data_received_cb()
+ */
+int bt_hdp_unset_data_received_cb(void);
+
+/**
+ * @deprecated Deprecated since 2.3.1. Use bt_gatt_client_foreach_services or bt_gatt_client_get_service instead.
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Gets the primary services of GATT(Generic Attribute Profile).
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @param[in] remote_address The address of the remote device
+ * @param[in] callback The callback function to invoke
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @post @a callback will be called if there are primary services.
+ * @see bt_gatt_primary_service_cb()
+ */
+int bt_gatt_foreach_primary_services(const char *remote_address, bt_gatt_primary_service_cb callback, void *user_data);
+
+/**
+ * @deprecated Deprecated since 2.3.1. This function call is not required because characteristic discovery is happened automatically.
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Discovers the characteristics in service, asynchronously.
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @param[in] service The attribute handle of service
+ * @param[in] callback The result callback
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @post @a callback will be called.
+ * @see bt_gatt_characteristics_discovered_cb()
+ */
+int bt_gatt_discover_characteristics(bt_gatt_attribute_h service, bt_gatt_characteristics_discovered_cb callback, void *user_data);
+
+/**
+ * @deprecated Deprecated since 2.3.1. Use bt_gatt_get_uuid instead.
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Gets the UUID of service.
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @remarks @a uuid must be released with free() by you.
+ * @param[in] service The attribute handle of service
+ * @param[out] uuid The UUID of service
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ */
+int bt_gatt_get_service_uuid(bt_gatt_attribute_h service, char **uuid);
+
+/**
+ * @deprecated Deprecated since 2.3.1. Use bt_gatt_service_foreach_included_services or bt_gatt_service_get_included_service instead.
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Gets the included services in service.
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @param[in] service The attribute handle of service
+ * @param[in] callback The callback function to invoke
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @post @a callback will be called if there are included services.
+ * @see bt_gatt_included_service_cb()
+ */
+int bt_gatt_foreach_included_services(bt_gatt_attribute_h service, bt_gatt_included_service_cb callback, void *user_data);
+
+/**
+ * @deprecated Deprecated since 2.3.1. Use bt_gatt_client_set_characteristic_value_changed_cb instead.
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Registers a callback function that will be invoked when a characteristic value is changed.
+ * @since_tizen 2.3
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @see bt_gatt_unset_characteristic_changed_cb()
+ */
+int bt_gatt_set_characteristic_changed_cb(bt_gatt_characteristic_changed_cb callback, void *user_data);
+
+/**
+ * @deprecated Deprecated since 2.3.1. Use bt_gatt_client_unset_characteristic_value_changed_cb instead.
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Unregisters a callback function that will be invoked when a characteristic is changed.
+ * @since_tizen 2.3
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @see bt_gatt_set_characteristic_changed_cb()
+ */
+int bt_gatt_unset_characteristic_changed_cb(void);
+
+/**
+ * @deprecated Deprecated since 2.3.1. Use bt_gatt_client_set_characteristic_value_changed_cb instead.
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Watches all the characteristic value changes of the service
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @param[in] service The attribute handle of service
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @see bt_gatt_unset_characteristic_changed_cb()
+ */
+int bt_gatt_watch_characteristic_changes(bt_gatt_attribute_h service);
+
+/**
+ * @deprecated Deprecated since 2.3.1. Use bt_gatt_client_unset_characteristic_value_changed_cb instead.
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Remove watching of all the characteristic value changes of the service
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @param[in] service The attribute handle of service
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @see bt_gatt_set_characteristic_changed_cb()
+ */
+int bt_gatt_unwatch_characteristic_changes(bt_gatt_attribute_h service);
+
+/**
+ * @deprecated Deprecated since 2.3.1. Use bt_gatt_get_value or bt_gatt_get_uuid after bt_gatt_client_read_value instead.
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Gets the characteristic declaration.
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @remarks @a uuid and @a value must be released with free() by you.
+ * @param[in] characteristic The attribute handle of characteristic
+ * @param[out] uuid The UUID of service
+ * @param[out] value The value of characteristic (byte array)
+ * @param[out] value_length The length of value
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @see bt_gatt_set_characteristic_value()
+ */
+int bt_gatt_get_characteristic_declaration(bt_gatt_attribute_h characteristic, char **uuid, unsigned char **value, int *value_length);
+
+/**
+ * @deprecated Deprecated since 2.3.1. Use bt_gatt_set_value and bt_gatt_client_write_value instead.
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Sets the value of characteristic.
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @param[in] characteristic The attribute handle of characteristic
+ * @param[in] value The value of characteristic (byte array)
+ * @param[in] value_length The length of value
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @see bt_gatt_get_characteristic_declaration()
+ */
+int bt_gatt_set_characteristic_value(bt_gatt_attribute_h characteristic, const unsigned char *value, int value_length);
+
+/**
+ * @deprecated Deprecated since 2.3.1. Use bt_gatt_set_value and bt_gatt_client_write_value instead.
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Sets the value of characteristic request.
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @param[in] characteristic The attribute handle of characteristic
+ * @param[in] value The value of characteristic (byte array)
+ * @param[in] value_length The length of value
+ * @param[in] callback The result callback
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @see bt_gatt_get_characteristic_declaration()
+ */
+int bt_gatt_set_characteristic_value_request(bt_gatt_attribute_h characteristic, const unsigned char *value,
+ int value_length, bt_gatt_characteristic_write_cb callback);
+
+/**
+* @deprecated Deprecated since 2.3.1. GATT handle clone is not allowed. Instead, all handles for client role must be got from GATT client handle.
+* @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+* @brief Clones the attribute handle.
+* @since_tizen 2.3
+* @remarks @a clone must be released with bt_gatt_destroy_attribute_handle().
+* @param[out] clone The cloned attribute handle
+* @param[in] origin The origin attribute handle
+* @return 0 on success, otherwise negative error value.
+* @retval #BT_ERROR_NONE Successful
+* @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+* @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
+* @retval #BT_ERROR_NOT_SUPPORTED Not supported
+*
+* @see bt_gatt_destroy_attribute_handle()
+*/
+int bt_gatt_clone_attribute_handle(bt_gatt_attribute_h* clone, bt_gatt_attribute_h origin);
+
+/**
+* @deprecated Deprecated since 2.3.1. GATT handle clone and destroy are not allowed.
+* @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+* @brief Destroys the attribute handle.
+* @since_tizen 2.3
+* @param[in] handle The attribute handle
+* @return 0 on success, otherwise negative error value.
+* @retval #BT_ERROR_NONE Successful
+* @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+* @retval #BT_ERROR_NOT_SUPPORTED Not supported
+*
+* @see bt_gatt_clone_attribute_handle()
+*/
+int bt_gatt_destroy_attribute_handle(bt_gatt_attribute_h handle);
+
+/**
+ * @deprecated Deprecated since 2.3.1. Use gatt_client_read_value instead.
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Reads the value of characteristic from remote device
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @param[in] char_handle The attribute handle of characteristic
+ * @param[in] callback The result callback
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @see bt_gatt_get_characteristic_declaration()
+ */
+int bt_gatt_read_characteristic_value(bt_gatt_attribute_h char_handle,
+ bt_gatt_characteristic_read_cb callback);
+
+/**
+ * @deprecated Deprecated since 2.3.1. This function call is not required because descriptor discovery is happened automatically.
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Discovers the characteristic descriptors of a characteristic within its definition, asynchronously.
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @param[in] characteristic_handle The attribute handle of characteristic
+ * @param[in] callback The result callback
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @post @a callback will be called.
+ * @see bt_gatt_characteristic_descriptor_discovered_cb()
+ */
+int bt_gatt_discover_characteristic_descriptor(bt_gatt_attribute_h characteristic_handle,
+ bt_gatt_characteristic_descriptor_discovered_cb callback,
+ void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Gets the value of a characteristic or descriptor's GATT handle
+ * @since_tizen 2.3.1
+ *
+ * @remarks @a value must be released using free(). \n
+ * When @a gatt_handle is associated with bt_gatt_client_h, bt_gatt_client_read_value() must be used prior to this function \n
+ * in order to get the remote device's current value.
+ *
+ * @param[in] gatt_handle The handle of a characteristic or descriptor
+ * @param[out] value The value of @a gatt_handle. It is a byte stream type.
+ * @param[out] value_length The length of @a value
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ */
+int bt_gatt_get_value(bt_gatt_h gatt_handle, char **value, int *value_length);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Gets the value of a characteristic or descriptor's GATT handle as an integer type
+ * @since_tizen 2.3.1
+ *
+ * @remarks This function returns a locally saved value in @a gatt_handle. \n
+ * When @a gatt_handle is associated with bt_gatt_client_h, bt_gatt_client_read_value() must be used prior to this function \n
+ * in order to get the remote device's current value.
+ *
+ * @param[in] gatt_handle The handle of a characteristic or descriptor
+ * @param[in] type The type of a saved value in @a gatt_handle
+ * @param[in] offset The offset from where a value will be read from @a gatt_handle as an integer type
+ * @param[out] value The integer type's value of @a gatt_handle
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ */
+int bt_gatt_get_int_value(bt_gatt_h gatt_handle, bt_data_type_int_e type,
+ int offset, int *value);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Gets the value of a characteristic or descriptor's GATT handle as a float type
+ * @since_tizen 2.3.1
+ *
+ * @remarks This function returns a locally saved value in @a gatt_handle. \n
+ * When @a gatt_handle is associated with bt_gatt_client_h, bt_gatt_client_read_value() must be used prior to this function \n
+ * in order to get the remote device's current value.
+ *
+ * @param[in] gatt_handle The handle of a characteristic or descriptor
+ * @param[in] type The type of a saved value in @a gatt_handle
+ * @param[in] offset The offset from where a value will be read from @a gatt_handle as an integer type
+ * @param[out] value The float type's value of @a gatt_handle
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ */
+int bt_gatt_get_float_value(bt_gatt_h gatt_handle, bt_data_type_float_e type,
+ int offset, float *value);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Updates the value of a characteristic or descriptor's GATT handle
+ * @since_tizen 2.3.1
+ *
+ * @remarks This function updates a value of @a gatt_handle locally. \n
+ * When @a gatt_handle is associated with bt_gatt_client_h, bt_gatt_client_write_value() can be used after this function \n
+ * in order to update the remote device's value. \n
+ *
+ * @param[in] gatt_handle The handle of a characteristic or descriptor
+ * @param[in] value The value to be updated
+ * @param[in] value_length The length of @a value
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ */
+int bt_gatt_set_value(bt_gatt_h gatt_handle, const char *value, int value_length);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Updates the value of a characteristic or descriptor's GATT handle using a integer type's value
+ * @since_tizen 2.3.1
+ *
+ * @remarks This function updates a value of @a gatt_handle locally. \n
+ * When @a gatt_handle is associated with bt_gatt_client_h, bt_gatt_client_write_value() can be used after this function \n
+ * in order to update the remote device's value. \n
+ *
+ * @param[in] gatt_handle The handle of a characteristic or descriptor
+ * @param[in] type @a value will be saved in @a gatt_handle as this type
+ * @param[in] value The integer type's value to be updated
+ * @param[in] offset The offset from where @a value will be saved in @a gatt_handle
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ */
+int bt_gatt_set_int_value(bt_gatt_h gatt_handle, bt_data_type_int_e type,
+ int value, int offset);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Updates the value of a characteristic or descriptor's GATT handle using a float type's value
+ * @since_tizen 2.3.1
+ *
+ * @remarks This function updates a value of @a gatt_handle locally. \n
+ * When @a gatt_handle is associated with bt_gatt_client_h, bt_gatt_client_write_value() can be used after this function \n
+ * in order to update the remote device's value. \n
+ *
+ * @param[in] gatt_handle The handle of a characteristic or descriptor
+ * @param[in] type @a mantissa and @a exponent will be saved in @a gatt_handle as this type
+ * @param[in] mantissa The mantissa of float type's value to be updated
+ * @param[in] exponent The exponent of float type's value to be updated
+ * @param[in] offset The offset from where @a mantissa and @a exponent will be saved in @a gatt_handle
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ */
+int bt_gatt_set_float_value(bt_gatt_h gatt_handle, bt_data_type_float_e type,
+ int mantissa, int exponent, int offset);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Gets the UUID of a service, characteristic or descriptor's GATT handle
+ * @since_tizen 2.3.1
+ *
+ * @remarks @a uuid must be released using free(). \n
+ * 16-bit UUID or 128-bit UUID is supported. (e.g. 2A19, 00002A19-0000-1000-8000-00805F9B34FB)
+ *
+ * @param[in] gatt_handle The handle of a service, characteristic or descriptor
+ * @param[out] uuid The string of the UUID of @a gatt_handle
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ */
+int bt_gatt_get_uuid(bt_gatt_h gatt_handle, char **uuid);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Gets the type of GATT handle
+ * @since_tizen 2.3.1
+ *
+ * @param[in] gatt_handle The GATT handle
+ * @param[out] gatt_type The type of @a gatt_handle
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ */
+int bt_gatt_get_type(bt_gatt_h gatt_handle, bt_gatt_type_e *gatt_type);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Gets the GATT client handle which the specified service belongs to
+ * @since_tizen 2.3.1
+ *
+ * @remark This function doesn't allocate new memory for GATT client handle.
+ * The returned GATT client handle is the same one which was got from bt_gatt_client_create().
+ * So if it is destroyed by bt_gatt_client_destroy(), all related GATT handles are freed also.
+ *
+ * @param[in] service The service's GATT handle
+ * @param[out] client The GATT client handle which @a service belongs to
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_client_create()
+ */
+int bt_gatt_service_get_client(bt_gatt_h service, bt_gatt_client_h *client);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Gets a characteristic's GATT handle which has specific UUID
+ * @since_tizen 2.3.1
+ *
+ * @remark The returned GATT handle must not be freed by application.
+ * It will be freed when an associated client is destroyed by bt_gatt_client_destroy().
+ * If there are multiple characteristics which have same UUID, only the first matched one will be returned.
+ *
+ * @param[in] service The service's GATT handle
+ * @param[in] uuid The characteristic's GATT handle which has this UUID will be returned if it exists
+ * @param[out] characteristic The characteristic's GATT handle which has @a uuid if it exists
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NO_DATA No data available
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ */
+int bt_gatt_service_get_characteristic(bt_gatt_h service, const char *uuid,
+ bt_gatt_h *characteristic);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Invokes @a callback function on each characteristic that belongs to the specified service
+ * @since_tizen 2.3.1
+ *
+ * @param[in] service The service's GATT handle
+ * @param[in] callback The function to be invoked on each characteristic
+ * @param[in] user_data The user data to be passed to @a callback function
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_foreach_cb()
+ */
+int bt_gatt_service_foreach_characteristics(bt_gatt_h service,
+ bt_gatt_foreach_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Gets an included service's GATT handle which has specific UUID
+ * @since_tizen 2.3.1
+ *
+ * @remark The returned GATT handle must not be freed by application.
+ * It will be freed when an associated client is destroyed by bt_gatt_client_destroy().
+ * If there are multiple included services which have same UUID, only the first matched one will be returned.
+ *
+ * @param[in] service The service's GATT handle
+ * @param[in] uuid The included service's GATT handle which has this UUID will be returned if it exists
+ * @param[out] included_service The included service's GATT handle which has @a uuid if it exists
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NO_DATA No data available
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ */
+int bt_gatt_service_get_included_service(bt_gatt_h service, const char *uuid,
+ bt_gatt_h *included_service);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Invokes @a callback function on each included service that belongs to the specified service
+ * @since_tizen 2.3.1
+ *
+ * @param[in] service The service's GATT handle
+ * @param[in] callback The function to be invoked on each included service
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_foreach_cb()
+ */
+int bt_gatt_service_foreach_included_services(bt_gatt_h service,
+ bt_gatt_foreach_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Gets the service's GATT handle which the specified characteristic belongs to
+ * @since_tizen 2.3.1
+ *
+ * @remark The returned GATT handle must not be freed by application.
+ * It will be freed when an associated client is destroyed by bt_gatt_client_destroy().
+ *
+ * @param[in] characteristic The characteristic's GATT handle
+ * @param[out] service The service's GATT handle which @a characteristic belongs to
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ */
+int bt_gatt_characteristic_get_service(bt_gatt_h characteristic, bt_gatt_h *service);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Gets the properties which a characteristic's GATT handle has
+ * @since_tizen 2.3.1
+ *
+ * @param[in] characteristic The characteristic's GATT handle
+ * @param[out] properties The properties which a characteristic's GATT handle has
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_property_e
+ */
+int bt_gatt_characteristic_get_properties(bt_gatt_h characteristic, int *properties);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Gets the write type of the specified characteristic
+ * @since_tizen 2.3.1
+ *
+ * @param[in] characteristic The characteristic's GATT handle
+ * @param[out] write_type The write type of the specified characteristic
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_write_type_e
+ */
+int bt_gatt_characteristic_get_write_type(bt_gatt_h characteristic,
+ bt_gatt_write_type_e *write_type);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Updates the write type of the specified charateristic
+ * @since_tizen 2.3.1
+ *
+ * @param[in] characteristic The characteristic's GATT handle
+ * @param[in] write_type The write type to be updated
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_client_write_value()
+ * @see bt_gatt_write_type_e
+ */
+int bt_gatt_characteristic_set_write_type(bt_gatt_h characteristic,
+ bt_gatt_write_type_e write_type);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Gets a descriptor's GATT handle which has specific UUID
+ * @since_tizen 2.3.1
+ *
+ * @remark The returned GATT handle must not be freed by application.
+ * It will be freed when an associated client is destroyed by bt_gatt_client_destroy().
+ * If there are multiple descriptors which have same UUID, only the first matched one will be returned.
+ *
+ * @param[in] characteristic The characteristic's GATT handle
+ * @param[in] uuid The descriptor's GATT handle which has this UUID will be returned if it exists
+ * @param[out] descriptor The descriptor's GATT handle which has @a uuid if it exists
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NO_DATA No data available
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ */
+int bt_gatt_characteristic_get_descriptor(bt_gatt_h characteristic, const char *uuid,
+ bt_gatt_h *descriptor);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Invokes @a callback function on each descriptor that belongs to the specified characteristic
+ * @since_tizen 2.3.1
+ *
+ * @param[in] characteristic The characteristic's GATT handle
+ * @param[in] callback The function to be invoked on each descriptor
+ * @param[in] user_data The user data to be passed to @a callback function
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_foreach_cb()
+ */
+int bt_gatt_characteristic_foreach_descriptors(bt_gatt_h characteristic,
+ bt_gatt_foreach_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Gets the characteristic's GATT handle which the specified descriptor belongs to
+ * @since_tizen 2.3.1
+ *
+ * @remark The returned GATT handle must not be freed by application.
+ * It will be freed when an associated client is destroyed by bt_gatt_client_destroy().
+ *
+ * @param[in] descriptor The descriptor's GATT handle
+ * @param[out] characteristic The characteristic's GATT handle which @a descriptor belongs to
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ */
+int bt_gatt_descriptor_get_characteristic(bt_gatt_h descriptor, bt_gatt_h *characteristic);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Creates the GATT client handle
+ * @since_tizen 2.3.1
+ *
+ * @remark The GATT client handle must be freed by bt_gatt_client_destroy() after use
+ *
+ * @param[in] remote_address The address of the remote device
+ * @param[out] client The created GATT client's handle
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #BT_ERROR_ALREADY_DONE Operation is already done
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_client_destroy()
+ */
+int bt_gatt_client_create(const char *remote_address, bt_gatt_client_h *client);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Destroys the GATT client's handle
+ * @since_tizen 2.3.1
+ *
+ * @remark All related service, characteristic and descriptor's GATT handles are freed also
+ *
+ * @param[in] client The GATT client's handle
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_client_create()
+ */
+int bt_gatt_client_destroy(bt_gatt_client_h client);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Gets the address of remote device
+ * @since_tizen 2.3.1
+ *
+ * @param[in] client The created GATT client's handle
+ * @param[out] remote_address The address of the remote device which is associated with @a client
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_client_create()
+ */
+int bt_gatt_client_get_remote_address(bt_gatt_client_h client,
+ char **remote_address);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Reads the value of a characteristic or descriptor from the remote device asynchronously
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @param[in] gatt_handle The GATT handle of a characteristic or descriptor
+ * @param[in] callback When a read request is completed, this callback function will be called
+ * @param[in] user_data The user data to be passed to @a callback function
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOW_IN_PROGRESS Operation now in progress
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_client_create()
+ * @see bt_gatt_client_request_completed_cb()
+ */
+int bt_gatt_client_read_value(bt_gatt_h gatt_handle,
+ bt_gatt_client_request_completed_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Writes the value of a characteristic or descriptor to the remote device asynchronously
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @param[in] gatt_handle The GATT handle of a characteristic or descriptor
+ * @param[in] callback When a write request is completed, this callback function will be called
+ * @param[in] user_data The user data to be passed to @a callback function
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOW_IN_PROGRESS Operation now in progress
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_client_create()
+ * @see bt_gatt_characteristic_set_write_type()
+ * @see bt_gatt_set_value()
+ * @see bt_gatt_set_int_value()
+ * @see bt_gatt_set_float_value()
+ * @see bt_gatt_client_request_completed_cb()
+ */
+int bt_gatt_client_write_value(bt_gatt_h gatt_handle,
+ bt_gatt_client_request_completed_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Registers a callback function to be invoked when the characteristic value is changed on the remote device
+ * @since_tizen 2.3.1
+ *
+ * @param[in] characteristic The characteristic's GATT handle
+ * @param[in] callback The callback to be invoked when the value is changed and it is informed
+ * @param[in] user_data The user data to be passed to @a callback function
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_client_characteristic_value_changed_cb()
+ * @see bt_gatt_client_unset_characteristic_value_change()
+ */
+int bt_gatt_client_set_characteristic_value_changed_cb(bt_gatt_h characteristic,
+ bt_gatt_client_characteristic_value_changed_cb callback,
+ void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Unregisters a callback function to be invoked when the characteristic value is changed on the remote device
+ * @since_tizen 2.3.1
+ *
+ * @param[in] characteristic The characteristic's GATT handle, whose value change will not be informed
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_client_set_characteristic_value_changed_cb()
+ */
+int bt_gatt_client_unset_characteristic_value_changed_cb(bt_gatt_h characteristic);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Gets a service's GATT handle which has specific UUID
+ * @since_tizen 2.3.1
+ *
+ * @remark The returned GATT handle must not be freed by application.
+ * It will be freed when an associated client is destroyed by bt_gatt_client_destroy().
+ * If there are multiple services which have same UUID, only the first matched one will be returned.
+ *
+ * @param[in] client The GATT client's handle
+ * @param[in] uuid The serivce's GATT handle which has this UUID will be returned if it exists
+ * @param[out] service The service's GATT handle which has @a uuid if it exists
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NO_DATA No data available
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ */
+int bt_gatt_client_get_service(bt_gatt_client_h client, const char *uuid,
+ bt_gatt_h *service);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Invokes @a callback function on each service that belongs to the specified GATT client
+ * @since_tizen 2.3.1
+ *
+ * @param[in] client The GATT client's handle
+ * @param[in] callback The function to be invoked on each service
+ * @param[in] user_data The user data to be passed to @a callback function
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_foreach_cb()
+ */
+int bt_gatt_client_foreach_services(bt_gatt_client_h client,
+ bt_gatt_foreach_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Connect to a specific LE based service on a remote bluetooth dievice address, asynchronously.
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @remarks A connection can be disconnected by bt_gatt_disconnect().
+ *
+ * @param[in] address The address of the remote Bluetooth device.
+ * @param[in] auto_connect The flag of the auto connection.
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid paramater
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @pre The remote device must support le connection.
+ * @post This function invokes bt_gatt_connection_state_changed_cb().
+ *
+ * @see bt_initialize()
+ * @see bt_gatt_disconnect()
+ * @see bt_gatt_set_connection_state_changed_cb()
+ * @see bt_gatt_unset_connection_state_changed_cb()
+ * @see bt_gatt_connection_state_changed_cb()
+ */
+int bt_gatt_connect(const char *address, bool auto_connect);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Disconnect to LE connection with the given remote Bluetooth dievice address, asynchronously.
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @param[in] address The address of the remote Bluetooth device
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid paramater
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The connection must be established.
+ * @post This function invokes bt_gatt_connection_state_changed_cb().
+ *
+ * @see bt_initialize()
+ * @see bt_gatt_connect()
+ * @see bt_gatt_set_connection_state_changed_cb()
+ * @see bt_gatt_unset_connection_state_changed_cb()
+ * @see bt_gatt_connection_state_changed_cb()
+ */
+int bt_gatt_disconnect(const char *address);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Registers a callback function that will be invoked when the connection state is changed.
+ * @since_tizen 2.3
+ *
+ * @param[in] callback The callback function to register.
+ * @param[in] user_data The user data to be passed to the callback function.
+ *
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid paramater
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_connect()
+ * @see bt_gatt_disconnect()
+ * @see bt_gatt_unset_connection_state_changed_cb()
+ */
+int bt_gatt_set_connection_state_changed_cb(bt_gatt_connection_state_changed_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Unregisters a callback function that will be invoked when the connection state is changed.
+ * @since_tizen 2.3
+ *
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_connect()
+ * @see bt_gatt_disconnect()
+ * @see bt_gatt_connection_state_changed_cb()
+ */
+int bt_gatt_unset_connection_state_changed_cb(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PAN_NAP_MODULE
+ * @brief Activates the NAP(Network Access Point).
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_ALREADY_DONE Operation is already done
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED
+ * @see bt_nap_deactivate()
+ */
+int bt_nap_activate(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PAN_NAP_MODULE
+ * @brief Deactivates the NAP(Network Access Point).
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_ALREADY_DONE Operation is already done
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth NAP service must be activated with bt_nap_activate().
+ * @see bt_nap_activate()
+ */
+int bt_nap_deactivate(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PAN_NAP_MODULE
+ * @brief Disconnects the all PANUs(Personal Area Networking User) which are connected to you.
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth NAP service must be activated with bt_nap_activate().
+ * @see bt_nap_activate()
+ */
+int bt_nap_disconnect_all(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PAN_NAP_MODULE
+ * @brief Disconnects the specified PANU(Personal Area Networking User) which is connected to you.
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @param[in] remote_address The remote address
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth NAP service must be activated with bt_nap_activate().
+ * @see bt_nap_activate()
+ */
+int bt_nap_disconnect(const char *remote_address);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PAN_NAP_MODULE
+ * @brief Registers a callback function that will be invoked when the connection state changes.
+ * @since_tizen 2.3
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @post bt_nap_connection_state_changed_cb() will be invoked.
+ * @see bt_initialize()
+ * @see bt_nap_connection_state_changed_cb()
+ * @see bt_nap_unset_connection_state_changed_cb()
+ */
+int bt_nap_set_connection_state_changed_cb(bt_nap_connection_state_changed_cb callback, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PAN_NAP_MODULE
+ * @brief Unregisters a callback function that will be invoked when the connection state changes.
+ * @since_tizen 2.3
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @post bt_nap_connection_state_changed_cb() will be invoked.
+ * @see bt_initialize()
+ * @see bt_nap_connection_state_changed_cb()
+ * @see bt_nap_set_connection_state_changed_cb()
+ */
+int bt_nap_unset_connection_state_changed_cb(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PAN_PANU_MODULE
+ * @brief Registers a callback function that will be invoked when the connection state changes.
+ * @since_tizen 2.3
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @post bt_nap_connection_state_changed_cb() will be invoked.
+ * @see bt_initialize()
+ * @see bt_panu_connection_state_changed_cb()
+ * @see bt_panu_unset_connection_state_changed_cb()
+ */
+int bt_panu_set_connection_state_changed_cb(bt_panu_connection_state_changed_cb callback, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PAN_PANU_MODULE
+ * @brief Unregisters a callback function that will be invoked when the connection state changes.
+ * @since_tizen 2.3
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @post bt_nap_connection_state_changed_cb() will be invoked.
+ * @see bt_initialize()
+ * @see bt_panu_connection_state_changed_cb()
+ * @see bt_panu_set_connection_state_changed_cb()
+ */
+int bt_panu_unset_connection_state_changed_cb(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PAN_PANU_MODULE
+ * @brief Connects the remote device with the PAN(Personal Area Networking) service, asynchronously.
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @param[in] remote_address The remote address
+ * @param[in] type The type of PAN service
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The local device must be bonded with the remote device by bt_device_create_bond().
+ * @post bt_panu_connection_state_changed_cb() will be invoked.
+ * @see bt_panu_disconnect()
+ * @see bt_panu_connection_state_changed_cb()
+ */
+int bt_panu_connect(const char *remote_address, bt_panu_service_type_e type);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PAN_PANU_MODULE
+ * @brief Disconnects the remote device with the PAN(Personal Area Networking) service, asynchronously.
+ * @since_tizen 2.3
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @param[in] remote_address The remote address
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device must be connected by bt_panu_connect().
+ * @post bt_panu_connection_state_changed_cb() will be invoked.
+ * @see bt_panu_connect()
+ * @see bt_panu_connection_state_changed_cb()
+ */
+int bt_panu_disconnect(const char *remote_address);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief update LE connection.
+ * @since_tizen 2.3
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized by bt_initialize().
+ * @pre The remote device must be connected with bt_gatt_connect().
+ */
+int bt_device_le_conn_update(const char *device_address,
+ const bt_le_conn_update_s *parameters);
+
+
+/**
+ * @}
+ */
+
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif // __TIZEN_NETWORK_BLUETOOTH_H__
diff --git a/include/mobile/bluetooth_internal.h b/include/mobile/bluetooth_internal.h
new file mode 100644
index 0000000..647a2bb
--- /dev/null
+++ b/include/mobile/bluetooth_internal.h
@@ -0,0 +1,1601 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef __TIZEN_NETWORK_BLUETOOTH_INTERNAL_H__
+#define __TIZEN_NETWORK_BLUETOOTH_INTERNAL_H__
+
+#include <glib.h>
+#include "bluetooth_type.h"
+#include "bluetooth_type_internal.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+
+/**
+ * @file bluetooth_internal.h
+ */
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Sets the manufacturer data of local Bluetooth adapter.
+ * @since_tizen 2.3
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ *
+ * @param[in] data The manufacturer specific data of the Bluetooth device.
+ * @param[in] len The length of @a data.Maximaum length is 240 bytes.
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @post bt_adapter_manufacturer_data_changed_cb() will be invoked
+ * if this function returns #BT_ERROR_NONE.
+ *
+ * @see bt_adapter_manufacturer_data_changed_cb
+ * @see bt_adapter_set_manufacturer_data_changed_cb()
+ * @see bt_adapter_unset_manufacturer_data_changed_cb()
+ */
+int bt_adapter_set_manufacturer_data(char *data, int len);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Registers a callback function to be invoked
+ * when the manufacturer data of Bluetooth adapter changes.
+ * @since_tizen 2.3
+ *
+ * @param[in] callback The callback function to invoke
+ * @param[in] user_data The user data to be passed to the callback function
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @post bt_adapter_manufacturer_data_changed_cb() will be invoked.
+ *
+ * @see bt_initialize()
+ * @see bt_adapter_unset_manufacturer_data_changed_cb()
+ */
+int bt_adapter_set_manufacturer_data_changed_cb(
+ bt_adapter_manufacturer_data_changed_cb callback,
+ void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Unregisters the callback function.
+ * @since_tizen 2.3
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_initialize()
+ * @see bt_adapter_set_manufacturer_data_changed_cb()
+ */
+int bt_adapter_unset_manufacturer_data_changed_cb(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Set Bluetooth LE scan mode
+ * @since_tizen 2.3
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] scan_mode The scan mode
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_ENABLED Adapter is not enabled
+ * @retval #BT_ERROR_INVALID_PARAM Parameter is invalid
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @see bt_initialize()
+ */
+int bt_adapter_le_set_scan_mode(bt_adapter_le_scan_mode_e scan_mode);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Creates scan filter to find only LE advertisement which has specific data.
+ * @since_tizen 2.4
+ *
+ * @param[out] scan_filter The handle of scan filter
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_adapter_le_destroy_scan_filter()
+ */
+int bt_adapter_le_create_scan_filter(bt_scan_filter_h *scan_filter);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Destroys scan filter.
+ * @since_tizen 2.4
+ *
+ * @param[in] scan_filter The handle of scan filter
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_adapter_le_create_scan_filter()
+ */
+int bt_adapter_le_destroy_scan_filter(bt_scan_filter_h scan_filter);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Adds the device address to filter advertisements
+ * @since_tizen 2.4
+ *
+ * @param[in] scan_filter The handle of scan filter
+ * @param[in] address The device address to filter advertisements
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ */
+int bt_adapter_le_scan_filter_set_device_address(bt_scan_filter_h scan_filter, const char *address);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Adds the device name to filter advertisements
+ * @since_tizen 2.4
+ *
+ * @param[in] scan_filter The handle of scan filter
+ * @param[in] name The device name to filter advertisements
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ */
+int bt_adapter_le_scan_filter_set_device_name(bt_scan_filter_h scan_filter, const char *name);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Adds the service UUID to filter advertisements
+ * @since_tizen 2.4
+ *
+ * @param[in] scan_filter The handle of scan filter
+ * @param[in] uuid The service UUID to filter advertisements
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ */
+int bt_adapter_le_scan_filter_set_service_uuid(bt_scan_filter_h scan_filter, const char *uuid);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Adds the service uuid and the mask to filter advertisements by partial data
+ * @since_tizen 2.4
+ *
+ * @remarks the length of mask msut be the same with the length of service uuid.
+ *
+ * @param[in] scan_filter The handle of scan filter
+ * @param[in] uuid The service UUID to filter advertisements
+ * @param[in] mask The mask to filter advertisements
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ */
+int bt_adapter_le_scan_filter_set_service_uuid_with_mask(bt_scan_filter_h scan_filter,
+ const char *uuid, const char *mask);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Adds the service solicitation UUID to filter advertisements
+ * @since_tizen 2.4
+ *
+ * @param[in] scan_filter The handle of scan filter
+ * @param[in] uuid The service solicitation UUID to filter advertisements
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ */
+int bt_adapter_le_scan_filter_set_service_solicitation_uuid(bt_scan_filter_h scan_filter, const char *uuid);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Adds the service solicitation uuid and the mask to filter advertisements by partial data
+ * @since_tizen 2.4
+ *
+ * @remarks the length of mask msut be the same with the length of service solicitation uuid.
+ *
+ * @param[in] scan_filter The handle of scan filter
+ * @param[in] uuid The service solicitation UUID to filter advertisements
+ * @param[in] mask The mask to filter advertisements
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ */
+int bt_adapter_le_scan_filter_set_service_solicitation_uuid_with_mask(bt_scan_filter_h scan_filter,
+ const char *uuid, const char *mask);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Adds the service data to filter advertisements
+ * @since_tizen 2.4
+ *
+ * @param[in] scan_filter The handle of scan filter
+ * @param[in] uuid The service UUID to filter advertisements
+ * @param[in] data The service data to filter advertisements
+ * @param[in] data_len The length of the service data
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ */
+int bt_adapter_le_scan_filter_set_service_data(bt_scan_filter_h scan_filter,
+ const char *uuid, const char *data, unsigned int data_len);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Adds the service data and the mask to filter advertisements by partial data
+ * @since_tizen 2.4
+ *
+ * @remarks the length of mask msut be the same with the length of service data.
+ *
+ * @param[in] scan_filter The handle of scan filter
+ * @param[in] uuid The service UUID to filter advertisements
+ * @param[in] data The service data to filter advertisements
+ * @param[in] data_len The length of the service data
+ * @param[in] mask The mask to filter advertisements
+ * @param[in] mask_len The length of the mask to be set.
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ */
+int bt_adapter_le_scan_filter_set_service_data_with_mask(bt_scan_filter_h scan_filter,
+ const char *uuid, const char *data, unsigned int data_len, const char *mask, unsigned int mask_len);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Adds the manufacturer data to filter advertisements
+ * @since_tizen 2.4
+ *
+ * @param[in] scan_filter The handle of scan filter
+ * @param[in] manufacturer_id The manufacturer ID (0x0000 ~ 0xFFFF)
+ * @param[in] data The manufacturer data (byte array)
+ * @param[in] data_len The length of manufacturer data
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ */
+int bt_adapter_le_scan_filter_set_manufacturer_data(bt_scan_filter_h scan_filter,
+ int manufacturer_id, const char *data, unsigned int data_len);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Adds the manufacturer data and the mask to filter advertisements by partial data
+ * @since_tizen 2.4
+ *
+ * @remarks the length of mask msut be the same with the length of service uuid.
+ *
+ * @param[in] scan_filter The handle of scan filter
+ * @param[in] manufacturer_id The manufacturer ID (0x0000 ~ 0xFFFF)
+ * @param[in] data The manufacturer data (byte array)
+ * @param[in] data_len The length of manufacturer data
+ * @param[in] mask The mask to filter advertisements
+ * @param[in] mask_len The length of the mask to be set.
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ */
+int bt_adapter_le_scan_filter_set_manufacturer_data_with_mask(bt_scan_filter_h scan_filter,
+ int manufacturer_id, const char *data, unsigned int data_len, const char *mask, unsigned int mask_len);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Registers the scan filter to use for scanning
+ * @since_tizen 2.4
+ *
+ * @remarks Several scan filters can be registered. And the specific advertisements, satisfy the one of scan filters, will be found.
+ *
+ * @param[in] scan_filter The handle of scan filter
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOW_IN_PROGRESS Scan is in progress
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ */
+int bt_adapter_le_register_scan_filter(bt_scan_filter_h scan_filter);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Unregisters the scan filter to be registered
+ * @since_tizen 2.4
+ *
+ * @param[in] scan_filter The handle of scan filter
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOW_IN_PROGRESS Scan is in progress
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ */
+int bt_adapter_le_unregister_scan_filter(bt_scan_filter_h scan_filter);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Unregisters all scan filters to be registered
+ * @since_tizen 2.4
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOW_IN_PROGRESS Scan is in progress
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ */
+int bt_adapter_le_unregister_all_scan_filters(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Set advertising filter policy to use white list
+ * @since_tizen 2.4
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @param[in] advertiser The handle of advertiser
+ * @param[in] filter_policy The filter policy of advertising
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_NOW_IN_PROGRESS Operation is now in progress
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_adapter_le_start_advertising_new()
+ */
+int bt_adapter_le_set_advertising_filter_policy(bt_advertiser_h advertiser, bt_adapter_le_advertising_filter_policy_e filter_policy);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Gets a connection state
+ * @since_tizen 2.4
+ *
+ * @param[in] remote_address The address of the remote Bluetooth device
+ * @param[in] link_type The link type to get a connection state
+ * @param[out] connected The connection state
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ */
+int bt_device_get_connection_state(const char *remote_address, bt_device_connection_link_type_e link_type, bool *connected);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Registers a rfcomm server socket with a specific UUID. Activation by dbus is possible when the profile is connected.
+ * @since_tizen 2.4
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ *
+ * @remarks A socket can be destroyed by bt_socket_destroy_rfcomm_ex().
+ * Application should call this API to receive a connection event when launched again by dbus.
+ *
+ * @param[in] uuid The UUID of service to provide
+ * @param[in] bus_name bus_name of the application which is provided in service file.
+ * @param[in] object_path dbus of the application
+ * @return 0 on success, otherwise a negative error value.
+ *
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_NOW_IN_PROGRESS Already registered
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ *
+ * @see bt_socket_listen_and_accept_rfcomm_ex()
+ * @see bt_socket_destroy_rfcomm_ex()
+ */
+int bt_socket_create_rfcomm_ex(const char *uuid, const char *bus_name, const char *object_path);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Removes the rfcomm server socket which was created using bt_socket_create_rfcomm_ex().
+ * @since_tizen 2.4
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @remarks If callback function bt_socket_connection_state_changed_cb() is set and the remote Bluetooth device is connected,
+ * then bt_socket_connection_state_changed_cb() will be called when this function is finished successfully.
+ *
+ * @param[in] uuid The UUID (which was created using bt_socket_create_rfcomm()) to destroy
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The socket must be created with bt_socket_create_rfcomm_ex().
+ * @post If callback function bt_socket_connection_state_changed_cb() is set and the remote Bluetooth device is connected,
+ * then bt_socket_connection_state_changed_cb() will be called.
+ * @see bt_socket_create_rfcomm_ex()
+ * @see bt_socket_connection_state_changed_cb()
+ * @see bt_socket_set_connection_state_changed_cb()
+ * @see bt_socket_unset_connection_state_changed_cb()
+ */
+int bt_socket_destroy_rfcomm_ex(const char *uuid);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Starts listening on passed rfcomm socket and accepts connection requests. Activation by dbus is possible when the profile is connected.
+ * @since_tizen 2.4
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @details Pop-up is shown automatically when a RFCOMM connection is requested.
+ * bt_socket_connection_state_changed_cb() will be called with
+ * #BT_SOCKET_CONNECTED if you click "yes" and connection is finished successfully.
+ * @param[in] uuid The UUID of service to provide
+ * @param[in] max_pending_connections The maximum number of pending connections
+ * @param[in] bus_name bus_name of the application which is provided in service file.
+ * @param[in] object_path dbus of the application
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The socket must be created with bt_socket_create_rfcomm_ex().
+ * @post If callback function bt_socket_connection_state_changed_cb() is set,
+ * then bt_socket_connection_state_changed_cb() will be called when the remote Bluetooth device is connected.
+ * @see bt_socket_create_rfcomm_ex()
+ * @see bt_socket_connection_state_changed_cb()
+ * @see bt_socket_set_connection_state_changed_cb()
+ * @see bt_socket_unset_connection_state_changed_cb()
+ */
+int bt_socket_listen_and_accept_rfcomm_ex(const char *uuid, int max_pending_connections, const char* bus_name, const char *object_path);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Checks whether the remoted device is wbs (Wide Band Speech) mode or not.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[out] wbs_mode The wbs status: (@c true = wide band speech, @c false = narrow band speech)
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ * @pre The remote device is connected by bt_audio_connect() with #BT_AUDIO_PROFILE_TYPE_HSP_HFP service.
+ * @see bt_audio_connect()
+ */
+int bt_ag_is_wbs_mode(bool *wbs_mode);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Gets the HF(Hands-Free) profile connected status for AG role.
+ * @since_tizen 2.4
+ * @param[out] connected the connected status: (@c true = connected , @c false = not connected )
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ */
+int bt_ag_is_connected(bool *connected);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_A2DP_MODULE
+ * @brief Sets copy protection. streaming application that needs to have the copy protection for the streaming data, shall invoke this API.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] status - TRUE/FALSE
+ * @return 0 on success, otherwise negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_OPERATION_FAILED on failure
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ */
+int bt_a2dp_set_content_protection(bool status);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Gets the specification name from the UUID
+ * @since_tizen 2.4
+ *
+ * @remarks @a name must be released with free() by you.
+ *
+ * @param[in] uuid The UUID
+ * @param[out] name The specification name which defined from www.bluetooth.org
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_get_uuid()
+ */
+int bt_gatt_get_uuid_specification_name(const char *uuid, char **name);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Destroys the GATT handle
+ * @since_tizen 2.4
+ *
+ * @param[in] gatt_handle The handle of service, characteristic or descriptor
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_service_create()
+ * @see bt_gatt_characteristic_create()
+ * @see bt_gatt_descriptor_create()
+ */
+int bt_gatt_destroy(bt_gatt_h gatt_handle);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Gets the permissions which a characteristic or descriptor's GATT handle has
+ * @since_tizen 2.4
+ *
+ * @param[in] gatt_handle The handle of a characteristic or descriptor
+ * @param[out] permissions The permissions which a characteristic or descriptor's GATT handle has.
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_characteristic_create()
+ * @see bt_gatt_descriptor_create()
+ * @see bt_gatt_permission_e
+ */
+int bt_gatt_get_permissions(bt_gatt_h gatt_handle, int *permissions);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Updates the permissions which a characteristic or descriptor's GATT handle has
+ * @since_tizen 2.4
+ *
+ * @param[in] gatt_handle The handle of a characteristic or descriptor
+ * @param[in] permissions The permissions to be updated
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_characteristic_create()
+ * @see bt_gatt_descriptor_create()
+ * @see bt_gatt_permission_e
+ */
+int bt_gatt_set_permissions(bt_gatt_h gatt_handle, int permissions);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Creates the GATT service
+ * @since_tizen 2.4
+ *
+ * @param[in] uuid The UUID of the service
+ * @param[in] type The type of the service
+ * @param[out] service The GATT handle of the created service
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_destroy()
+ */
+int bt_gatt_service_create(const char *uuid, bt_gatt_service_type_e type,
+ bt_gatt_h *service);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Adds a characteristic to a specified service
+ * @since_tizen 2.4
+ *
+ * @param[in] service The service's GATT handle
+ * @param[in] characteristic The characteristic's GATT handle to be added
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_service_create()
+ * @see bt_gatt_characteristic_create()
+ */
+int bt_gatt_service_add_characteristic(bt_gatt_h service,
+ bt_gatt_h characteristic);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Adds a service to a specified service as included service
+ * @since_tizen 2.4
+ *
+ * @param[in] service The service's GATT handle
+ * @param[in] included_service The service's GATT handle to be added as included service
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_service_create()
+ */
+int bt_gatt_service_add_included_service(bt_gatt_h service,
+ bt_gatt_h included_service);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Gets the GATT server handle to which the specified service belongs
+ * @since_tizen 2.4
+ *
+ * @param[in] service The service's GATT handle
+ * @param[out] server The GATT server handle to which @a service belongs
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_server_create()
+ * @see bt_gatt_service_create()
+ * @see bt_gatt_server_register_service()
+ */
+int bt_gatt_service_get_server(bt_gatt_h service, bt_gatt_server_h *server);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Creates the GATT characteristic
+ * @since_tizen 2.4
+ *
+ * @param[in] uuid The UUID of the characteristic
+ * @param[in] permissions the permissions of the characteristic
+ * @param[in] properties The properties of the characteristic
+ * @param[in] Value The value(byte stream) of the characteristic
+ * @param[in] value_length The length of @a value
+ * @param[out] characteristic The GATT handle of the created characteristic
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_destroy()
+ */
+int bt_gatt_characteristic_create(const char *uuid, int permissions,
+ int properties, const char *value, int value_length,
+ bt_gatt_h *characteristic);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Adds a descriptor to a specified characteristic
+ * @since_tizen 2.4
+ *
+ * @param[in] characteristic The GATT handle of the characteristic
+ * @param[in] descriptor The descriptor's GATT handle to be added
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_characteristic_create()
+ * @see bt_gatt_descriptor_create()
+ */
+int bt_gatt_characteristic_add_descriptor(bt_gatt_h characteristic,
+ bt_gatt_h descriptor);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Creates the GATT characteristic descriptor
+ * @since_tizen 2.4
+ *
+ * @param[in] uuid The UUID of the descriptor
+ * @param[in] permissions The permissions of the descriptor
+ * @param[in] value The value(byte stream) associated with the descriptor
+ * @param[in] value_length The length of @a value
+ * @param[out] descriptor The GATT handle of the created characteristic descriptor
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_destroy()
+ */
+int bt_gatt_descriptor_create(const char *uuid, int permissions,
+ const char *value, int value_length,
+ bt_gatt_h *descriptor);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Initializes the GATT Server
+ * @since_tizen 2.4
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @see bt_gatt_server_deinitialize()
+ */
+int bt_gatt_server_initialize(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief DeInitializes the GATT server
+ * @since_tizen 2.4
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @see bt_gatt_server_initialize()
+ */
+int bt_gatt_server_deinitialize(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Creates the GATT server's handle
+ * @since_tizen 2.4
+ *
+ * @param[out] server The GATT server's handle
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_server_destroy()
+ */
+int bt_gatt_server_create(bt_gatt_server_h *server);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Destroys the GATT server's handle
+ * @since_tizen 2.4
+ *
+ * @remarks All registered services to GATT server are unregistered
+ *
+ * @param[in] server The GATT server's handle
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_server_create()
+ */
+int bt_gatt_server_destroy(bt_gatt_server_h server);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Registers a callback function to be invoked when a read request for a specified characteristic or descriptor is issued from a remote device(GATT client)
+ * @since_tizen 2.4
+ *
+ * @param[in] gatt_handle The GATT handle of a characteristic or descriptor
+ * @param[in] callback The callback to be invoked
+ * @param[in] user_data The user data to be passed to @a callback function
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_server_read_value_requested_cb()
+ * @see bt_gatt_server_send_response()
+ */
+int bt_gatt_server_set_read_value_requested_cb(bt_gatt_h gatt_handle,
+ bt_gatt_server_read_value_requested_cb callback,
+ void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Registers a callback function to be invoked when a value of a characteristic or descriptor has been changed by a remote device(GATT client)'s request
+ * @since_tizen 2.4
+ *
+ * @param[in] gatt_handle The GATT handle of a characteristic or descriptor
+ * @param[in] callback The callback to be invoked
+ * @param[in] user_data The user data to be passed to @a callback function
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_server_value_changed_cb()
+ */
+int bt_gatt_server_set_value_changed_cb(bt_gatt_h gatt_handle,
+ bt_gatt_server_value_changed_cb callback,
+ void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Registers a specified service to the specified GATT server that the local device is hosting
+ * @since_tizen 2.4
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @param[in] server The GATT server that local device is hosting
+ * @param[in] service The service, which needs to be registered in @a server
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_ALREADY_DONE Operation is already done
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_server_create()
+ * @see bt_gatt_service_create()
+ * @see bt_gatt_server_unregister_service()
+ */
+int bt_gatt_server_register_service(bt_gatt_server_h server, bt_gatt_h service);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Unregisters a specified service from the specified GATT server that the local device is hosting
+ * @since_tizen 2.4
+ *
+ * @param[in] server The GATT server that local device is hosting
+ * @param[in] service The service, which needs to be unregistered from @a server
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_SERVICE_NOT_FOUND Service not found
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_server_register_service()
+ */
+int bt_gatt_server_unregister_service(bt_gatt_server_h server, bt_gatt_h service);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Unregisters all services from the specified GATT server that the local device is hosting
+ * @since_tizen 2.4
+ *
+ * @param[in] server The GATT server that local device is hosting
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_server_register_service()
+ */
+int bt_gatt_server_unregister_all_services(bt_gatt_server_h server);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Sends a response to the remote device as a result of a read request
+ * @since_tizen 2.4
+ *
+ * @remarks Until this function is called, a read request is not finished.
+ *
+ * @param[in] request_id The identification of a read request
+ * @param[in] offset The offset from where a value is read
+ * @param[in] value The value to be sent. It will be sent from @a offset. If it is NULL, a requested GATT handle's value will be sent from @a offset.
+ * @param[in] value_length Value Length
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_server_read_value_requested_cb()
+ */
+int bt_gatt_server_send_response(int request_id,
+ int offset, char *value, int value_length);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Notifys a value change of the characteristic to the remote devices which enable a Client Characteristic Configuration Descriptor
+ * @since_tizen 2.4
+ *
+ * @param[in] characteristic The characteristic which has a changed value
+ * @param[in] need_confirm If it is true, an indication is sent. If it is false, a notification is sent.
+ * @param[in] callback The function to be invoked on each remote device when a sending operation is done
+ * @param[in] user_data The user data to be passed to @a callback function
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_server_notification_sent_cb()
+ */
+int bt_gatt_server_notify(bt_gatt_h characteristic, bool need_confirm,
+ bt_gatt_server_notification_sent_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Gets a service's GATT handle which has specific UUID
+ * @since_tizen 2.4
+ *
+ * @remark The returned GATT handle must not be freed by application.
+ * It will be freed when an associated server is destroyed by bt_gatt_server_destroy().
+ * If there are multiple services which have same UUID, only the first matched one will be returned.
+ *
+ * @param[in] server The GATT server's handle
+ * @param[in] uuid The serivce's GATT handle which has this UUID will be returned if it exists
+ * @param[out] service The service's GATT handle which has @a uuid if it exists
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NO_DATA No data available
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ */
+int bt_gatt_server_get_service(bt_gatt_server_h server, const char *uuid,
+ bt_gatt_h *service);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Invokes @a callback function on each service that belongs to the specified GATT server
+ * @since_tizen 2.4
+ *
+ * @param[in] server The GATT server's handle
+ * @param[in] callback The function to be invoked on each service
+ * @param[in] user_data The user data to be passed to @a callback function
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_foreach_cb()
+ */
+int bt_gatt_server_foreach_services(bt_gatt_server_h server,
+ bt_gatt_foreach_cb callback, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Registers a callback function that will be invoked when the song position is changed by the remote target device.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized by bt_initialize().
+ * @see bt_initialize()
+ * @see bt_avrcp_unset_song_position_changed_cb()
+ */
+int bt_avrcp_set_song_position_changed_cb(bt_avrcp_song_position_changed_cb callback, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Unregisters a callback function that will be invoked when the song position is changed by the remote target device.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized by bt_initialize().
+ * @see bt_initialize()
+ * @see bt_avrcp_set_song_position_changed_cb()
+ */
+int bt_avrcp_unset_song_position_changed_cb(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Registers a callback function that will be invoked when the Play status is changed by the remote target device.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized by bt_initialize().
+ * @see bt_initialize()
+ * @see bt_avrcp_unset_play_status_changed_cb()
+ */
+int bt_avrcp_set_play_status_changed_cb(bt_avrcp_play_status_changed_cb callback, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Unregisters a callback function that will be invoked when the Play status is changed by the remote target device.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized by bt_initialize().
+ * @see bt_initialize()
+ * @see bt_avrcp_unset_play_status_changed_cb()
+ */
+int bt_avrcp_unset_play_status_changed_cb(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Registers a callback function that will be invoked when the track metadata is changed by the remote target device.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized by bt_initialize().
+ * @see bt_initialize()
+ * @see bt_avrcp_unset_track_info_changed_cb()
+ */
+int bt_avrcp_set_track_info_changed_cb(bt_avrcp_track_info_changed_cb callback, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Unregisters a callback function that will be invoked when the track metadata is changed by the remote target device.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized by bt_initialize().
+ * @see bt_initialize()
+ * @see bt_avrcp_set_track_info_changed_cb()
+ */
+int bt_avrcp_unset_track_info_changed_cb(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_MODULE
+ * @brief Registers a callback function that will be invoked when the A2DP Source connection state is changed.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @see bt_audio_initialize()
+ * @see bt_audio_connection_state_changed_cb()
+ */
+int bt_a2dp_source_audio_set_connection_state_changed_cb(bt_audio_connection_state_changed_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_MODULE
+ * @brief Unregisters a callback function that will be invoked when the A2DP Source connection state is changed.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @see bt_audio_initialize()
+ * @see bt_audio_connection_state_changed_cb()
+ * @see bt_audio_set_connection_state_changed_cb()
+ */
+int bt_a2dp_source_audio_unset_connection_state_changed_cb(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Initializes the Bluetooth AVRCP(Audio/Video Remote Control Profile) service.
+ * @since_tizen 2.4
+ * @remarks This function must be called before Bluetooth AVRCP service. \n
+ * You must free all resources of the this service by calling bt_avrcp_control_deinitialize()
+ * if Bluetooth AVRCP service is no longer needed.
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] callback The callback function called when the connection state is changed
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @see bt_initialize()
+ * @see bt_avrcp_control_deinitialize()
+ */
+int bt_avrcp_control_initialize(bt_avrcp_control_connection_state_changed_cb callback, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Deinitializes the Bluetooth AVRCP(Audio/Video Remote Control Profile) service.
+ * @since_tizen 2.4
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ * @pre The Bluetooth audio service must be initialized with bt_avrcp_control_initialize().
+ * @see bt_avrcp_control_initialize()
+ */
+int bt_avrcp_control_deinitialize(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Connects the Bluetooth AVRCP(Audio/Video Remote Control Profile) service.
+ * @since_tizen 2.4
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ * @pre The Bluetooth audio service must be initialized with bt_avrcp_control_initialize().
+ * @see bt_avrcp_control_initialize()
+ */
+int bt_avrcp_control_connect(const char *remote_address);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Disconnects the Bluetooth AVRCP(Audio/Video Remote Control Profile) service.
+ * @since_tizen 2.4
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ * @pre The Bluetooth audio service must be initialized with bt_avrcp_control_initialize().
+ * @see bt_avrcp_control_initialize()
+ * @see bt_avrcp_control_connect()
+ */
+int bt_avrcp_control_disconnect(const char *remote_address);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Handle the Bluetooth AVRCP(Audio/Video Remote Control Profile) commands.
+ * @since_tizen 2.4
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] AVRCP Commands Play, Pause, Next, Rewind.
+ * @return 0 on success, otherwise a negative error value.
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ * @pre The Bluetooth audio service must be initialized with bt_avrcp_control_initialize().
+ * @see bt_avrcp_control_initialize()
+ * @see bt_avrcp_control_connect()
+ */
+int bt_avrcp_control_send_player_command(bt_avrcp_player_command_e cmd);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief send the equalizer change to the remote device.
+ * @since_tizen 2.4
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] state To set the equalizer state ON/OFF
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device must be connected.
+ * @see bt_avrcp_target_connection_state_changed_cb()
+ * @see bt_avrcp_target_initialize()
+ */
+int bt_avrcp_control_set_equalizer_state(bt_avrcp_equalizer_state_e state);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief get the the equalize state of the remote device.
+ * @since_tizen 2.4
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] equalizer To get the equalizer value ON/OFF
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device must be connected.
+ * @see bt_avrcp_target_connection_state_changed_cb()
+ * @see bt_avrcp_target_initialize()
+ */
+int bt_avrcp_control_get_equalizer_state(bt_avrcp_equalizer_state_e *state);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief send the repeat change to the remote device.
+ * @since_tizen 2.4
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] Mode To set the repeat mode OFF, SINGLE, ALL
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device must be connected.
+ * @see bt_avrcp_target_connection_state_changed_cb()
+ * @see bt_avrcp_target_initialize()
+ */
+int bt_avrcp_control_set_repeat_mode(bt_avrcp_repeat_mode_e mode);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief get the repeat state of the remote device.
+ * @since_tizen 2.4
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] Mode To get the repeat mode OFF, SINGLE, ALL
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device must be connected.
+ * @see bt_avrcp_target_connection_state_changed_cb()
+ * @see bt_avrcp_target_initialize()
+ */
+int bt_avrcp_control_get_repeat_mode(bt_avrcp_repeat_mode_e *mode);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief send the shuffle change to the remote device.
+ * @since_tizen 2.4
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] Mode To set the shuffle mode OFF, GROUP, ALL
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device must be connected.
+ * @see bt_avrcp_target_connection_state_changed_cb()
+ * @see bt_avrcp_target_initialize()
+ */
+int bt_avrcp_control_set_shuffle_mode(bt_avrcp_shuffle_mode_e mode);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief get the shuffle state of the remote device.
+ * @since_tizen 2.4
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] Mode To get the shuffle mode OFF, GROUP, ALL
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device must be connected.
+ * @see bt_avrcp_target_connection_state_changed_cb()
+ * @see bt_avrcp_target_initialize()
+ */
+int bt_avrcp_control_get_shuffle_mode(bt_avrcp_shuffle_mode_e *mode);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief send the scan mode change to the remote device.
+ * @since_tizen 2.4
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] Mode To set the scan mode OFF, GROUP, ALL
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device must be connected.
+ * @see bt_avrcp_target_connection_state_changed_cb()
+ * @see bt_avrcp_target_initialize()
+ */
+int bt_avrcp_control_set_scan_mode(bt_avrcp_scan_mode_e mode);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief get the scan mode of the remote device.
+ * @since_tizen 2.4
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] Mode To get the scan mode OFF, GROUP, ALL
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device must be connected.
+ * @see bt_avrcp_target_connection_state_changed_cb()
+ * @see bt_avrcp_target_initialize()
+ */
+int bt_avrcp_control_get_scan_mode(bt_avrcp_scan_mode_e *mode);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief get the song position vale of the remote device.
+ * @since_tizen 2.4
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] Mode To get the position value in milliseconds
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device must be connected.
+ * @see bt_avrcp_target_connection_state_changed_cb()
+ * @see bt_avrcp_target_initialize()
+ */
+int bt_avrcp_control_get_position(unsigned int *position);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief get the play status of the remote device.
+ * @since_tizen 2.4
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] Mode To get the play status PLAYING, STOPPED...
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device must be connected.
+ * @see bt_avrcp_target_connection_state_changed_cb()
+ * @see bt_avrcp_target_initialize()
+ */
+int bt_avrcp_control_get_play_status(bt_avrcp_player_state_e *status);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief get the metadata of the remote device.
+ * @since_tizen 2.4
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] track To get the metadata of track played in remote device.
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device must be connected.
+ * @see bt_avrcp_target_connection_state_changed_cb()
+ * @see bt_avrcp_target_initialize()
+ */
+int bt_avrcp_control_get_track_info(bt_avrcp_metadata_attributes_info_s **track);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief to free the metadata staructure.
+ * @since_tizen 2.4
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] track To free the memory of metadata structure.
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @pre track should point to valid metadata address.
+ * @see bt_avrcp_control_get_track_info()
+ * @see bt_avrcp_target_initialize()
+ */
+int bt_avrcp_control_free_track_info(bt_avrcp_metadata_attributes_info_s *track);
+
+/**
+ * @}
+ */
+
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif // __TIZEN_NETWORK_BLUETOOTH_INTERNAL_H__
diff --git a/include/mobile/bluetooth_type.h b/include/mobile/bluetooth_type.h
new file mode 100644
index 0000000..96aa359
--- /dev/null
+++ b/include/mobile/bluetooth_type.h
@@ -0,0 +1,1829 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef __TIZEN_NETWORK_BLUETOOTH_TYPE_H__
+#define __TIZEN_NETWORK_BLUETOOTH_TYPE_H__
+
+ #ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+
+/**
+ * @file bluetooth_type.h
+ * @brief API to control the Bluetooth adapter, devices and communications.
+ * @ingroup CAPI_NETWORK_BLUETOOTH_TYPE_MODULE
+ */
+
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_MODULE
+ * @brief Enumerations of Bluetooth error codes.
+ * @since_tizen 2.3
+ */
+typedef enum
+{
+ BT_ERROR_NONE = TIZEN_ERROR_NONE, /**< Successful*/
+ BT_ERROR_CANCELLED = TIZEN_ERROR_CANCELED, /**< Operation cancelled */
+ BT_ERROR_INVALID_PARAMETER = TIZEN_ERROR_INVALID_PARAMETER, /**< Invalid parameter */
+ BT_ERROR_OUT_OF_MEMORY = TIZEN_ERROR_OUT_OF_MEMORY, /**< Out of memory */
+ BT_ERROR_RESOURCE_BUSY = TIZEN_ERROR_RESOURCE_BUSY, /**< Device or resource busy */
+ BT_ERROR_TIMED_OUT = TIZEN_ERROR_TIMED_OUT, /**< Timeout error */
+ BT_ERROR_NOW_IN_PROGRESS = TIZEN_ERROR_NOW_IN_PROGRESS, /**< Operation now in progress */
+ BT_ERROR_NOT_SUPPORTED = TIZEN_ERROR_NOT_SUPPORTED, /**< BT is Not Supported */
+ BT_ERROR_PERMISSION_DENIED = TIZEN_ERROR_PERMISSION_DENIED, /**< Permission denied */
+ BT_ERROR_QUOTA_EXCEEDED = TIZEN_ERROR_QUOTA_EXCEEDED, /**< Quota exceeded */
+ BT_ERROR_NO_DATA = TIZEN_ERROR_NO_DATA, /**< No data available */
+ BT_ERROR_NOT_INITIALIZED = TIZEN_ERROR_BLUETOOTH|0x0101, /**< Local adapter not initialized */
+ BT_ERROR_NOT_ENABLED = TIZEN_ERROR_BLUETOOTH|0x0102, /**< Local adapter not enabled */
+ BT_ERROR_ALREADY_DONE = TIZEN_ERROR_BLUETOOTH|0x0103, /**< Operation already done */
+ BT_ERROR_OPERATION_FAILED = TIZEN_ERROR_BLUETOOTH|0x0104, /**< Operation failed */
+ BT_ERROR_NOT_IN_PROGRESS = TIZEN_ERROR_BLUETOOTH|0x0105, /**< Operation not in progress */
+ BT_ERROR_REMOTE_DEVICE_NOT_BONDED = TIZEN_ERROR_BLUETOOTH|0x0106, /**< Remote device not bonded */
+ BT_ERROR_AUTH_REJECTED = TIZEN_ERROR_BLUETOOTH|0x0107, /**< Authentication rejected */
+ BT_ERROR_AUTH_FAILED = TIZEN_ERROR_BLUETOOTH|0x0108, /**< Authentication failed */
+ BT_ERROR_REMOTE_DEVICE_NOT_FOUND = TIZEN_ERROR_BLUETOOTH|0x0109, /**< Remote device not found */
+ BT_ERROR_SERVICE_SEARCH_FAILED = TIZEN_ERROR_BLUETOOTH|0x010A, /**< Service search failed */
+ BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED = TIZEN_ERROR_BLUETOOTH|0x010B, /**< Remote device is not connected */
+ BT_ERROR_AGAIN = TIZEN_ERROR_BLUETOOTH|0x010C, /**< Resource temporarily unavailable */
+ BT_ERROR_SERVICE_NOT_FOUND = TIZEN_ERROR_BLUETOOTH|0x010D, /**< Service Not Found */
+} bt_error_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Enumerations of the Bluetooth adapter state.
+ * @since_tizen 2.3
+ */
+typedef enum
+{
+ BT_ADAPTER_DISABLED = 0x00, /**< Bluetooth adapter is disabled */
+ BT_ADAPTER_ENABLED, /**< Bluetooth adapter is enabled */
+} bt_adapter_state_e;
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Enumerations of the Bluetooth adapter le state.
+ * @since_tizen 2.3
+ */
+typedef enum
+{
+ BT_ADAPTER_LE_DISABLED = 0x00, /**< Bluetooth le is disabled */
+ BT_ADAPTER_LE_ENABLED, /**< Bluetooth le is enabled */
+} bt_adapter_le_state_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Enumerations of the Bluetooth visibility mode.
+ * @since_tizen 2.3
+ */
+typedef enum
+{
+ BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE = 0x00, /**< Other devices cannot find your device via discovery */
+ BT_ADAPTER_VISIBILITY_MODE_GENERAL_DISCOVERABLE, /**< Discoverable mode */
+ BT_ADAPTER_VISIBILITY_MODE_LIMITED_DISCOVERABLE, /**< Discoverable mode with time limit. After specific period,
+ it is changed to #BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE.*/
+} bt_adapter_visibility_mode_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Enumerations of the discovery state of Bluetooth device.
+ * @since_tizen 2.3
+ */
+typedef enum
+{
+ BT_ADAPTER_DEVICE_DISCOVERY_STARTED, /**< Device discovery is started */
+ BT_ADAPTER_DEVICE_DISCOVERY_FINISHED, /**< Device discovery is finished */
+ BT_ADAPTER_DEVICE_DISCOVERY_FOUND, /**< The remote Bluetooth device is found */
+} bt_adapter_device_discovery_state_e;
+
+/**
+ * @deprecated Deprecated since 2.3.1
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Enumerations of the discovery state of Bluetooth LE device.
+ * @since_tizen 2.3
+ *
+ */
+typedef enum
+{
+ BT_ADAPTER_LE_DEVICE_DISCOVERY_STARTED, /**< LE device discovery is started */
+ BT_ADAPTER_LE_DEVICE_DISCOVERY_FINISHED, /**< LE device discovery is finished */
+ BT_ADAPTER_LE_DEVICE_DISCOVERY_FOUND, /**< The remote Bluetooth LE device is found */
+} bt_adapter_le_device_discovery_state_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Enumerations of the Bluetooth advertising state.
+ * @since_tizen 2.3
+ */
+typedef enum {
+ BT_ADAPTER_LE_ADVERTISING_STOPPED = 0x00, /**< Bluetooth advertising is stopped */
+ BT_ADAPTER_LE_ADVERTISING_STARTED, /**< Bluetooth advertising is started */
+} bt_adapter_le_advertising_state_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Enumerations of the Bluetooth advertising mode.
+ * @since_tizen 2.3.1
+ */
+typedef enum
+{
+ BT_ADAPTER_LE_ADVERTISING_MODE_BALANCED, /**< Balanced advertising mode */
+ BT_ADAPTER_LE_ADVERTISING_MODE_LOW_LATENCY, /**< Low latency advertising mode */
+ BT_ADAPTER_LE_ADVERTISING_MODE_LOW_ENERGY /**< Low energy advertising mode */
+} bt_adapter_le_advertising_mode_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Enumerations of the Bluetooth advertising filter policy.
+ * @since_tizen 2.3
+ */
+typedef enum {
+ BT_ADAPTER_LE_ADVERTISING_FILTER_DEFAULT = 0x00, /**< White list is not in use */
+ BT_ADAPTER_LE_ADVERTISING_FILTER_ALLOW_SCAN_WL = 0x01, /**< Allow the scan
+ request that in the White list */
+ BT_ADAPTER_LE_ADVERTISING_FILTER_ALLOW_CONN_WL = 0x02, /**< Allow the connectoin
+ request that in the White list */
+ BT_ADAPTER_LE_ADVERTISING_FILTER_ALLOW_SCAN_CONN_WL = 0x03, /**< Allow the
+ scan and connectoin request that in the White list */
+} bt_adapter_le_advertising_filter_policy_e;
+
+/**
+ * @deprecated Deprecated since 2.3.1
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Enumerations of the Bluetooth advertising type.
+ * @since_tizen 2.3
+ */
+typedef enum {
+ BT_ADAPTER_LE_ADVERTISING_CONNECTABLE = 0x00, /**< Connectable undirected advertising (ADV_IND) */
+ BT_ADAPTER_LE_ADVERTISING_CONNECTABLE_DIRECT_HIGH = 0x01, /**< Connectable high duty cycle directed advertising (ADV_DIRECT_IND) */
+ BT_ADAPTER_LE_ADVERTISING_SCANNABLE = 0x02, /**< Scannable undirected advertising (ADV_SCAN_IND) */
+ BT_ADAPTER_LE_ADVERTISING_NON_CONNECTABLE = 0x03, /**< Non connectable undirected advertising (ADV_NONCOND_IND) */
+ BT_ADAPTER_LE_ADVERTISING_CONNECTABLE_DIRECT_LOW = 0x04, /**< Connectable low duty cycle directed advertising (ADV_DIRECT_IND) */
+} bt_adapter_le_advertising_type_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Enumerations of the Bluetooth LE packet type.
+ * @since_tizen 2.3
+ */
+typedef enum {
+ BT_ADAPTER_LE_PACKET_ADVERTISING, /**< Advertising packet */
+ BT_ADAPTER_LE_PACKET_SCAN_RESPONSE, /**< Sacn response packet */
+} bt_adapter_le_packet_type_e;
+
+/**
+ * @deprecated Deprecated since 2.3.1
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Enumerations of the Bluetooth LE data type
+ * that can be included in LE packets.
+ * @since_tizen 2.3
+ */
+typedef enum {
+ BT_ADAPTER_LE_PACKET_DATA_COMP_LIST_16_BIT_SERVICE_CLASS_UUIDS = 0x03, /**< Complete list of 16 bit UUIDs */
+ BT_ADAPTER_LE_PACKET_DATA_MANUFACTURER_SPECIFIC_DATA = 0xff, /**< Manufacturer data */
+} bt_adapter_le_packet_data_type_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Enumerations of device disconnect reason.
+ * @since_tizen 2.3
+ */
+typedef enum
+{
+ BT_DEVICE_DISCONNECT_REASON_UNKNOWN, /**< Disconnected by unknown reason */
+ BT_DEVICE_DISCONNECT_REASON_TIMEOUT, /**< Disconnected by timeout */
+ BT_DEVICE_DISCONNECT_REASON_LOCAL_HOST, /**< Disconnected by local host */
+ BT_DEVICE_DISCONNECT_REASON_REMOTE, /**< Disconnected by remote */
+} bt_device_disconnect_reason_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Enumerations of connection link type.
+ * @since_tizen 2.3
+ */
+typedef enum
+{
+ BT_DEVICE_CONNECTION_LINK_BREDR, /**< BR/EDR link */
+ BT_DEVICE_CONNECTION_LINK_LE, /**< LE link */
+ BT_DEVICE_CONNECTION_LINK_DEFAULT = 0xFF, /**< The connection type defualt */
+} bt_device_connection_link_type_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Enumerations of device authorization state.
+ * @since_tizen 2.3
+ */
+typedef enum
+{
+ BT_DEVICE_AUTHORIZED, /**< The remote Bluetooth device is authorized */
+ BT_DEVICE_UNAUTHORIZED, /**< The remote Bluetooth device is unauthorized */
+} bt_device_authorization_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Enumerations of Bluetooth profile.
+ * @since_tizen 2.3
+ */
+typedef enum
+{
+ BT_PROFILE_RFCOMM = 0x01, /**< RFCOMM Profile */
+ BT_PROFILE_A2DP = 0x02, /**< Advanced Audio Distribution Profile */
+ BT_PROFILE_HSP = 0x04, /**< Headset Profile */
+ BT_PROFILE_HID = 0x08, /**< Human Interface Device Profile */
+ BT_PROFILE_NAP = 0x10, /**< Network Access Point Profile */
+ BT_PROFILE_AG = 0x20, /**< Audio Gateway Profile */
+ BT_PROFILE_GATT = 0x40, /**< Generic Attribute Profile */
+ BT_PROFILE_NAP_SERVER = 0x80, /**< NAP server Profile */
+} bt_profile_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Enumerations of device address type.
+ * @since_tizen 2.3
+ */
+typedef enum
+{
+ BT_DEVICE_PUBLIC_ADDRESS = 0x00, /**< Public address */
+ BT_DEVICE_RANDOM_ADDRESS, /**< Random address */
+} bt_device_address_type_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Enumerations of service class.
+ * @since_tizen 2.3
+ */
+typedef enum {
+ BT_SC_NONE = 0, /**< No service class */
+ BT_SC_RES_SERVICE_MASK = 0x00000001, /**< RES service class */
+ BT_SC_SPP_SERVICE_MASK = 0x00000002, /**< SPP service class */
+ BT_SC_DUN_SERVICE_MASK = 0x00000004, /**< DUN service class */
+ BT_SC_FAX_SERVICE_MASK = 0x00000008, /**< FAX service class */
+ BT_SC_LAP_SERVICE_MASK = 0x00000010, /**< LAP service class */
+ BT_SC_HSP_SERVICE_MASK = 0x00000020, /**< HSP service class */
+ BT_SC_HFP_SERVICE_MASK = 0x00000040, /**< HFP service class */
+ BT_SC_OPP_SERVICE_MASK = 0x00000080, /**< OPP service class */
+ BT_SC_FTP_SERVICE_MASK = 0x00000100, /**< FTP service class */
+ BT_SC_CTP_SERVICE_MASK = 0x00000200, /**< CTP service class */
+ BT_SC_ICP_SERVICE_MASK = 0x00000400, /**< ICP service class */
+ BT_SC_SYNC_SERVICE_MASK = 0x00000800, /**< SYNC service class */
+ BT_SC_BPP_SERVICE_MASK = 0x00001000, /**< BPP service class */
+ BT_SC_BIP_SERVICE_MASK = 0x00002000, /**< BIP service class */
+ BT_SC_PANU_SERVICE_MASK = 0x00004000, /**< PANU service class */
+ BT_SC_NAP_SERVICE_MASK = 0x00008000, /**< NAP service class */
+ BT_SC_GN_SERVICE_MASK = 0x00010000, /**< GN service class */
+ BT_SC_SAP_SERVICE_MASK = 0x00020000, /**< SAP service class */
+ BT_SC_A2DP_SERVICE_MASK = 0x00040000, /**< A2DP service class */
+ BT_SC_AVRCP_SERVICE_MASK = 0x00080000, /**< AVRCP service class */
+ BT_SC_PBAP_SERVICE_MASK = 0x00100000, /**< PBAP service class */
+ BT_SC_HID_SERVICE_MASK = 0x00200000, /**< HID service class */
+ BT_SC_A2DP_SOURCE_SERVICE_MASK = 0x00400000, /**< A2DP SOURCE service class */
+ BT_SC_ALL_SERVICE_MASK = 0x00FFFFFF, /**< ALL service class */
+ BT_SC_MAX /**< MAX service class */
+} bt_service_class_t;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Enumerations of major service class.
+ * @since_tizen 2.3
+ */
+typedef enum
+{
+ BT_MAJOR_SERVICE_CLASS_LIMITED_DISCOVERABLE_MODE = 0x002000, /**< Limited discoverable mode */
+ BT_MAJOR_SERVICE_CLASS_POSITIONING = 0x010000, /**< Positioning class */
+ BT_MAJOR_SERVICE_CLASS_NETWORKING = 0x020000, /**< Networking class */
+ BT_MAJOR_SERVICE_CLASS_RENDERING = 0x040000, /**< Rendering class */
+ BT_MAJOR_SERVICE_CLASS_CAPTURING = 0x080000, /**< Capturing class */
+ BT_MAJOR_SERVICE_CLASS_OBJECT_TRANSFER = 0x100000, /**< Object transferring class */
+ BT_MAJOR_SERVICE_CLASS_AUDIO = 0x200000, /**< Audio class*/
+ BT_MAJOR_SERVICE_CLASS_TELEPHONY = 0x400000, /**< Telephony class */
+ BT_MAJOR_SERVICE_CLASS_INFORMATION = 0x800000, /**< Information class */
+} bt_major_service_class_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Enumerations of major device class.
+ * @since_tizen 2.3
+ */
+typedef enum
+{
+ BT_MAJOR_DEVICE_CLASS_MISC = 0x00, /**< Miscellaneous major device class*/
+ BT_MAJOR_DEVICE_CLASS_COMPUTER = 0x01, /**< Computer major device class */
+ BT_MAJOR_DEVICE_CLASS_PHONE = 0x02, /**< Phone major device class */
+ BT_MAJOR_DEVICE_CLASS_LAN_NETWORK_ACCESS_POINT = 0x03, /**< LAN/Network access point major device class */
+ BT_MAJOR_DEVICE_CLASS_AUDIO_VIDEO = 0x04, /**< Audio/Video major device class */
+ BT_MAJOR_DEVICE_CLASS_PERIPHERAL = 0x05, /**< Peripheral major device class */
+ BT_MAJOR_DEVICE_CLASS_IMAGING = 0x06, /**< Imaging major device class */
+ BT_MAJOR_DEVICE_CLASS_WEARABLE = 0x07, /**< Wearable device class */
+ BT_MAJOR_DEVICE_CLASS_TOY = 0x08, /**< Toy device class */
+ BT_MAJOR_DEVICE_CLASS_HEALTH = 0x09, /**< Health device class */
+ BT_MAJOR_DEVICE_CLASS_UNCATEGORIZED = 0x1F, /**< Uncategorized major device class */
+} bt_major_device_class_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Enumerations of minor device class.
+ * @since_tizen 2.3
+ */
+typedef enum
+{
+ BT_MINOR_DEVICE_CLASS_COMPUTER_UNCATEGORIZED = 0x00, /**< Uncategorized minor device class of computer */
+ BT_MINOR_DEVICE_CLASS_COMPUTER_DESKTOP_WORKSTATION = 0x04, /**< Desktop workstation minor device class of computer */
+ BT_MINOR_DEVICE_CLASS_COMPUTER_SERVER_CLASS = 0x08, /**< Server minor device class of computer */
+ BT_MINOR_DEVICE_CLASS_COMPUTER_LAPTOP = 0x0C, /**< Laptop minor device class of computer */
+ BT_MINOR_DEVICE_CLASS_COMPUTER_HANDHELD_PC_OR_PDA = 0x10, /**< Handheld PC/PDA minor device class of computer */
+ BT_MINOR_DEVICE_CLASS_COMPUTER_PALM_SIZED_PC_OR_PDA = 0x14, /**< Palm sized PC/PDA minor device class of computer */
+ BT_MINOR_DEVICE_CLASS_COMPUTER_WEARABLE_COMPUTER = 0x18, /**< Wearable(watch sized) minor device class of computer */
+
+ BT_MINOR_DEVICE_CLASS_PHONE_UNCATEGORIZED = 0x00, /**< Uncategorized minor device class of phone */
+ BT_MINOR_DEVICE_CLASS_PHONE_CELLULAR = 0x04, /**< Cellular minor device class of phone */
+ BT_MINOR_DEVICE_CLASS_PHONE_CORDLESS = 0x08, /**< Cordless minor device class of phone */
+ BT_MINOR_DEVICE_CLASS_PHONE_SMART_PHONE = 0x0C, /**< Smart phone minor device class of phone */
+ BT_MINOR_DEVICE_CLASS_PHONE_WIRED_MODEM_OR_VOICE_GATEWAY = 0x10, /**< Wired modem or voice gateway minor device class of phone */
+ BT_MINOR_DEVICE_CLASS_PHONE_COMMON_ISDN_ACCESS = 0x14, /**< Common ISDN minor device class of phone */
+
+ BT_MINOR_DEVICE_CLASS_LAN_NETWORK_ACCESS_POINT_FULLY_AVAILABLE = 0x04, /**< Fully available minor device class of LAN/Network access point */
+ BT_MINOR_DEVICE_CLASS_LAN_NETWORK_ACCESS_POINT_1_TO_17_PERCENT_UTILIZED = 0x20, /**< 1-17% utilized minor device class of LAN/Network access point */
+ BT_MINOR_DEVICE_CLASS_LAN_NETWORK_ACCESS_POINT_17_TO_33_PERCENT_UTILIZED = 0x40, /**< 17-33% utilized minor device class of LAN/Network access point */
+ BT_MINOR_DEVICE_CLASS_LAN_NETWORK_ACCESS_POINT_33_TO_50_PERCENT_UTILIZED = 0x60, /**< 33-50% utilized minor device class of LAN/Network access point */
+ BT_MINOR_DEVICE_CLASS_LAN_NETWORK_ACCESS_POINT_50_to_67_PERCENT_UTILIZED = 0x80, /**< 50-67% utilized minor device class of LAN/Network access point */
+ BT_MINOR_DEVICE_CLASS_LAN_NETWORK_ACCESS_POINT_67_TO_83_PERCENT_UTILIZED = 0xA0, /**< 67-83% utilized minor device class of LAN/Network access point */
+ BT_MINOR_DEVICE_CLASS_LAN_NETWORK_ACCESS_POINT_83_TO_99_PERCENT_UTILIZED = 0xC0, /**< 83-99% utilized minor device class of LAN/Network access point */
+ BT_MINOR_DEVICE_CLASS_LAN_NETWORK_ACCESS_POINT_NO_SERVICE_AVAILABLE = 0xE0, /**< No service available minor device class of LAN/Network access point */
+
+ BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_UNCATEGORIZED = 0x00, /**< Uncategorized minor device class of audio/video */
+ BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_WEARABLE_HEADSET = 0x04, /**< Wearable headset minor device class of audio/video */
+ BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_HANDS_FREE = 0x08, /**< Hands-free minor device class of audio/video */
+ BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_MICROPHONE = 0x10, /**< Microphone minor device class of audio/video */
+ BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_LOUDSPEAKER = 0x14, /**< Loudspeaker minor device class of audio/video */
+ BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_HEADPHONES = 0x18, /**< Headphones minor device class of audio/video */
+ BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_PORTABLE_AUDIO = 0x1C, /**< Portable audio minor device class of audio/video */
+ BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_CAR_AUDIO = 0x20, /**< Car audio minor device class of audio/video */
+ BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_SET_TOP_BOX = 0x24, /**< Set-top box minor device class of audio/video */
+ BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_HIFI_AUDIO_DEVICE = 0x28, /**< Hifi audio minor device class of audio/video */
+ BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_VCR = 0x2C, /**< VCR minor device class of audio/video */
+ BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_VIDEO_CAMERA = 0x30, /**< Video camera minor device class of audio/video */
+ BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_CAMCORDER = 0x34, /**< Camcorder minor device class of audio/video */
+ BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_VIDEO_MONITOR = 0x38, /**< Video monitor minor device class of audio/video */
+ BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_VIDEO_DISPLAY_LOUDSPEAKER = 0x3C, /**< Video display and loudspeaker minor device class of audio/video */
+ BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_VIDEO_CONFERENCING = 0x40, /**< Video conferencing minor device class of audio/video */
+ BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_GAMING_TOY = 0x48, /**< Gaming/toy minor device class of audio/video */
+
+ BT_MINOR_DEVICE_CLASS_PERIPHERA_UNCATEGORIZED = 0x00, /**< Uncategorized minor device class of peripheral */
+ BT_MINOR_DEVICE_CLASS_PERIPHERAL_KEY_BOARD = 0x40, /**< Key board minor device class of peripheral */
+ BT_MINOR_DEVICE_CLASS_PERIPHERAL_POINTING_DEVICE = 0x80, /**< Pointing device minor device class of peripheral */
+ BT_MINOR_DEVICE_CLASS_PERIPHERAL_COMBO_KEYBOARD_POINTING_DEVICE = 0xC0, /**< Combo keyboard or pointing device minor device class of peripheral */
+ BT_MINOR_DEVICE_CLASS_PERIPHERAL_JOYSTICK = 0x04, /**< Joystick minor device class of peripheral */
+ BT_MINOR_DEVICE_CLASS_PERIPHERAL_GAME_PAD = 0x08, /**< Game pad minor device class of peripheral */
+ BT_MINOR_DEVICE_CLASS_PERIPHERAL_REMOTE_CONTROL = 0x0C, /**< Remote control minor device class of peripheral */
+ BT_MINOR_DEVICE_CLASS_PERIPHERAL_SENSING_DEVICE = 0x10, /**< Sensing device minor device class of peripheral */
+ BT_MINOR_DEVICE_CLASS_PERIPHERAL_DIGITIZER_TABLET = 0x14, /**< Digitizer minor device class of peripheral */
+ BT_MINOR_DEVICE_CLASS_PERIPHERAL_CARD_READER = 0x18, /**< Card reader minor device class of peripheral */
+ BT_MINOR_DEVICE_CLASS_PERIPHERAL_DIGITAL_PEN = 0x1C, /**< Digital pen minor device class of peripheral */
+ BT_MINOR_DEVICE_CLASS_PERIPHERAL_HANDHELD_SCANNER = 0x20, /**< Handheld scanner minor device class of peripheral */
+ BT_MINOR_DEVICE_CLASS_PERIPHERAL_HANDHELD_GESTURAL_INPUT_DEVICE = 0x24, /**< Handheld gestural input device minor device class of peripheral */
+
+ BT_MINOR_DEVICE_CLASS_IMAGING_DISPLAY = 0x10, /**< Display minor device class of imaging */
+ BT_MINOR_DEVICE_CLASS_IMAGING_CAMERA = 0x20, /**< Camera minor device class of imaging */
+ BT_MINOR_DEVICE_CLASS_IMAGING_SCANNER = 0x40, /**< Scanner minor device class of imaging */
+ BT_MINOR_DEVICE_CLASS_IMAGING_PRINTER = 0x80, /**< Printer minor device class of imaging */
+
+ BT_MINOR_DEVICE_CLASS_WEARABLE_WRIST_WATCH = 0x04, /**< Wrist watch minor device class of wearable */
+ BT_MINOR_DEVICE_CLASS_WEARABLE_PAGER = 0x08, /**< Pager minor device class of wearable */
+ BT_MINOR_DEVICE_CLASS_WEARABLE_JACKET = 0x0C, /**< Jacket minor device class of wearable */
+ BT_MINOR_DEVICE_CLASS_WEARABLE_HELMET = 0x10, /**< Helmet minor device class of wearable */
+ BT_MINOR_DEVICE_CLASS_WEARABLE_GLASSES = 0x14, /**< Glasses minor device class of wearable */
+
+ BT_MINOR_DEVICE_CLASS_TOY_ROBOT = 0x04, /**< Robot minor device class of toy */
+ BT_MINOR_DEVICE_CLASS_TOY_VEHICLE = 0x08, /**< Vehicle minor device class of toy */
+ BT_MINOR_DEVICE_CLASS_TOY_DOLL_ACTION = 0x0C, /**< Doll/Action minor device class of toy */
+ BT_MINOR_DEVICE_CLASS_TOY_CONTROLLER = 0x10, /**< Controller minor device class of toy */
+ BT_MINOR_DEVICE_CLASS_TOY_GAME = 0x14, /**< Game minor device class of toy */
+
+ BT_MINOR_DEVICE_CLASS_HEALTH_UNCATEGORIZED = 0x00, /**< Uncategorized minor device class of health */
+ BT_MINOR_DEVICE_CLASS_HEALTH_BLOOD_PRESSURE_MONITOR = 0x04, /**< Blood pressure monitor minor device class of health */
+ BT_MINOR_DEVICE_CLASS_HEALTH_THERMOMETER = 0x08, /**< Thermometer minor device class of health */
+ BT_MINOR_DEVICE_CLASS_HEALTH_WEIGHING_SCALE = 0x0C, /**< Weighing scale minor device class of health */
+ BT_MINOR_DEVICE_CLASS_HEALTH_GLUCOSE_METER = 0x10, /**< Glucose minor device class of health */
+ BT_MINOR_DEVICE_CLASS_HEALTH_PULSE_OXIMETER = 0x14, /**< Pulse oximeter minor device class of health */
+ BT_MINOR_DEVICE_CLASS_HEALTH_HEART_PULSE_RATE_MONITOR = 0x18, /**< Heart/Pulse rate monitor minor device class of health */
+ BT_MINOR_DEVICE_CLASS_HEALTH_DATA_DISPLAY = 0x1C, /**< Health data display minor device class of health */
+ BT_MINOR_DEVICE_CLASS_HEALTH_STEP_COUNTER = 0x20, /**< Step counter minor device class of health */
+ BT_MINOR_DEVICE_CLASS_HEALTH_BODY_COMPOSITION_ANALYZER = 0x24, /**< Body composition analyzer minor device class of health */
+ BT_MINOR_DEVICE_CLASS_HEALTH_PEAK_FLOW_MONITOR = 0x28, /**< Peak flow monitor minor device class of health */
+ BT_MINOR_DEVICE_CLASS_HEALTH_MEDICATION_MONITOR = 0x2C, /**< Medication monitor minor device class of health */
+ BT_MINOR_DEVICE_CLASS_HEALTH_KNEE_PROSTHESIS = 0x30, /**< Knee prosthesis minor device class of health */
+ BT_MINOR_DEVICE_CLASS_HEALTH_ANKLE_PROSTHESIS = 0x34, /**< Ankle prosthesis minor device class of health */
+} bt_minor_device_class_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Enumerations of gap appearance type.
+ * @since_tizen 2.3
+ */
+typedef enum
+{
+ BT_APPEARANCE_TYPE_UNKNOWN = 0x00, /**< Unknown appearance type */
+ BT_APPEARANCE_TYPE_GENERIC_PHONE = 0x40, /**< Generic Phone type - Generic category */
+ BT_APPEARANCE_TYPE_GENERIC_COMPUTER = 0x80, /**< Generic Computer type - Generic category */
+ BT_APPEARANCE_TYPE_GENERIC_WATCH = 0xC0, /**< Generic Watch type - Generic category */
+} bt_appearance_type_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Enumerations of connected Bluetooth device event role.
+ * @since_tizen 2.3
+ */
+typedef enum
+{
+ BT_SOCKET_UNKNOWN = 0x00, /**< Unknown role*/
+ BT_SOCKET_SERVER , /**< Server role*/
+ BT_SOCKET_CLIENT, /**< Client role*/
+} bt_socket_role_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Enumerations of Bluetooth socket connection state.
+ * @since_tizen 2.3
+ */
+typedef enum
+{
+ BT_SOCKET_CONNECTED, /**< RFCOMM is connected */
+ BT_SOCKET_DISCONNECTED, /**< RFCOMM is disconnected */
+} bt_socket_connection_state_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_MODULE
+ * @brief Enumerations for the types of profiles related with audio
+ * @since_tizen 2.3
+ */
+typedef enum {
+ BT_AUDIO_PROFILE_TYPE_ALL = 0, /**< All supported profiles related with audio */
+ BT_AUDIO_PROFILE_TYPE_HSP_HFP, /**< HSP(Headset Profile) and HFP(Hands-Free Profile) */
+ BT_AUDIO_PROFILE_TYPE_A2DP, /**< A2DP(Advanced Audio Distribution Profile) */
+ BT_AUDIO_PROFILE_TYPE_AG, /**< AG(Audio Gateway) */
+} bt_audio_profile_type_e;
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Enumerations for the call handling event
+ * @since_tizen 2.3
+ */
+typedef enum {
+ BT_AG_CALL_HANDLING_EVENT_ANSWER = 0x00, /**< Request to answer an incoming call */
+ BT_AG_CALL_HANDLING_EVENT_RELEASE, /**< Request to release a call */
+ BT_AG_CALL_HANDLING_EVENT_REJECT, /**< Request to reject an incoming call */
+} bt_ag_call_handling_event_e;
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Enumerations for the multi call handling event
+ * @since_tizen 2.3
+ */
+typedef enum {
+ BT_AG_MULTI_CALL_HANDLING_EVENT_RELEASE_HELD_CALLS = 0x00, /**< Request to release held calls */
+ BT_AG_MULTI_CALL_HANDLING_EVENT_RELEASE_ACTIVE_CALLS, /**< Request to release active calls */
+ BT_AG_MULTI_CALL_HANDLING_EVENT_ACTIVATE_HELD_CALL, /**< Request to put active calls into hold state and activate another (held or waiting) call */
+ BT_AG_MULTI_CALL_HANDLING_EVENT_MERGE_CALLS, /**< Request to add a held call to the conversation */
+ BT_AG_MULTI_CALL_HANDLING_EVENT_EXPLICIT_CALL_TRANSFER, /**< Request to let a user who has two calls to connect these two calls together and release its connections to both other parties */
+} bt_ag_multi_call_handling_event_e;
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Enumerations for the call state
+ * @since_tizen 2.3
+ */
+typedef enum {
+ BT_AG_CALL_EVENT_IDLE = 0x00, /**< Idle */
+ BT_AG_CALL_EVENT_ANSWERED, /**< Answered */
+ BT_AG_CALL_EVENT_HELD, /**< Held */
+ BT_AG_CALL_EVENT_RETRIEVED, /**< Retrieved */
+ BT_AG_CALL_EVENT_DIALING, /**< Dialing */
+ BT_AG_CALL_EVENT_ALERTING, /**< Alerting */
+ BT_AG_CALL_EVENT_INCOMING, /**< Incoming */
+} bt_ag_call_event_e;
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Enumerations for the call state
+ * @since_tizen 2.3
+ */
+typedef enum {
+ BT_AG_CALL_STATE_IDLE = 0x00, /**< Idle state */
+ BT_AG_CALL_STATE_ACTIVE, /**< Active state */
+ BT_AG_CALL_STATE_HELD, /**< Held state */
+ BT_AG_CALL_STATE_DIALING, /**< Dialing state */
+ BT_AG_CALL_STATE_ALERTING, /**< Alerting state */
+ BT_AG_CALL_STATE_INCOMING, /**< Incoming state */
+ BT_AG_CALL_STATE_WAITING, /**< Waiting for connected indication event after answering an incoming call*/
+} bt_ag_call_state_e;
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Enumerations for the equalizer state
+ * @since_tizen 2.3
+ */
+typedef enum {
+ BT_AVRCP_EQUALIZER_STATE_OFF = 0x01, /**< Equalizer Off */
+ BT_AVRCP_EQUALIZER_STATE_ON, /**< Equalizer On */
+} bt_avrcp_equalizer_state_e;
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Enumerations for the repeat mode
+ * @since_tizen 2.3
+ */
+typedef enum {
+ BT_AVRCP_REPEAT_MODE_OFF = 0x01, /**< Repeat Off */
+ BT_AVRCP_REPEAT_MODE_SINGLE_TRACK, /**< Single track repeat */
+ BT_AVRCP_REPEAT_MODE_ALL_TRACK, /**< All track repeat */
+ BT_AVRCP_REPEAT_MODE_GROUP, /**< Group repeat */
+} bt_avrcp_repeat_mode_e;
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Enumerations for the shuffle mode
+ * @since_tizen 2.3
+ */
+typedef enum {
+ BT_AVRCP_SHUFFLE_MODE_OFF = 0x01, /**< Shuffle Off */
+ BT_AVRCP_SHUFFLE_MODE_ALL_TRACK, /**< All tracks shuffle */
+ BT_AVRCP_SHUFFLE_MODE_GROUP, /**< Group shuffle */
+} bt_avrcp_shuffle_mode_e;
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Enumerations for the scan mode
+ * @since_tizen 2.3
+ */
+typedef enum {
+ BT_AVRCP_SCAN_MODE_OFF = 0x01, /**< Scan Off */
+ BT_AVRCP_SCAN_MODE_ALL_TRACK, /**< All tracks scan */
+ BT_AVRCP_SCAN_MODE_GROUP, /**< Group scan */
+} bt_avrcp_scan_mode_e;
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Enumerations for the player state
+ * @since_tizen 2.3
+ */
+typedef enum {
+ BT_AVRCP_PLAYER_STATE_STOPPED = 0x00, /**< Stopped */
+ BT_AVRCP_PLAYER_STATE_PLAYING, /**< Playing */
+ BT_AVRCP_PLAYER_STATE_PAUSED, /**< Paused */
+ BT_AVRCP_PLAYER_STATE_FORWARD_SEEK, /**< Seek Forward */
+ BT_AVRCP_PLAYER_STATE_REWIND_SEEK, /**< Seek Rewind */
+} bt_avrcp_player_state_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_HDP_MODULE
+ * @brief Enumerations for the data channel type
+ * @since_tizen 2.3
+ */
+typedef enum {
+ BT_HDP_CHANNEL_TYPE_RELIABLE = 0x01, /**< Reliable Data Channel */
+ BT_HDP_CHANNEL_TYPE_STREAMING, /**< Streaming Data Channel */
+} bt_hdp_channel_type_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Enumerations of the integer type for GATT handle's value
+ * @since_tizen 2.3.1
+ */
+typedef enum {
+ BT_DATA_TYPE_SINT8, /**< 8 bit signed int type */
+ BT_DATA_TYPE_SINT16, /**< 16 bit signed int type */
+ BT_DATA_TYPE_SINT32, /**< 32 bit signed int type */
+ BT_DATA_TYPE_UINT8, /**< 8 bit unsigned int type */
+ BT_DATA_TYPE_UINT16, /**< 16 bit unsigned int type */
+ BT_DATA_TYPE_UINT32 /**< 32 bit unsigned int type */
+} bt_data_type_int_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Enumerations of the float type for GATT handle's value
+ * @since_tizen 2.3.1
+ */
+typedef enum {
+ BT_DATA_TYPE_FLOAT, /**< 32 bit float type */
+ BT_DATA_TYPE_SFLOAT /**< 16 bit float type */
+} bt_data_type_float_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Enumerations of the write type
+ * @since_tizen 2.3.1
+ */
+typedef enum {
+ BT_GATT_WRITE_TYPE_WRITE_NO_RESPONSE, /**< Write without response type */
+ BT_GATT_WRITE_TYPE_WRITE /**< Write type */
+} bt_gatt_write_type_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Enumerations of the GATT handle's type
+ * @since_tizen 2.3.1
+ */
+typedef enum {
+ BT_GATT_TYPE_SERVICE = 0x01, /**< GATT service type */
+ BT_GATT_TYPE_CHARACTERISTIC = 0x02, /** GATT characteristic type */
+ BT_GATT_TYPE_DESCRIPTOR = 0x03, /** GATT descriptor type */
+} bt_gatt_type_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Enumerations of the service type
+ * @since_tizen 2.3.1
+ */
+typedef enum {
+ BT_GATT_SERVICE_TYPE_PRIMARY = 0x01, /**< GATT primary service type */
+ BT_GATT_SERVICE_TYPE_SECONDARY = 0x02, /**< GATT secondary service type */
+} bt_gatt_service_type_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Enumerations of the characteristic's property
+ * @since_tizen 2.3.1
+ */
+typedef enum {
+ BT_GATT_PROPERTY_BROADCAST = 0x01, /**< Broadcast property */
+ BT_GATT_PROPERTY_READ = 0x02, /**< Read property */
+ BT_GATT_PROPERTY_WRITE_WITHOUT_RESPONSE = 0x04, /**< Write without response property */
+ BT_GATT_PROPERTY_WRITE = 0x08, /**< Write property */
+ BT_GATT_PROPERTY_NOTIFY = 0x10, /**< Notify property */
+ BT_GATT_PROPERTY_INDICATE = 0x20, /**< Indicate property */
+ BT_GATT_PROPERTY_AUTHENTICATED_SIGNED_WRITES = 0x40, /**< Authenticated signed writes property */
+ BT_GATT_PROPERTY_EXTENDED_PROPERTIES = 0x80, /**< Extended properties */
+} bt_gatt_property_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PAN_PANU_MODULE
+ * @brief Enumerations for the types of PAN(Personal Area Networking) service
+ * @since_tizen 2.3
+ */
+typedef enum {
+ BT_PANU_SERVICE_TYPE_NAP = 0, /**< Network Access Point */
+} bt_panu_service_type_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief The handle to control Bluetooth LE advertising
+ * @since_tizen 2.3
+ */
+typedef void* bt_advertiser_h;
+
+/**
+ * @deprecated Deprecated since 2.3.1. Use bt_gatt_h instead.
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief The attribute handle of GATT(Generic Attribute Profile)
+ * @since_tizen 2.3
+ */
+typedef void* bt_gatt_attribute_h;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief The handle of a service, characteristic or descriptor
+ * @since_tizen 2.3.1
+ */
+typedef void* bt_gatt_h;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief The handle of a GATT client which is associated with a remote device
+ * @since_tizen 2.3.1
+ */
+typedef void* bt_gatt_client_h;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief The handle of calls state
+ * @since_tizen 2.3
+ */
+typedef void* bt_call_list_h;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Class structure of device and service.
+ * @since_tizen 2.3
+ *
+ * @see #bt_device_info_s
+ * @see #bt_adapter_device_discovery_info_s
+ * @see bt_device_bond_created_cb()
+ * @see bt_adapter_device_discovery_state_changed_cb()
+ */
+typedef struct
+{
+ bt_major_device_class_e major_device_class; /**< Major device class. */
+ bt_minor_device_class_e minor_device_class; /**< Minor device class. */
+ int major_service_class_mask; /**< Major service class mask.
+ This value can be a combination of #bt_major_service_class_e like #BT_MAJOR_SERVICE_CLASS_RENDERING | #BT_MAJOR_SERVICE_CLASS_AUDIO */
+} bt_class_s;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Structure of device discovery information.
+ * @since_tizen 2.3
+ *
+ * @see #bt_class_s
+ * @see bt_adapter_device_discovery_state_changed_cb()
+ */
+typedef struct
+{
+ char *remote_address; /**< The address of remote device */
+ char *remote_name; /**< The name of remote device */
+ bt_class_s bt_class; /**< The Bluetooth classes */
+ int rssi; /**< The strength indicator of received signal */
+ bool is_bonded; /**< The bonding state */
+ char **service_uuid; /**< The UUID list of service */
+ int service_count; /**< The number of services */
+ bt_appearance_type_e appearance; /**< The Bluetooth appearance */
+ int manufacturer_data_len; /**< manufacturer specific data length */
+ char *manufacturer_data; /**< manufacturer specific data */
+} bt_adapter_device_discovery_info_s;
+
+/**
+ * @deprecated Deprecated since 2.3.1
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Structure of le device discovery information.
+ * @since_tizen 2.3
+ *
+ * @see #bt_class_s
+ * @see bt_adapter_le_device_discovery_state_changed_cb()
+ */
+typedef struct
+{
+ char *remote_address; /**< The address of remote device */
+ int address_type; /**< The address type of remote device */
+ int rssi; /**< The strength indicator of received signal */
+ int adv_data_len; /**< advertising indication data length */
+ char *adv_data; /**< advertising indication data */
+ int scan_data_len; /**< scan response data length */
+ char *scan_data; /**< scan response data */
+} bt_adapter_le_device_discovery_info_s;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Structure of le scan result information.
+ * @since_tizen 2.3.1
+ *
+ * @see bt_adapter_le_start_scan()
+ */
+typedef struct
+{
+ char *remote_address; /**< The address of remote device */
+ bt_device_address_type_e address_type; /**< The address type of remote device */
+ int rssi; /**< The strength indicator of received signal */
+ int adv_data_len; /**< advertising indication data length */
+ char *adv_data; /**< advertising indication data */
+ int scan_data_len; /**< scan response data length */
+ char *scan_data; /**< scan response data */
+} bt_adapter_le_device_scan_result_info_s;
+
+/**
+ * @deprecated Deprecated since 2.3.1
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Structure of advertising parameters
+ * @since_tizen 2.3
+ *
+ * @see bt_adapter_le_advertising_state_changed_cb()
+ * @see bt_adapter_le_start_advertising()
+ */
+typedef struct {
+ float interval_min; /**< Minimum advertising interval for non-directed advertising.
+ A multiple of 0.625ms is only allowed (Time range : 20ms to 10.24sec). */
+ float interval_max; /**< Maximum advertising interval for non-directed advertising.
+ A multiple of 0.625ms is only allowed (Time range : 20ms to 10.24sec). */
+ char filter_policy; /* Advertising filter policy */
+ char type; /* Advertising type */
+} bt_adapter_le_advertising_params_s;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief LE service data structure
+ * @since_tizen 2.3.1
+ *
+ * @see bt_adapter_le_get_scan_result_service_data()
+ */
+typedef struct
+{
+ char *service_uuid; /**< 16 bit UUID of the service data */
+ char *service_data; /**< Service data */
+ int service_data_len; /**< Service data length */
+} bt_adapter_le_service_data_s;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Device information structure used for identifying pear device.
+ * @since_tizen 2.3
+ *
+ * @see #bt_class_s
+ * @see bt_device_bond_created_cb()
+ */
+typedef struct
+{
+ char *remote_address; /**< The address of remote device */
+ char *remote_name; /**< The name of remote device */
+ bt_class_s bt_class; /**< The Bluetooth classes */
+ char **service_uuid; /**< The UUID list of service */
+ int service_count; /**< The number of services */
+ bool is_bonded; /**< The bonding state */
+ bool is_connected; /**< The connection state */
+ bool is_authorized; /**< The authorization state */
+ int manufacturer_data_len; /**< manufacturer specific data length */
+ char *manufacturer_data; /**< manufacturer specific data */
+} bt_device_info_s;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Service Discovery Protocol (SDP) data structure.
+ * @since_tizen 2.3
+ *
+ * @details This protocol is used for discovering available services or pear device,
+ * and finding one to connect with.
+ *
+ * @see bt_device_service_searched_cb()
+ */
+typedef struct
+{
+ char *remote_address; /**< The address of remote device */
+ char **service_uuid; /**< The UUID list of service */
+ int service_count; /**< The number of services. */
+} bt_device_sdp_info_s;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Device connection information structure.
+ * @since_tizen 2.3
+ *
+ * @see bt_device_connection_state_changed_cb()
+ */
+typedef struct
+{
+ char *remote_address; /**< The address of remote device */
+ bt_device_connection_link_type_e link; /**< Link type */
+ bt_device_disconnect_reason_e disconn_reason; /**< Disconnection reason */
+} bt_device_connection_info_s;
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Device LE connection update structure.
+ * @since_tizen 2.3
+ *
+ * @see bt_device_le_conn_update()
+ */
+typedef struct
+{
+ unsigned int interval_min; /**< Minimum value for the connection event interval (msec) */
+ unsigned int interval_max; /**< Maximum value for the connection event interval (msec) */
+ unsigned int latency; /**< Slave latency (msec) */
+ unsigned int time_out; /**< Supervision timeout (msec) */
+} bt_le_conn_update_s;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Rfcomm connection data used for exchanging data between Bluetooth devices.
+ * @since_tizen 2.3
+ *
+ * @see bt_socket_connection_state_changed_cb()
+ */
+typedef struct
+{
+ int socket_fd; /**< The file descriptor of connected socket */
+ int server_fd; /**< The file descriptor of the server socket or -1 for client connection */
+ bt_socket_role_e local_role; /**< The local device role in this connection */
+ char *remote_address; /**< The remote device address */
+ char *service_uuid; /**< The service UUId */
+} bt_socket_connection_s;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Structure of RFCOMM received data.
+ * @since_tizen 2.3
+ *
+ * @remarks User can use standard linux functions for reading/writing
+ * data from/to sockets.
+ *
+ * @see bt_socket_data_received_cb()
+ */
+typedef struct
+{
+ int socket_fd; /**< The socket fd */
+ int data_size; /**< The length of the received data */
+ char *data; /**< The received data */
+} bt_socket_received_data_s;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Called when the Bluetooth adapter state changes.
+ * @since_tizen 2.3
+ *
+ * @param[in] result The result of the adapter state changing
+ * @param[in] adapter_state The adapter state to be changed
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_adapter_set_state_changed_cb()
+ * @see bt_adapter_unset_state_changed_cb()
+ */
+typedef void (*bt_adapter_state_changed_cb)(int result, bt_adapter_state_e adapter_state, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Called when adapter name changes.
+ * @since_tizen 2.3
+ *
+ * @param[in] device_name The name of the Bluetooth device to be changed
+ * @param[in] user_data The user data passed from the callback registration function
+ * @pre This function will be invoked when the name of Bluetooth adapter changes
+ * if you register this callback using bt_adapter_set_name_changed_cb().
+ * @see bt_adapter_set_name()
+ * @see bt_adapter_set_name_changed_cb()
+ * @see bt_adapter_unset_name_changed_cb()
+ */
+typedef void (*bt_adapter_name_changed_cb)(char *device_name, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Called when the visibility mode changes.
+ * @since_tizen 2.3
+ *
+ * @param[in] result The result of the visibility mode changing
+ * @param[in] visibility_mode The visibility mode to be changed
+ * @param[in] user_data The user data passed from the callback registration function
+ *
+ * @pre This function will be invoked when the visibility of Bluetooth adapter changes
+ * if you register this callback using bt_adapter_set_visibility_mode_changed_cb().
+ *
+ * @see bt_adapter_set_visibility_mode_changed_cb()
+ * @see bt_adapter_unset_visibility_mode_changed_cb()
+ */
+typedef void (*bt_adapter_visibility_mode_changed_cb)
+ (int result, bt_adapter_visibility_mode_e visibility_mode, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Called every second until the visibility mode is changed to #BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE.
+ * @since_tizen 2.3
+ *
+ * @remarks This callback function is called only if visibility mode is #BT_ADAPTER_VISIBILITY_MODE_LIMITED_DISCOVERABLE.
+ * @param[in] duration The duration until the visibility mode is changed to #BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE (in seconds)
+ * @param[in] user_data The user data passed from the callback registration function
+ * @pre This function will be invoked if you register this callback using bt_adapter_set_visibility_duration_changed_cb().
+ * @see bt_adapter_set_visibility_duration_changed_cb()
+ * @see bt_adapter_unset_visibility_duration_changed_cb()
+ */
+typedef void (*bt_adapter_visibility_duration_changed_cb)(int duration, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Called when the state of device discovery changes.
+ * @since_tizen 2.3
+ *
+ * @remarks If \a discovery_state is #BT_ADAPTER_DEVICE_DISCOVERY_FOUND,
+ * then you can get some information, such as remote device address, remote device name, rssi, and bonding state.
+ *
+ * @param[in] result The result of the device discovery
+ * @param[in] discovery_state The discovery state to be changed
+ * @param[in] discovery_info The information of the discovered device \n
+ * If \a discovery_state is #BT_ADAPTER_DEVICE_DISCOVERY_STARTED or
+ * #BT_ADAPTER_DEVICE_DISCOVERY_FINISHED, then \a discovery_info is NULL.
+ * @param[in] user_data The user data passed from the callback registration function
+ *
+ * @pre Either bt_adapter_start_device_discovery() or bt_adapter_stop_device_discovery() will invoke this function
+ * if you register this callback using bt_adapter_set_device_discovery_state_changed_cb().
+ *
+ * @see bt_adapter_start_device_discovery()
+ * @see bt_adapter_stop_device_discovery()
+ * @see bt_adapter_set_device_discovery_state_changed_cb()
+ * @see bt_adapter_unset_device_discovery_state_changed_cb()
+ *
+ */
+typedef void (*bt_adapter_device_discovery_state_changed_cb)
+ (int result, bt_adapter_device_discovery_state_e discovery_state, bt_adapter_device_discovery_info_s *discovery_info, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Called when you get bonded devices repeatedly.
+ * @since_tizen 2.3
+ *
+ * @param[in] device_info The bonded device information
+ * @param[in] user_data The user data passed from the foreach function
+ * @return @c true to continue with the next iteration of the loop,
+ * \n @c false to break out of the loop.
+ * @pre bt_adapter_foreach_bonded_device() will invoke this function.
+ *
+ * @see bt_adapter_foreach_bonded_device()
+ *
+ */
+typedef bool (*bt_adapter_bonded_device_cb)(bt_device_info_s *device_info, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Called when the connectable state changes.
+ * @since_tizen 2.3
+ *
+ * @param[in] result The result of the connectable state changing
+ * @param[in] connectable The connectable to be changed
+ * @param[in] user_data The user data passed from the callback registration function
+ *
+ * @pre This function will be invoked when the connectable state of local Bluetooth adapter changes
+ * if you register this callback using bt_adapter_set_connectable_changed_cb().
+ *
+ * @see bt_adapter_set_connectable()
+ * @see bt_adapter_set_connectable_changed_cb()
+ * @see bt_adapter_unset_connectable_changed_cb()
+ */
+typedef void (*bt_adapter_connectable_changed_cb)
+ (int result, bool connectable, void *user_data);
+
+/**
+ * @deprecated Deprecated since 2.3.1
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Called when the state of LE device discovery changes.
+ * @since_tizen 2.3
+ *
+ * @remarks If \a discovery_state is #BT_ADAPTER_LE_DEVICE_DISCOVERY_FOUND,
+ * then you can get some information, such as remote LE device address, remote device name, rssi, and bonding state.
+ *
+ * @param[in] result The result of the LE device discovery
+ * @param[in] discovery_state The discovery state to be changed
+ * @param[in] discovery_info The information of the discovered LE device \n
+ * If \a discovery_state is #BT_ADAPTER_LE_DEVICE_DISCOVERY_STARTED or
+ * #BT_ADAPTER_LE_DEVICE_DISCOVERY_FINISHED, then \a discovery_info is NULL.
+ * @param[in] user_data The user data passed from the callback registration function
+ *
+ * @pre Either bt_adapter_start_device_discovery() or bt_adapter_stop_device_discovery() will invoke this function
+ * if you register this callback using bt_adapter_set_device_discovery_state_changed_cb().
+ *
+ * @see bt_adapter_le_start_device_discovery()
+ * @see bt_adapter_le_stop_device_discovery()
+ * @see bt_adapter_le_set_device_discovery_state_changed_cb()
+ * @see bt_adapter_le_unset_device_discovery_state_changed_cb()
+ *
+ */
+typedef void (*bt_adapter_le_device_discovery_state_changed_cb)
+ (int result, bt_adapter_le_device_discovery_state_e discovery_state, bt_adapter_le_device_discovery_info_s *discovery_info, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Called when the LE advertisement has been found.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] result The result of the LE scan
+ * @param[in] info The information of the found LE advertisement.
+ * @param[in] user_data The user data passed from the start function
+ *
+ * @see bt_adapter_le_start_scan()
+ *
+ */
+typedef void (*bt_adapter_le_scan_result_cb)(int result,
+ bt_adapter_le_device_scan_result_info_s *info, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Called when the state of advertiser changes.
+ * @since_tizen 2.3
+ *
+ * @param[out] result The result of the requested state change of advertiser
+ * @param[out] advertiser The handle of the state changed advertiser
+ * @param[out] adv_state The advertiser state to be changed
+ * @param[out] user_data The user data passed from the start function
+ *
+ * @see bt_adapter_le_start_advertising_new()
+ * @see bt_adapter_le_stop_advertising()
+ */
+typedef void (*bt_adapter_le_advertising_state_changed_cb)(int result,
+ bt_advertiser_h advertiser, bt_adapter_le_advertising_state_e adv_state, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Called when the Bluetooth adapter le state changes.
+ * @since_tizen 2.3
+ *
+ * @param[in] result The result of the adapter state changing
+ * @param[in] adapter_le_state The adapter le state to be changed
+ * @param[in] user_data The user data passed from the callback registration function
+ * @pre Either bt_adapter_le_enable() or bt_adapter_le_disable() will invoke this callback if you register this callback using bt_adapter_le_set_state_changed_cb().
+ * @see bt_adapter_le_enable()
+ * @see bt_adapter_le_disable()
+ * @see bt_adapter_le_set_state_changed_cb()
+ * @see bt_adapter_le_unset_state_changed_cb()
+ */
+typedef void (*bt_adapter_le_state_changed_cb)(int result, bt_adapter_le_state_e adapter_le_state, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Called when the process of creating bond finishes.
+ * @since_tizen 2.3
+ *
+ * @remarks If the remote user does not respond within 60 seconds, a time out will happen with #BT_ERROR_TIMED_OUT result code.\n
+ * If bt_device_cancel_bonding() is called and it returns #BT_ERROR_NONE, then this callback function will be called
+ * with #BT_ERROR_CANCELLED result. \n
+ * If creating a bond succeeds but service search fails, then this callback will be called with #BT_ERROR_SERVICE_SEARCH_FAILED.
+ * In this case, you should try service search again by bt_device_start_service_search() to get the supported service list.
+ *
+ * @param[in] result The result of the bonding device
+ * @param[in] device_info The device information which you creates bond with
+ * @param[in] user_data The user data passed from the callback registration function
+ *
+ * @pre Either bt_device_create_bond() will invoke this function
+ * if you register this callback using bt_device_set_bond_created_cb().
+ *
+ * @see bt_device_create_bond()
+ * @see bt_device_cancel_bonding()
+ * @see bt_device_set_bond_created_cb()
+ * @see bt_device_unset_bond_created_cb()
+ */
+typedef void (*bt_device_bond_created_cb)(int result, bt_device_info_s *device_info, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Called when you get connected profiles repeatedly.
+ * @since_tizen 2.3
+ *
+ * @param[in] profile The connected Bluetooth profile
+ * @param[in] user_data The user data passed from the foreach function
+ * @return @c true to continue with the next iteration of the loop,
+ * \n @c false to break out of the loop.
+ * @pre bt_device_foreach_connected_profiles() will invoke this function.
+ * @see bt_device_foreach_connected_profiles()
+ */
+typedef bool (*bt_device_connected_profile)(bt_profile_e profile, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Called when the bond destroys.
+ * @since_tizen 2.3
+ *
+ * @param[in] result The result that a bond is destroyed
+ * @param[in] remote_address The address of the remote Bluetooth device to destroy bond with
+ * @param[in] user_data The user data passed from the callback registration function
+ * @pre bt_device_destroy_bond() will invoke this function
+ * if you register this callback using bt_device_set_bond_destroyed_cb().
+ *
+ * @see bt_device_destroy_bond()
+ * @see bt_device_set_bond_destroyed_cb()
+ * @see bt_device_unset_bond_destroyed_cb()
+ */
+typedef void (*bt_device_bond_destroyed_cb)(int result, char *remote_address, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Called when the authorization of device changes.
+ * @since_tizen 2.3
+ *
+ * @param[in] authorization The authorization of device
+ * @param[in] remote_address The address of the remote Bluetooth device which is (un)authorized
+ * @param[in] user_data The user data passed from the callback registration function
+ * @pre bt_device_set_authorization() will invoke this function if you register this callback using bt_device_set_authorization_changed_cb().
+ *
+ * @see bt_device_set_authorization()
+ * @see #bt_device_set_authorization_changed_cb()
+ * @see #bt_device_unset_authorization_changed_cb()
+ */
+typedef void (*bt_device_authorization_changed_cb)
+ (bt_device_authorization_e authorization, char *remote_address, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Called when the process of service search finishes.
+ * @since_tizen 2.3
+ *
+ * @remark
+ *
+ * @param[in] result The result of the service searching
+ * @param[in] sdp_info The structure of service lists found on a device
+ * @param[in] user_data The user data passed from the callback registration function
+ * @pre Either bt_device_start_service_search() will invoke this function
+ * if you register this callback using bt_device_set_service_searched_cb().
+ *
+ * @see bt_device_start_service_search()
+ * @see bt_device_set_service_searched_cb()
+ * @see bt_device_unset_service_searched_cb()
+ *
+ */
+typedef void (*bt_device_service_searched_cb)(int result, bt_device_sdp_info_s *sdp_info, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Called when the connection state is changed.
+ * @since_tizen 2.3
+ *
+ * @param[in] connected The connection status: (@c true = connected, @c false = disconnected)
+ * @param[in] conn_info The connection information
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_device_set_connection_state_changed_cb()
+ * @see bt_device_unset_connection_state_changed_cb()
+ */
+typedef void (*bt_device_connection_state_changed_cb)(bool connected, bt_device_connection_info_s *conn_info, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Called when you receive data.
+ * @since_tizen 2.3
+ *
+ * @param[in] data The received data from the remote device
+ * @param[in] user_data The user data passed from the callback registration function
+ *
+ * @pre When the connected remote Bluetooth device invokes bt_socket_send_data(),
+ * this function will be invoked if you register this function using bt_socket_set_data_received_cb().
+ *
+ * @see bt_socket_set_data_received_cb()
+ * @see bt_socket_unset_data_received_cb()
+ * @see bt_socket_send_data()
+ */
+typedef void (*bt_socket_data_received_cb)(bt_socket_received_data_s *data, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Called when the socket connection state changes.
+ * @since_tizen 2.3
+ *
+ * @param[in] result The result of connection state changing
+ * @param[in] connection_state The connection state
+ * @param[in] connection The connection information which is established or disconnected
+ * @param[in] user_data The user data passed from the callback registration function
+ * @pre Either bt_socket_connect_rfcomm() will invoke this function.
+ * In addtion, bt_socket_connection_state_changed_cb() will be invoked when the socket connection state is changed.
+ * @see bt_socket_listen_and_accept_rfcomm()
+ * @see bt_socket_connect_rfcomm()
+ * @see bt_socket_set_connection_state_changed_cb()
+ * @see bt_socket_unset_connection_state_changed_cb()
+ */
+typedef void (*bt_socket_connection_state_changed_cb)
+ (int result, bt_socket_connection_state_e connection_state, bt_socket_connection_s *connection, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Called when a RFCOMM connection is requested.
+ * @since_tizen 2.3
+ *
+ * @details You must call bt_socket_accept() if you want to accept. Otherwise, you must call bt_socket_reject().
+ * @param[in] socket_fd The file descriptor of socket on which a connection is requested
+ * @param[in] remote_address The address of remote device
+ * @param[in] user_data The user data passed from the callback registration function
+ * @pre If you register this callback function by bt_socket_set_connection_requested_cb() and listen a socket by bt_socket_listen(),
+ * bt_socket_connection_requested_cb() will be invoked.
+ * @see bt_socket_listen()
+ * @see bt_socket_accept()
+ * @see bt_socket_reject()
+ */
+typedef void (*bt_socket_connection_requested_cb) (int socket_fd, const char *remote_address, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_SERVER_MODULE
+ * @brief Called when the push is requested.
+ * @since_tizen 2.3
+ *
+ * @details You must call bt_opp_server_accept() if you want to accept.
+ * Otherwise, you must call bt_opp_server_reject().
+ * @param[in] file The path of file to be pushed
+ * @param[in] size The file size (bytes)
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_opp_server_initialize()
+ */
+typedef void (*bt_opp_server_push_requested_cb)(const char *file, int size, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_SERVER_MODULE
+ * @brief Called when an OPP connection is requested.
+ * @since_tizen 2.3
+ *
+ * @details You must call bt_opp_server_accept_connection() if you want to accept.
+ * Otherwise, you must call bt_opp_server_reject_connection().
+ * @param[in] remote_address The address of remote device
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_opp_server_accept()
+ * @see bt_opp_server_reject()
+ */
+typedef void (*bt_opp_server_connection_requested_cb)(const char *remote_address, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_SERVER_MODULE
+ * @brief Called when a file is being transfered.
+ * @since_tizen 2.3
+ *
+ * @param[in] file The path of file to be pushed
+ * @param[in] size The file size (bytes)
+ * @param[in] percent The progress in percentage (1 ~ 100)
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_opp_server_accept()
+ * @see bt_opp_server_accept_connection()
+ */
+typedef void (*bt_opp_server_transfer_progress_cb) (const char *file, long long size, int percent, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_SERVER_MODULE
+ * @brief Called when a transfer is finished.
+ * @since_tizen 2.3
+ *
+ * @param[in] error_code The result of push
+ * @param[in] file The path of file to be pushed
+ * @param[in] size The file size (bytes)
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_opp_server_accept()
+ * @see bt_opp_server_accept_connection()
+ */
+typedef void (*bt_opp_server_transfer_finished_cb) (int result, const char *file, long long size, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_CLIENT_MODULE
+ * @brief Called when OPP server responds to the push request.
+ * @since_tizen 2.3
+ *
+ * @param[in] result The result of OPP server response
+ * @param[in] remote_address The remote address
+ * @param[in] user_data The user data passed from the callback registration function
+ * @pre bt_opp_client_push_files() will invoke this function.
+ * @see bt_opp_client_push_files()
+ */
+typedef void (*bt_opp_client_push_responded_cb)(int result, const char *remote_address, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_CLIENT_MODULE
+ * @brief Called when each file is being transfered.
+ * @since_tizen 2.3
+ *
+ * @param[in] file The path of file to be pushed
+ * @param[in] size The file size (bytes)
+ * @param[in] percent The progress in percentage (1 ~ 100). 100 means that a file is transfered completely.
+ * @param[in] user_data The user data passed from the callback registration function
+ * @pre bt_opp_client_push_files() will invoke this function.
+ * @see bt_opp_client_push_files()
+ */
+typedef void (*bt_opp_client_push_progress_cb)(const char *file, long long size, int percent, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_CLIENT_MODULE
+ * @brief Called when the push request is finished.
+ * @since_tizen 2.3
+ *
+ * @param[in] result The result of the push request
+ * @param[in] remote_address The remote address
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_opp_client_push_files()
+ */
+typedef void (*bt_opp_client_push_finished_cb)(int result, const char *remote_address, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_MODULE
+ * @brief Called when the connection state is changed.
+ * @since_tizen 2.3
+ *
+ * @details This callback is called when the connection state is changed.
+ * When you call bt_audio_connect() or bt_audio_disconnect(), this callback is also called with error result even though these functions fail.
+ * @param[in] result The result of changing the connection state
+ * @param[in] connected The state to be changed. @a true means connected state, Otherwise, @a false.
+ * @param[in] remote_address The remote address
+ * @param[in] type The type of audio profile except #BT_AUDIO_PROFILE_TYPE_ALL
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_audio_set_connection_state_changed_cb()
+ * @see bt_audio_unset_connection_state_changed_cb()
+ */
+typedef void (*bt_audio_connection_state_changed_cb) (int result, bool connected, const char *remote_address, bt_audio_profile_type_e type, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Called when the SCO(Synchronous Connection Oriented link) state is changed.
+ * @since_tizen 2.3
+ *
+ * @details This callback is called when the SCO state is changed.
+ * When you call bt_ag_open_sco() or bt_ag_close_sco(), this callback is also called with error result even though these functions failed.
+ * @param[in] result The result of changing the connection state
+ * @param[in] opened The state to be changed: (@c true = opened, @c false = not opened)
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_ag_set_sco_state_changed_cb()
+ * @see bt_ag_unset_sco_state_changed_cb()
+ * @see bt_ag_open_sco()
+ * @see bt_ag_close_sco()
+ */
+typedef void (*bt_ag_sco_state_changed_cb) (int result, bool opened, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Called when a call handling event happened from Hands-Free.
+ * @since_tizen 2.3
+ *
+ * @param[in] event The call handling event happened from Hands-Free
+ * @param[in] call_id The call ID
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_ag_set_call_handling_event_cb()
+ * @see bt_ag_unset_call_handling_event_cb()
+ */
+typedef void (*bt_ag_call_handling_event_cb) (bt_ag_call_handling_event_e event, unsigned int call_id, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Called when a multi call handling event happened from Hands-Free.
+ * @since_tizen 2.3
+ *
+ * @param[in] event The call handling event happened from Hands-Free
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_ag_set_multi_call_handling_event_cb()
+ * @see bt_ag_unset_multi_call_handling_event_cb()
+ */
+typedef void (*bt_ag_multi_call_handling_event_cb) (bt_ag_multi_call_handling_event_e event, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Called when a DTMF(Dual Tone Multi Frequency) is transmitted from Hands-Free.
+ * @since_tizen 2.3
+ *
+ * @param[in] dtmf The DTMF transmitted from Hands-Free
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_ag_set_dtmf_transmitted_cb()
+ * @see bt_ag_unset_dtmf_transmitted_cb()
+ */
+typedef void (*bt_ag_dtmf_transmitted_cb) (const char *dtmf, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Called when the speaker gain of the remote device is changed.
+ * @since_tizen 2.3
+ *
+ * @param[in] gain The gain of speaker (0 ~ 15)
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_ag_set_speaker_gain_changed_cb()
+ * @see bt_ag_unset_speaker_gain_changed_cb()
+ */
+typedef void (*bt_ag_speaker_gain_changed_cb) (int gain, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Called when the microphone gain of the remote device is changed.
+ * @since_tizen 2.3
+ *
+ * @param[in] gain The gain of microphone (0 ~ 15)
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_ag_set_microphone_gain_changed_cb()
+ * @see bt_ag_unset_microphone_gain_changed_cb()
+ */
+typedef void (*bt_ag_microphone_gain_changed_cb) (int gain, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Called when the connection state is changed.
+ * @since_tizen 2.3
+ *
+ * @param[in] connected The state to be changed. @a true means connected state, Otherwise, @a false.
+ * @param[in] remote_address The remote address
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_avrcp_target_initialize()
+ * @see bt_avrcp_target_deinitialize()
+ */
+typedef void (*bt_avrcp_target_connection_state_changed_cb) (bool connected, const char *remote_address, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Called when the equalizer state is changed by the remote control device.
+ * @since_tizen 2.3
+ *
+ * @param[in] equalizer The equalizer state
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_avrcp_set_equalizer_state_changed_cb()
+ * @see bt_avrcp_unset_equalizer_state_changed_cb()
+ */
+typedef void (*bt_avrcp_equalizer_state_changed_cb) (bt_avrcp_equalizer_state_e equalizer, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Called when the repeat mode is changed by the remote control device.
+ * @since_tizen 2.3
+ *
+ * @param[in] repeat The repeat mode
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_avrcp_set_repeat_mode_changed_cb()
+ * @see bt_avrcp_unset_repeat_mode_changed_cb()
+ */
+typedef void (*bt_avrcp_repeat_mode_changed_cb) (bt_avrcp_repeat_mode_e repeat, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Called when the shuffle mode is changed by the remote control device.
+ * @since_tizen 2.3
+ *
+ * @param[in] shuffle The shuffle mode
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_avrcp_set_shuffle_mode_changed_cb()
+ * @see bt_avrcp_unset_shuffle_mode_changed_cb()
+ */
+typedef void (*bt_avrcp_shuffle_mode_changed_cb) (bt_avrcp_shuffle_mode_e shuffle, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Called when the scan mode is changed by the remote control device.
+ * @since_tizen 2.3
+ *
+ * @param[in] shuffle The shuffle mode
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_avrcp_set_scan_mode_changed_cb()
+ * @see bt_avrcp_unset_scan_mode_changed_cb()
+ */
+typedef void (*bt_avrcp_scan_mode_changed_cb) (bt_avrcp_scan_mode_e scan, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_HID_MODULE
+ * @brief Called when the connection state is changed.
+ * @since_tizen 2.3
+ *
+ * @details This callback is called when the connection state is changed.
+ * When you call bt_hid_host_connect() or bt_hid_host_disconnect(), this callback is also called with error result even though these functions fail.
+ * @param[in] result The result of changing the connection state
+ * @param[in] connected The state to be changed. @a true means connected state, Otherwise, @a false.
+ * @param[in] remote_address The remote address
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_hid_host_connect()
+ * @see bt_hid_host_disconnect()
+ */
+typedef void (*bt_hid_host_connection_state_changed_cb) (int result, bool connected, const char *remote_address, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_HDP_MODULE
+ * @brief Called when the connection is established.
+ * @since_tizen 2.3
+ *
+ * @param[in] result The result of connecting to the remote device
+ * @param[in] remote_address The address of connected remote device
+ * @param[in] app_id The ID of application
+ * @param[in] type The type of HDP(Health Device Profile) channel
+ * @param[in] channel The connected data channel
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_hdp_disconnected_cb
+ * @see bt_hdp_set_connection_state_changed_cb()
+ * @see bt_hdp_unset_connection_state_changed_cb()
+ */
+typedef void (*bt_hdp_connected_cb) (int result, const char *remote_address, const char *app_id,
+ bt_hdp_channel_type_e type, unsigned int channel, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_HDP_MODULE
+ * @brief Called when the connection is disconnected.
+ * @since_tizen 2.3
+ *
+ * @param[in] result The result of disconnecting from the remote device
+ * @param[in] remote_address The address of disconnected remote device
+ * @param[in] channel The connected data channel
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_hdp_connected_cb
+ * @see bt_hdp_set_connection_state_changed_cb()
+ * @see bt_hdp_unset_connection_state_changed_cb()
+ */
+typedef void (*bt_hdp_disconnected_cb) (int result, const char *remote_address, unsigned int channel, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_HDP_MODULE
+ * @brief Called when the you receive the data.
+ * @since_tizen 2.3
+ *
+ * @param[in] channel The connected data channel
+ * @param[in] data The received data
+ * @param[in] size The size of received data (byte)
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_hdp_set_data_received_cb()
+ * @see bt_hdp_unset_data_received_cb()
+ */
+typedef void (*bt_hdp_data_received_cb) (unsigned int channel, const char *data, unsigned int size, void *user_data);
+
+/**
+ * @deprecated Deprecated since 2.3.1. Use bt_gatt_foreach_cb instead.
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Called when you get the primary services repeatedly.
+ * @since_tizen 2.3
+ *
+ * @param[in] service The attribute handle of service
+ * @param[in] user_data The user data passed from the foreach function
+ * @return @c true to continue with the next iteration of the loop,
+ * \n @c false to break out of the loop.
+ * @pre bt_gatt_foreach_primary_services() will invoke this function.
+ * @see bt_gatt_foreach_primary_services()
+ */
+typedef bool (*bt_gatt_primary_service_cb) (bt_gatt_attribute_h service, void *user_data);
+
+/**
+ * @deprecated Deprecated since 2.3.1. This is not required because characteristic discovery is happened automatically.
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Called after the characteristics are discovered by bt_gatt_discover_characteristics().
+ * @since_tizen 2.3
+ *
+ * @remarks If bt_gatt_discover_characteristics() failed, then this callback function is called only once with 0 totla and NULL characteristic_handle.
+ * @param[in] result The result of discovering
+ * @param[in] index The index of characteristics in a service, starts from 0
+ * @param[in] total The total number of characteristics in a service
+ * @param[in] characteristic The attribute handle of characteristic
+ * @param[in] user_data The user data passed from the request function
+ * @return @c true to continue with the next iteration of the loop,
+ * \n @c false to break out of the loop.
+ * @pre bt_gatt_discover_characteristics() will invoke this callback.
+ * @see bt_gatt_discover_characteristics()
+ */
+typedef bool (*bt_gatt_characteristics_discovered_cb) (int result, int index, int total, bt_gatt_attribute_h characteristic, void *user_data);
+
+/**
+ * @deprecated Deprecated since 2.3.1. Use bt_gatt_foreach_cb instead.
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Called when you get the included services repeatedly.
+ * @since_tizen 2.3
+ *
+ * @param[in] service The attribute handle of service
+ * @param[in] user_data The user data passed from the foreach function
+ * @return @c true to continue with the next iteration of the loop,
+ * \n @c false to break out of the loop.
+ * @pre bt_gatt_foreach_included_services() will invoke this function.
+ * @see bt_gatt_foreach_included_services()
+ */
+typedef bool (*bt_gatt_included_service_cb) (bt_gatt_attribute_h service, void *user_data);
+
+/**
+ * @deprecated Deprecated since 2.3.1. Use bt_gatt_client_characteristic_value_changed_cb instead.
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Called when a characteristic in service is changed.
+ * @since_tizen 2.3
+ *
+ * @param[in] characteristic The attribute handle of characteristic
+ * @param[in] value The value of characteristic (byte array)
+ * @param[in] value_length The length of value
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_gatt_set_characteristic_changed_cb()
+ * @see bt_gatt_unset_characteristic_changed_cb()
+ */
+typedef void (*bt_gatt_characteristic_changed_cb) (bt_gatt_attribute_h characteristic, unsigned char *value, int value_length, void *user_data);
+
+/**
+ * @deprecated Deprecated since 2.3.1. Use bt_gatt_client_request_completed_cb instead.
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Called when a characteristic value is written.
+ * @since_tizen 2.3
+ *
+ * @see bt_gatt_set_characteristic_value()
+ */
+typedef void (*bt_gatt_characteristic_write_cb) (void *user_data);
+
+/**
+ * @deprecated Deprecated since 2.3.1. Use bt_gatt_client_request_completed_cb instead.
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Called when a characteristic value is read.
+ * @since_tizen 2.3
+ *
+ * @param[in] value The value of characteristic (byte array)
+ * @param[in] value_length The length of value
+ * @param[in] user_data The user data passed from the foreach function
+ * @see bt_gatt_read_characteristic_value()
+ */
+typedef void (*bt_gatt_characteristic_read_cb) (unsigned char *value,
+ int value_length, void *user_data);
+
+/**
+ * @deprecated Deprecated since 2.3.1. This is not required because descriptor discovery is happened automatically.
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Called after the characteristics descriptors are discovered by bt_gatt_discover_characteristic_descriptor().
+ * @since_tizen 2.3
+ *
+ * @param[in] result The result of discovering
+ * @param[in] characteristic_format The format of the information data.
+ * characteristic_format = 0x01 indicates UUIDs are 16-bits
+ * characteristic_format = 0x02 indicates UUIDs are 128-bits
+ * @param[in] total The total number of elements in characteristic_descriptor
+ * @param[in] characteristic descriptor The attribute handle and the UUID of characteristic descriptor
+ * @param[in] user_data The user data passed from the request function
+ * @see bt_gatt_discover_characteristic_descriptor()
+ */
+typedef void (*bt_gatt_characteristic_descriptor_discovered_cb) (int result,
+ unsigned char characteristic_format, int total,
+ bt_gatt_attribute_h characteristic_descriptor, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Called when you get GATT handles repeatedly
+ * @since_tizen 2.3.1
+ *
+ * @param[in] total The total number of GATT handles to be called
+ * @param[in] index The index of current GATT handle. It starts from 0.
+ * @param[in] gatt_handle The GATT handle
+ * @param[in] user_data The user data passed from the foreach function
+ *
+ * @see bt_gatt_service_foreach_characteristics()
+ * @see bt_gatt_service_foreach_included_services()
+ * @see bt_gatt_characteristic_foreach_descriptors()
+ * @see bt_gatt_client_foreach_services()
+ */
+typedef bool (*bt_gatt_foreach_cb) (int total, int index, bt_gatt_h gatt_handle,
+ void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Called when the client request(e.g. read / write) has been completed
+ * @since_tizen 2.3.1
+ *
+ * @param[in] result The result of a request
+ * @param[in] request_handle The requesting GATT handle
+ * @param[in] user_data The user data passed from the requesting function
+ *
+ * @see bt_gatt_client_read_value()
+ * @see bt_gatt_client_write_value()
+ */
+typedef void (*bt_gatt_client_request_completed_cb) (int result,
+ bt_gatt_h request_handle, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Called when a value of a watched characteristic's GATT handle has been changed
+ * @since_tizen 2.3.1
+ *
+ * @remarks After this function is returned, a changed vlaue is automatically
+ * applied to @a characteristic. Before that, @a characteristic has an old value.
+ *
+ * @param[in] characteristic The characteristic's GATT handle of which value change is informed. It has an old value.
+ * @param[in] value The new value
+ * @param[in] len The length of @a value
+ * @param[in] user_data The user data passed from the registering function
+ *
+ * @see bt_gatt_client_set_characteristic_value_changed_cb()
+ */
+typedef void (*bt_gatt_client_characteristic_value_changed_cb) (bt_gatt_h characteristic,
+ char *value, int len, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Called when the connection state is changed.
+ * @since_tizen 2.3
+ *
+ * @details This callback is called when the connection state is changed.
+ * When you called bt_gatt_connect() or bt_gatt_disconnect(), this callback is also called with error result even though these functions fail.
+ *
+ * @param[in] result The result of changing the connection state.
+ * @param[in] connected The state to be changed, @a true means connected state, Otherwise, @a false.
+ * @param[in] remote_address The remote_address
+ * @param[in] user_data The user data passed from the callback registration function.
+ *
+ * @see bt_gatt_connect()
+ * @see bt_gatt_disconnect()
+ * @see bt_gatt_set_connection_state_changed_cb()
+ * @see bt_gatt_unset_connection_state_changed_cb()
+ */
+typedef void (*bt_gatt_connection_state_changed_cb)(int result, bool connected, const char *remote_address, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PAN_NAP_MODULE
+ * @brief Called when the connection state is changed.
+ * @since_tizen 2.3
+ *
+ * @param[in] connected Indicates whether a client is connected or disconnected
+ * @param[in] remote_address The remote address
+ * @param[in] interface_name The interface name. For example, bnep0, bnep1.
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_nap_set_connection_state_changed_cb()
+ * @see bt_nap_unset_connection_state_changed_cb()
+ */
+typedef void (*bt_nap_connection_state_changed_cb) (bool connected, const char *remote_address, const char *interface_name, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PAN_PANU_MODULE
+ * @brief Called when the connection state is changed.
+ * @since_tizen 2.3
+ *
+ * @details This callback is called when the connection state is changed.
+ * When you call bt_panu_connect() or bt_panu_disconnect(), this callback is also called with error result even though these functions fail.
+ * @param[in] result The result of changing the connection state
+ * @param[in] connected The state to be changed. @a true means connected state, Otherwise, @a false.
+ * @param[in] remote_address The remote address
+ * @param[in] type The type of PAN service
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_nap_set_connection_state_changed_cb()
+ * @see bt_nap_unset_connection_state_changed_cb()
+ */
+typedef void (*bt_panu_connection_state_changed_cb) (int result, bool connected, const char *remote_address, bt_panu_service_type_e type, void *user_data);
+
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif // __TIZEN_NETWORK_BLUETOOTH_TYPE_H__
diff --git a/include/mobile/bluetooth_type_internal.h b/include/mobile/bluetooth_type_internal.h
new file mode 100644
index 0000000..c1be7e8
--- /dev/null
+++ b/include/mobile/bluetooth_type_internal.h
@@ -0,0 +1,254 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef __TIZEN_NETWORK_BLUETOOTH_TYPE_INTERNAL_H__
+#define __TIZEN_NETWORK_BLUETOOTH_TYPE_INTERNAL_H__
+
+ #ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+
+/**
+ * @file bluetooth_type_internal.h
+ */
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Enumerations of the Bluetooth adapter le scan type.
+ * @since_tizen 2.3
+ */
+typedef enum
+{
+ BT_ADAPTER_LE_PASSIVE_SCAN = 0x00,
+ BT_ADAPTER_LE_ACTIVE_SCAN
+} bt_adapter_le_scan_type_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Enumerations of the Bluetooth le scan mode.
+ * @since_tizen 2.3
+ */
+typedef enum
+{
+ BT_ADAPTER_LE_SCAN_MODE_BALANCED,
+ BT_ADAPTER_LE_SCAN_MODE_LOW_LATENCY,
+ BT_ADAPTER_LE_SCAN_MODE_LOW_ENERGY
+} bt_adapter_le_scan_mode_e;
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Called when the manufacturer dat changes.
+ * @since_tizen 2.3
+ *
+ * @param[in] data The manufacurer data of the Bluetooth device to be changed
+ * @param[in] len The length of @a data
+ * @param[in] user_data The user data passed from the callback registration function
+ * @pre This function will be invoked when the manufacturer data of Bluetooth adapter changes
+ * if callback is registered using bt_adapter_set_manufacturer_data_changed_cb().
+ * @see bt_adapter_set_manufacturer_data()
+ * @see bt_adapter_set_manufacturer_data_changed_cb()
+ * @see bt_adapter_unset_manufacturer_data_changed_cb()
+ */
+typedef void (*bt_adapter_manufacturer_data_changed_cb) (char *data,
+ int len, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Enumerations of the attribute's permission
+ * @since_tizen 2.4
+ */
+typedef enum {
+ BT_GATT_PERMISSION_READ = 0x01,
+ BT_GATT_PERMISSION_WRITE = 0x02,
+ BT_GATT_PERMISSION_ENCRYPTION = 0x04,
+ BT_GATT_PERMISSION_AUTHENTICATION = 0x08,
+ BT_GATT_PERMISSION_AUTHORIZATION = 0x10,
+ BT_GATT_PERMISSION_NONE = 0x20,
+} bt_gatt_permission_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief The handle to control Bluetooth LE scan filter
+ * @since_tizen 2.4
+ */
+typedef void* bt_scan_filter_h;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief The handle of a GATT server
+ * @since_tizen 2.4
+ */
+typedef void* bt_gatt_server_h;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Called when a value of a characteristic or descriptor's GATT handle has been changed
+ * @since_tizen 2.4
+ *
+ * @remarks After this function is returned, a changed vlaue is automatically
+ * applied to @a gatt_handle. Before that, @a gatt_handle has an old value.
+ *
+ * @param[in] remote_address The address of the remote device which requests a change
+ * @param[in] server The GATT server handle
+ * @param[in] gatt_handle The characteristic or descriptor's GATT handle which has an old value
+ * @param[in] offset The requested offset from where the @a gatt_handle value will be updated
+ * @param[in] value The new value
+ * @param[in] len The length of @a value
+ * @param[in] user_data The user data passed from the registration function
+ *
+ * @see bt_gatt_server_set_value_changed_cb()
+ */
+typedef void (*bt_gatt_server_value_changed_cb) (char *remote_address,
+ bt_gatt_server_h server, bt_gatt_h gatt_handle,
+ int offset, char *value, int len,
+ void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Called when the remote device requests to read a value on a GATT server
+ * @since_tizen 2.4
+ *
+ * @param[in] remote_address The address of the requesting remote device
+ * @param[in] server The GATT server handle
+ * @param[in] gatt_handle The characteristic or descriptor's GATT handle to be read
+ * @param[in] request_id The identification of this request. It will be used to send a reponse.
+ * @param[in] offset The requested offset from where the GATT handle's value is read
+ * @param[in] user_data The user data passed from the registration function
+ *
+ * @see bt_gatt_server_set_read_value_requested_cb()
+ * @see bt_gatt_server_send_response()
+ */
+typedef void (*bt_gatt_server_read_value_requested_cb) (char *remote_address,
+ int request_id, bt_gatt_server_h server, bt_gatt_h gatt_handle,
+ int offset, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Called when the sending notification / indication is done
+ * @since_tizen 2.4
+ *
+ * @remarks In case of an indication, once a confirmation is received from the remote device this callback will be called. \n
+ * This callback will be called several times if there are two or more remote devices which enable a Client Characteristic Configuration Descriptor(CCCD). \n
+ * For the last remote device, @a completed will be set as true.
+ *
+ * @param[in] result The result of a sending operation
+ * @param[in] remote_address The address of the remote device
+ * @param[in] server The GATT server handle
+ * @param[in] characteristic The characteristic's GATT handle
+ * @param[in] completed If this callback is for the last remote device which enables a CCCD, it will be true. Or it will be false.
+ * @param[in] user_data The user data passed from the requesting function
+ *
+ * @see bt_gatt_server_notify()
+ */
+typedef void (*bt_gatt_server_notification_sent_cb) (int result,
+ char *remote_address, bt_gatt_server_h server,
+ bt_gatt_h characteristic, bool completed, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Enumerations for the player control command
+ * @since_tizen 2.3
+ */
+ typedef enum {
+ BT_AVRCP_CONTROL_PLAY = 0x01, /**< Play */
+ BT_AVRCP_CONTROL_PAUSE, /**< Pause */
+ BT_AVRCP_CONTROL_STOP, /**< Stop */
+ BT_AVRCP_CONTROL_NEXT, /**< Next Track*/
+ BT_AVRCP_CONTROL_PREVIOUS, /**< Previous track */
+ BT_AVRCP_CONTROL_FAST_FORWARD, /**< Fast Forward */
+ BT_AVRCP_CONTROL_REWIND /**< Rewind */
+} bt_avrcp_player_command_e;
+
+ /**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Structure of Track metadata information.
+ * @since_tizen 2.3
+ *
+ * @see #bt_class_s
+ */
+typedef struct {
+ const char *title;
+ const char *artist;
+ const char *album;
+ const char *genre;
+ unsigned int total_tracks;
+ unsigned int number;
+ unsigned int duration;
+} bt_avrcp_metadata_attributes_info_s;
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Called when the connection state is changed.
+ * @since_tizen 2.3
+ * @param[in] connected The state to be changed. @a true means connected state, Otherwise, @a false.
+ * @param[in] remote_address The remote address
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_avrcp_control_initialize()
+ * @see bt_avrcp_control_deinitialize()
+ */
+typedef void (*bt_avrcp_control_connection_state_changed_cb) (bool connected, const char *remote_address, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Called when the Song position mode is changed by the remote target device.
+ * @since_tizen 2.3
+ *
+ * @param[in] position The song position
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_avrcp_set_song_position_changed_cb()
+ * @see bt_avrcp_unset_song_position_changed_cb()
+ */
+typedef void (*bt_avrcp_song_position_changed_cb) (unsigned int position, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Called when the Song metadata information is changed by the remote target device.
+ * @since_tizen 2.3
+ *
+ * @param[in] position The song metadata information
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_avrcp_set_track_info_changed_cb()
+ * @see bt_avrcp_unset_track_info_changed_cb()
+ */
+typedef void (*bt_avrcp_track_info_changed_cb) (bt_avrcp_metadata_attributes_info_s *track, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Called when the Song Play status mode is changed by the remote target device.
+ * @since_tizen 2.3
+ *
+ * @param[in] play_state The song play status
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_avrcp_set_play_status_changed_cb()
+ * @see bt_avrcp_unset_play_status_changed_cb()
+ */
+typedef void (*bt_avrcp_play_status_changed_cb) (bt_avrcp_player_state_e play_state, void *user_data);
+
+/**
+ * @}
+ */
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif // __TIZEN_NETWORK_BLUETOOTH_TYPE_INTERNAL_H__
diff --git a/include/wearable/bluetooth.h b/include/wearable/bluetooth.h
new file mode 100755
index 0000000..6b5bf00
--- /dev/null
+++ b/include/wearable/bluetooth.h
@@ -0,0 +1,5039 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef __TIZEN_NETWORK_BLUETOOTH_H__
+#define __TIZEN_NETWORK_BLUETOOTH_H__
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <stdbool.h>
+#include <tizen_error.h>
+
+#include "bluetooth_type.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+
+/**
+ * @file bluetooth.h
+ * @brief API to control the Bluetooth adapter and devices and communications.
+ * @ingroup CAPI_NETWORK_BLUETOOTH_MODULE
+ */
+
+
+/**
+ * @addtogroup CAPI_NETWORK_BLUETOOTH_MODULE
+ * @{
+ */
+
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_MODULE
+ * @brief Initializes the Bluetooth API.
+ * @since_tizen 2.3.1
+ *
+ * @remarks This function must be called before Bluetooth API starts. \n
+ * You must free all resources of the Bluetooth service by calling bt_deinitialize() if Bluetooth service is no longer needed.
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_deinitialize()
+ */
+int bt_initialize(void);
+
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_MODULE
+ * @brief Releases all resources of the Bluetooth API.
+ * @since_tizen 2.3.1
+ *
+ * @remarks This function must be called if Bluetooth API is no longer needed.
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre Bluetooth API must be initialized with bt_initialize().
+ *
+ * @see bt_initialize()
+ */
+int bt_deinitialize(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Enables the local Bluetooth adapter, asynchronously.
+ * @since_tizen 2.3.1
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ *
+ * @details This function enables Bluetooth protocol stack and hardware.
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_ALREADY_DONE Already enabled
+ * @retval #BT_ERROR_NOW_IN_PROGRESS Operation now in progress
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre Bluetooth service must be initialized with bt_initialize().
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_DISABLED
+ * @post This function invokes bt_adapter_state_changed_cb().
+ *
+ * @see bt_initialize()
+ * @see bt_adapter_get_state()
+ * @see bt_adapter_set_state_changed_cb()
+ * @see bt_adapter_unset_state_changed_cb()
+ * @see bt_adapter_state_changed_cb()
+ *
+ */
+int bt_adapter_enable(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Disables the local Bluetooth adapter, asynchronously.
+ * @since_tizen 2.3.1
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ *
+ * @details This function disables Bluetooth protocol stack and hardware.
+ *
+ * @remarks You should disable Bluetooth adapter, which is helpful for saving power.
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_NOW_IN_PROGRESS Operation now in progress
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED
+ * @post This function invokes bt_adapter_state_changed_cb().
+ *
+ * @see bt_adapter_get_state()
+ * @see bt_adapter_state_changed_cb()
+ * @see bt_adapter_set_state_changed_cb()
+ * @see bt_adapter_unset_state_changed_cb ()
+ *
+ */
+int bt_adapter_disable(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Recover the local Bluetooth adapter, asynchronously.
+ * @since_tizen 2.3.1
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ *
+ * @details This function does recovery logic, disables Bluetooth protocol stack and hardware, then enables after a few seconds.
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_NOW_IN_PROGRESS Operation now in progress
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED
+ * @post This function invokes bt_adapter_state_changed_cb().
+ *
+ * @see bt_adapter_get_state()
+ * @see bt_adapter_state_changed_cb()
+ * @see bt_adapter_set_state_changed_cb()
+ * @see bt_adapter_unset_state_changed_cb ()
+ *
+ */
+int bt_adapter_recover(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Reset the local Bluetooth adapter, synchronously.
+ * @since_tizen 2.3.1
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ *
+ * @details This function resets Bluetooth protocol and values.
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre Bluetooth service must be initialized with bt_initialize().
+ * @post bt_adapter_state_changed_cb() will be invoked if The state of local Bluetooth was #BT_ADAPTER_ENABLED.
+ *
+ * @see bt_initialize()
+ * @see bt_adapter_get_state()
+ * @see bt_adapter_set_state_changed_cb()
+ * @see bt_adapter_unset_state_changed_cb()
+ * @see bt_adapter_state_changed_cb()
+ *
+ */
+int bt_adapter_reset(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Gets the current state of local Bluetooth adapter.
+ * @since_tizen 2.3.1
+ *
+ * @param[out] adapter_state The current adapter state
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_initialize()
+ */
+int bt_adapter_get_state(bt_adapter_state_e *adapter_state);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Gets the address of local Bluetooth adapter.
+ * @since_tizen 2.3.1
+ *
+ * @remarks The @a local_address must be released with free() by you.
+ *
+ * @param[out] local_address The device address of local Bluetooth adapter
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @see bt_adapter_get_name()
+ */
+int bt_adapter_get_address(char **local_address);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Gets the version of local Bluetooth adapter.
+ * @since_tizen 2.3.1
+ * @remarks The @a local_version must be released with free() by you.
+ *
+ * @param[out] local_version The version of local Bluetooth adapter
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ */
+int bt_adapter_get_version(char **local_version);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Gets the information regarding local Bluetooth adapter.
+ * @since_tizen 2.3.1
+ * @remarks The @a all parameters must be released with free() by you.
+ *
+ * @param[out] chipset Chipset name of local Bluetooth adapter
+ * @param[out] firmware Firmware info. of local Bluetooth adapter
+ * @param[out] stack_version Bluetooth stack version
+ * @param[out] profiles The profile list of local Bluetooth adapter
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ */
+int bt_adapter_get_local_info(char **chipset, char **firmware, char **stack_version, char **profiles);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Gets the name of local Bluetooth adapter.
+ * @since_tizen 2.3.1
+ *
+ * @details Use this function to get the friendly name associated with Bluetooth
+ * device, retrieved by the remote Bluetooth devices.
+ *
+ * @remarks The @a local_name must be released with free() by you.
+ *
+ * @param[out] local_name The local device name
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ *
+ * @see bt_adapter_set_name()
+ */
+int bt_adapter_get_name(char **local_name);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Sets the name of local Bluetooth adapter.
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @param[in] local_name The name of the Bluetooth device. \n
+ * The maximum length is 248 characters.
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @post bt_adapter_name_changed_cb() will be invoked if this function returns #BT_ERROR_NONE.
+ *
+ * @see bt_adapter_get_name()
+ * @see bt_adapter_name_changed_cb()
+ * @see bt_adapter_set_name_changed_cb()
+ * @see bt_adapter_unset_name_changed_cb()
+ */
+int bt_adapter_set_name(const char *local_name);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Gets the visibility mode of local Bluetooth adapter.
+ * @since_tizen 2.3.1
+ * @param[out] mode The visibility mode of the Bluetooth device
+ * @param[out] duration The duration until the visibility mode is changed to #BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE (in seconds).
+ * @a duration is valid only if @a mode is #BT_ADAPTER_VISIBILITY_MODE_LIMITED_DISCOVERABLE. This value can be NULL.
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ */
+int bt_adapter_get_visibility(bt_adapter_visibility_mode_e *mode, int *duration);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Sets the visibility mode.
+ * @since_tizen 2.3.1
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ *
+ * @remarks #BT_ADAPTER_VISIBILITY_MODE_LIMITED_DISCOVERABLE will change to #BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE
+ * after the given @a duration goes.
+ *
+ * @param[in] discoverable_mode The Bluetooth visibility mode to set
+ * @param[in] duration The duration until the visibility mode is changed to #BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE (in seconds).
+ * @a duration is used only for #BT_ADAPTER_VISIBILITY_MODE_LIMITED_DISCOVERABLE mode.
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @post bt_adapter_visibility_mode_changed_cb() will be invoked if this function returns #BT_ERROR_NONE.
+ *
+ * @see bt_adapter_get_visibility()
+ * @see bt_adapter_visibility_mode_changed_cb()
+ * @see bt_adapter_set_visibility_mode_changed_cb()
+ * @see bt_adapter_unset_visibility_mode_changed_cb()
+ */
+int bt_adapter_set_visibility(bt_adapter_visibility_mode_e discoverable_mode, int duration);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Starts the device discovery, asynchronously.
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @details If a device is discovered, bt_adapter_device_discovery_state_changed_cb() will be invoked
+ * with #BT_ADAPTER_DEVICE_DISCOVERY_FOUND, and then bt_adapter_device_discovery_state_changed_cb()
+ * will be called with #BT_ADAPTER_DEVICE_DISCOVERY_FINISHED in case of the completion or cancellation of the discovery.
+ *
+ * @remarks To connect to peer Bluetooth device, you need to know its Bluetooth address. \n
+ * The device discovery can be stopped by bt_adapter_stop_device_discovery().
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_NOW_IN_PROGRESS Operation is now in progress
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @post This function invokes bt_adapter_device_discovery_state_changed_cb().
+ *
+ * @see bt_adapter_is_discovering()
+ * @see bt_adapter_stop_device_discovery()
+ * @see bt_adapter_device_discovery_state_changed_cb()
+ * @see bt_adapter_set_device_discovery_state_changed_cb()
+ * @see bt_adapter_unset_device_discovery_state_changed_cb()
+ */
+int bt_adapter_start_device_discovery(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Stops the device discovery, asynchronously.
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @remarks The device discovery process will take 10 ~ 20 seconds to get all the devices in vicinity.
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_NOT_IN_PROGRESS Operation is not in progress
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The device discovery must be in progress with bt_adapter_start_device_discovery().
+ * @post This function invokes bt_adapter_device_discovery_state_changed_cb().
+ *
+ * @see bt_adapter_is_discovering()
+ * @see bt_adapter_start_device_discovery()
+ * @see bt_adapter_set_device_discovery_state_changed_cb()
+ * @see bt_adapter_unset_device_discovery_state_changed_cb()
+ * @see bt_adapter_device_discovery_state_changed_cb()
+ */
+int bt_adapter_stop_device_discovery(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Checks for the device discovery is in progress or not.
+ * @since_tizen 2.3.1
+ *
+ * @remarks If Bluetooth discovery is in progress, other operations are not allowed and
+ * you have to either stop the discovery operation, or wait for it to be finished,
+ * before performing other operations.
+
+ * @param[out] is_discovering The discovering status: (@c true = in progress , @c false = not in progress )
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ *
+ * @see bt_adapter_start_device_discovery()
+ * @see bt_adapter_stop_device_discovery()
+ */
+int bt_adapter_is_discovering(bool *is_discovering);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Get the service mask from the uuid list.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] uuids The UUID list of the device.
+ * @param[in] no_of_service The number of the UUID list count.
+ * @param[out] service_mask_list Service mask list converted from the given UUID list.
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_service_class_t
+ */
+int bt_device_get_service_mask_from_uuid_list(char **uuids,
+ int no_of_service,
+ bt_service_class_t *service_mask_list);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Retrieves the device information of all bonded devices.
+ * @since_tizen 2.3.1
+ *
+ * @param [in] callback The callback function to invoke
+ * @param [in] user_data The user data passed from the foreach function
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @post This function invokes bt_adapter_bonded_device_cb().
+ *
+ * @see bt_adapter_bonded_device_cb()
+ */
+int bt_adapter_foreach_bonded_device(bt_adapter_bonded_device_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Gets the device information of a bonded device.
+ * @since_tizen 2.3.1
+ * @remarks The @a device_info must be released with bt_adapter_free_device_info() by you .
+ *
+ * @param [in] remote_address The address of remote device
+ * @param [out] device_info The bonded device information
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_BONDED Remote device not bonded
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @post This function invokes bt_adapter_bonded_device_cb().
+ *
+ * @see bt_adapter_bonded_device_cb()
+ */
+int bt_adapter_get_bonded_device_info(const char *remote_address, bt_device_info_s **device_info);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Frees device info.
+ * @since_tizen 2.3.1
+ *
+ * @param [in] device_info The bonded device information
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_adapter_get_bonded_device_info()
+ */
+int bt_adapter_free_device_info(bt_device_info_s *device_info);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Checks whether the UUID of service is used or not
+ * @since_tizen 2.3.1
+ * @param[in] service_uuid The UUID of service
+ * @param[out] used Indicates whether the service is used or not
+ * @return true on success, otherwise false.
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ */
+int bt_adapter_is_service_used(const char *service_uuid, bool *used);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Registers a callback function to be invoked when the Bluetooth adapter state changes.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] callback The callback function to invoke
+ * @param[in] user_data The user data to be passed to the callback function
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @post bt_adapter_state_changed_cb() will be invoked.
+ *
+ * @see bt_initialize()
+ * @see bt_adapter_state_changed_cb()
+ * @see bt_adapter_set_state_changed_cb()
+ * @see bt_adapter_unset_state_changed_cb()
+ */
+int bt_adapter_set_state_changed_cb(bt_adapter_state_changed_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Unregisters the callback function.
+ * @since_tizen 2.3.1
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_initialize()
+ * @see bt_adapter_set_state_changed_cb()
+ */
+int bt_adapter_unset_state_changed_cb(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Registers a callback function to be invoked when the name of Bluetooth adapter changes.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] callback The callback function to invoke
+ * @param[in] user_data The user data to be passed to the callback function
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @post bt_adapter_name_changed_cb() will be invoked.
+ *
+ * @see bt_initialize()
+ * @see bt_adapter_name_changed_cb()
+ * @see bt_adapter_unset_name_changed_cb()
+ */
+int bt_adapter_set_name_changed_cb(bt_adapter_name_changed_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Unregisters the callback function.
+ * @since_tizen 2.3.1
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_initialize()
+ * @see bt_adapter_set_name_changed_cb()
+ */
+int bt_adapter_unset_name_changed_cb(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Registers a callback function to be invoked when the visibility mode changes.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @post bt_adapter_visibility_mode_changed_cb() will be invoked.
+ *
+ * @see bt_initialize()
+ * @see bt_adapter_visibility_mode_changed_cb()
+ * @see bt_adapter_unset_visibility_mode_changed_cb()
+ */
+int bt_adapter_set_visibility_mode_changed_cb(bt_adapter_visibility_mode_changed_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Unregisters the callback function.
+ * @since_tizen 2.3.1
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_initialize()
+ * @see bt_adapter_set_visibility_mode_changed_cb()
+ */
+int bt_adapter_unset_visibility_mode_changed_cb(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Registers a callback function to be invoked every second
+ * @since_tizen 2.3.1
+ * until the visibility mode is changed from #BT_ADAPTER_VISIBILITY_MODE_LIMITED_DISCOVERABLE
+ * to #BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE.
+ * @details When you set visibility mode as #BT_ADAPTER_VISIBILITY_MODE_LIMITED_DISCOVERABLE,
+ * @a callback will be called every second until visibility mode is changed to #BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE.
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized by bt_initialize().
+ * @post bt_adapter_visibility_duration_changed_cb() will be invoked.
+ * @see bt_initialize()
+ * @see bt_adapter_visibility_duration_changed_cb()
+ * @see bt_adapter_unset_visibility_duration_changed_cb()
+ */
+int bt_adapter_set_visibility_duration_changed_cb(bt_adapter_visibility_duration_changed_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Unregisters the callback function.
+ * @since_tizen 2.3.1
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @see bt_initialize()
+ * @see bt_adapter_set_visibility_duration_changed_cb()
+ */
+int bt_adapter_unset_visibility_duration_changed_cb(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Registers a callback function to be invoked when the device discovery state changes.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @post bt_adapter_device_discovery_state_changed_cb() will be invoked.
+ *
+ * @see bt_initialize()
+ * @see bt_adapter_device_discovery_state_changed_cb()
+ * @see bt_adapter_set_device_discovery_state_changed_cb()
+ * @see bt_adapter_unset_device_discovery_state_changed_cb()
+ */
+int bt_adapter_set_device_discovery_state_changed_cb(bt_adapter_device_discovery_state_changed_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Unregisters the callback function.
+ * @since_tizen 2.3.1
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_initialize()
+ * @see bt_adapter_set_device_discovery_state_changed_cb()
+ */
+int bt_adapter_unset_device_discovery_state_changed_cb(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Get the Hash and Randmoizer value, synchronously.
+ * @since_tizen 2.3.1
+ *
+ * @param[out] hash The hash value recieved from the controller
+ * @param[out] randomizer The hash value recieved from the controller
+ * @param[out] hash_len The length of the hash value
+ * @param[out] randomizer_len The length of the randomizer value
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @see bt_initialize()
+ */
+int bt_adapter_get_local_oob_data(unsigned char **hash, unsigned char **randomizer,
+ int *hash_len, int *randomizer_len);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Sets the Hash and Randmoizer value, synchronously.
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @param[in] remote_address Remote device address
+ * @param[in] hash The hash value recieved from the controller
+ * @param[in] randomizer The hash value recieved from the controller
+ * @param[in] hash_len The length of the hash value. Allowed value is 16
+ * @param[in] randomizer_len The length of the randomizer value. Allowed value is 16
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @see bt_initialize()
+ */
+int bt_adapter_set_remote_oob_data(const char *remote_address,
+ unsigned char *hash, unsigned char *randomizer,
+ int hash_len, int randomizer_len);
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Deletes the Hash and Randomizer value, synchronously.
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @param[in] remote_address Remote device address
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @see bt_initialize()
+ */
+int bt_adapter_remove_remote_oob_data(const char *remote_address);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Registers a callback function to be invoked when the connectable state changes.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @post bt_adapter_connectable_changed_cb() will be invoked.
+ *
+ * @see bt_initialize()
+ * @see bt_adapter_connectable_changed_cb()
+ * @see bt_adapter_unset_connectable_changed_cb()
+ */
+int bt_adapter_set_connectable_changed_cb(bt_adapter_connectable_changed_cb callback, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Unregisters the callback function.
+ * @since_tizen 2.3.1
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_initialize()
+ * @see bt_adapter_set_connectable_changed_cb()
+ */
+int bt_adapter_unset_connectable_changed_cb(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Gets the connectable state of local Bluetooth adapter.
+ * @since_tizen 2.3.1
+ *
+ * @remarks When connectable state is false, no device can connect to this device and visibility mode cannot be changed.
+ *
+ * @param[out] connectable The connectable state of local Bluetooth adapter
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ *
+ * @see bt_adapter_set_connectable()
+ */
+int bt_adapter_get_connectable(bool *connectable);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Sets the connectable state of local Bluetooth adapter.
+ * @since_tizen 2.3.1
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ *
+ * @remarks When connectable state is false, no device can connect to this device and visibility mode cannot be changed.
+ *
+ * @param[in] connectable The connectable state to set
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @post bt_adapter_connectable_changed_cb() will be invoked if this function returns #BT_ERROR_NONE.
+ *
+ * @see bt_adapter_get_connectable()
+ * @see bt_adapter_connectable_changed_cb()
+ * @see bt_adapter_set_connectable_changed_cb()
+ * @see bt_adapter_unset_connectable_changed_cb()
+ */
+int bt_adapter_set_connectable(bool connectable);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Enables the local Bluetooth le adapter, asynchronously.
+ * @since_tizen 2.3.1
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ *
+ * @details This function enables Bluetooth protocol stack and hardware.
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_ALREADY_DONE Already enabled
+ * @retval #BT_ERROR_NOW_IN_PROGRESS Operation now in progress
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre Bluetooth service must be initialized with bt_initialize().
+ * @post This function invokes bt_adapter_le_state_changed_cb().
+ *
+ * @see bt_initialize()
+ * @see bt_adapter_le_get_state()
+ * @see bt_adapter_le_set_state_changed_cb()
+ * @see bt_adapter_le_unset_state_changed_cb()
+ * @see bt_adapter_le_state_changed_cb()
+ *
+ */
+int bt_adapter_le_enable(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Disables the local Bluetooth le adapter, asynchronously.
+ * @since_tizen 2.3.1
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ *
+ * @details This function disables Bluetooth le protocol stack and hardware.
+ *
+ * @remarks
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_NOW_IN_PROGRESS Operation now in progress
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_LE_ENABLED
+ * @post This function invokes bt_adapter_le_state_changed_cb().
+ *
+ * @see bt_adapter_le_get_state()
+ * @see bt_adapter_le_state_changed_cb()
+ * @see bt_adapter_le_set_state_changed_cb()
+ * @see bt_adapter_le_unset_state_changed_cb ()
+ *
+ */
+int bt_adapter_le_disable(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Gets the current state of local Bluetooth adapter.
+ * @since_tizen 2.3.1
+ *
+ * @param[out] adapter_le_state The current adapter le state
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_initialize()
+ */
+int bt_adapter_le_get_state(bt_adapter_le_state_e *adapter_le_state);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Starts the LE scan to find LE advertisement.
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @details If a LE advertisement is found, bt_adapter_le_scan_result_cb() will be invoked.
+ *
+ * @param[in] cb The callback to report the result of this function
+ * @param[in] user_data The user data to be passed when callback is called
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_NOW_IN_PROGRESS Operation is now in progress
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @post This function invokes bt_adapter_le_scan_result_cb().
+ *
+ * @see bt_adapter_le_scan_result_cb()
+ */
+int bt_adapter_le_start_scan(bt_adapter_le_scan_result_cb cb, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Stops the LE scan.
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_NOT_IN_PROGRESS Operation is not in progress
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The LE scan must be in progress with bt_adapter_le_start_scan().
+ *
+ * @see bt_adapter_le_start_scan()
+ */
+int bt_adapter_le_stop_scan(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Gets the service UUID list from the scan result information
+ * @since_tizen 2.3.1
+ *
+ * @remarks The @a uuids must be iterated as count and each pointed data must be released with free().
+ * Then uuids must be released with free(). \n
+ * 16-bit service UUID or 128-bit service UUID is supported. (e.g. 180F, 0000180F-0000-1000-8000-00805F9B34FB)
+ *
+ * @param[in] info The scan result information
+ * @param[in] pkt_type The packet type
+ * @param[out] uuids The list of string of the service uuid
+ * @param[out] count The count of the service UUIDs
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NO_DATA No data available
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_adapter_le_scan_result_cb()
+ */
+int bt_adapter_le_get_scan_result_service_uuids(const bt_adapter_le_device_scan_result_info_s *info,
+ bt_adapter_le_packet_type_e pkt_type, char ***uuids, int *count);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Gets the device name from the scan result information
+ * @since_tizen 2.3.1
+ *
+ * @remarks The @a name must be released with free() by you.
+ *
+ * @param[in] info The scan result information
+ * @param[in] pkt_type The packet type
+ * @param[out] name The device name
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NO_DATA No data available
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_adapter_le_scan_result_cb()
+ */
+int bt_adapter_le_get_scan_result_device_name(const bt_adapter_le_device_scan_result_info_s *info,
+ bt_adapter_le_packet_type_e pkt_type, char **name);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Gets the transmission power level from the scan result information
+ * @since_tizen 2.3.1
+ *
+ * @param[in] info The scan result information
+ * @param[in] pkt_type The packet type
+ * @param[out] power_level The transmission power level in dBm
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NO_DATA No data available
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_adapter_le_scan_result_cb()
+ */
+int bt_adapter_le_get_scan_result_tx_power_level(const bt_adapter_le_device_scan_result_info_s *info,
+ bt_adapter_le_packet_type_e pkt_type, int *power_level);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Gets the service solicitation UUID list from the scan result information
+ * @since_tizen 2.3.1
+ *
+ * @remarks The @a uuids must be iterated as count and each pointed data must be released with free().
+ * Then uuids must be released with free(). \n
+ * 16-bit service solicitation UUID or 128-bit service solicitaion UUID is supported.
+ * (e.g. 180F, 0000180F-0000-1000-8000-00805F9B34FB)
+ *
+ * @param[in] info The scan result information
+ * @param[in] pkt_type The packet type
+ * @param[out] uuids The list of string of the service solicitation uuid
+ * @param[out] count The count of the service UUIDs
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NO_DATA No data available
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_adapter_le_scan_result_cb()
+ */
+int bt_adapter_le_get_scan_result_service_solicitation_uuids(const bt_adapter_le_device_scan_result_info_s *info,
+ bt_adapter_le_packet_type_e pkt_type, char ***uuids, int *count);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Gets the service data list from the scan result information
+ * @since_tizen 2.3.1
+ *
+ * @remarks The @a data_list must be released with bt_adapter_le_free_service_data_list() by you .
+ *
+ * @param[in] info The scan result information
+ * @param[in] pkt_type The packet type
+ * @param[out] data_list The list of the service data
+ * @param[out] count The count of the service data list
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NO_DATA No data available
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_adapter_le_scan_result_cb()
+ */
+int bt_adapter_le_get_scan_result_service_data_list(const bt_adapter_le_device_scan_result_info_s *info,
+ bt_adapter_le_packet_type_e pkt_type, bt_adapter_le_service_data_s **data_list, int *count);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Frees service data list.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] data_list The list of the service data
+ * @param[in] count The count of the service data list
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_adapter_le_get_scan_result_service_data_list()
+ */
+int bt_adapter_le_free_service_data_list(bt_adapter_le_service_data_s *data_list, int count);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Gets the appearance from the scan result information
+ * @since_tizen 2.3.1
+ *
+ * @param[in] info The scan result information
+ * @param[in] pkt_type The packet type
+ * @param[out] appearance The appearance
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NO_DATA No data available
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_adapter_le_scan_result_cb()
+ */
+int bt_adapter_le_get_scan_result_appearance(const bt_adapter_le_device_scan_result_info_s *info,
+ bt_adapter_le_packet_type_e pkt_type, int *appearance);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Gets the manufacturer data from the scan result information
+ * @since_tizen 2.3.1
+ *
+ * @remarks The @a manufacturer_data must be released with free() by you.
+ *
+ * @param[in] info The scan result information
+ * @param[in] pkt_type The packet type
+ * @param[out] manufacturer_id The manufacturer ID
+ * @param[out] manufacturer_data The manufacturer data (byte array)
+ * @param[out] manufacturer_data_len The length of manufacturer data
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NO_DATA No data available
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_adapter_le_scan_result_cb()
+ */
+int bt_adapter_le_get_scan_result_manufacturer_data(const bt_adapter_le_device_scan_result_info_s *info,
+ bt_adapter_le_packet_type_e pkt_type, int *manufacturer_id, char **manufacturer_data, int *manufacturer_data_len);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Registers a callback function to be invoked when the Bluetooth adapter le state changes.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] callback The callback function to invoke
+ * @param[in] user_data The user data to be passed to the callback function
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @post bt_adapter_le_state_changed_cb() will be invoked.
+ *
+ * @see bt_initialize()
+ * @see bt_adapter_le_state_changed_cb()
+ * @see bt_adapter_le_unset_state_changed_cb()
+ */
+int bt_adapter_le_set_state_changed_cb(bt_adapter_le_state_changed_cb callback, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Unregisters the callback function.
+ * @since_tizen 2.3.1
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_initialize()
+ * @see bt_adapter_le_set_state_changed_cb()
+ */
+int bt_adapter_le_unset_state_changed_cb(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief add address to whitelist for accepting scanning request.
+ * @since_tizen 2.3.1
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ *
+ * @remarks If the adress is in the whitelist then other LE devices are able to
+ * search this device. Before calling this API, make sure that the adapter is
+ * enabled. There is no callback event for this API.
+
+ * @param[in] address The other device's address
+ * @param[in] address_type The other device's address type
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Adapter is not enabled
+ * @retval #BT_ERROR_RESOURCE_BUSY Device or resource busy
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ *
+ * @see bt_adapter_le_start_advertising_new()
+ * @see bt_adapter_le_stop_advertising()
+ */
+int bt_adapter_le_add_white_list(const char *address, bt_device_address_type_e address_type);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief remove address from the whitelist for not accepting scanning request.
+ * @since_tizen 2.3.1
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ *
+ * @remarks If the adress is in the whitelist then other LE devices are able to
+ * search this device. Before calling this API, make sure that the adapter is
+ * enabled. There is no callback event for this API.
+ *
+ * @param[in] address The other device's address
+ * @param[in] address_type The other device's address type
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Adapter is not enabled
+ * @retval #BT_ERROR_RESOURCE_BUSY Device or resource busy
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ *
+ * @see bt_adapter_le_start_advertising_new()
+ * @see bt_adapter_le_stop_advertising()
+ */
+int bt_adapter_le_remove_white_list(const char *address, bt_device_address_type_e address_type);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Create advertiser to advertise device's existence or respond to LE scanning reqeust.
+ * @since_tizen 2.3.1
+ *
+ * @param[out] advertiser The handle of advertiser
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_adapter_le_destroy_advertiser()
+ */
+int bt_adapter_le_create_advertiser(bt_advertiser_h *advertiser);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Destroy advertiser.
+ * @since_tizen 2.3.1
+ *
+ * @param[out] advertiser The handle of advertiser
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_adapter_le_create_advertiser()
+ */
+int bt_adapter_le_destroy_advertiser(bt_advertiser_h advertiser);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Add a service UUID to advertise or scan response data.
+ * The maximum advertised or responded data size is 31 bytes
+ * including data type and system wide data.
+ * @since_tizen 2.3.1
+ *
+ * @remarks 16-bit UUID or 128-bit UUID is supported. (e.g. 180F, 0000180F-0000-1000-8000-00805F9B34FB)
+ *
+ * @param[in] advertiser The handle of advertiser
+ * @param[in] pkt_type The packet type
+ * @param[in] uuid The string of the service UUID.
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_QUOTA_EXCEEDED Quota exceeded
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_adapter_le_clear_advertising_data()
+ */
+int bt_adapter_le_add_advertising_service_uuid(bt_advertiser_h advertiser,
+ bt_adapter_le_packet_type_e pkt_type, const char *uuid);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Add a service solicitation UUID to advertise or scan response data.
+ * The maximum advertised or responded data size is 31 bytes
+ * including data type and system wide data.
+ * @since_tizen 2.3.1
+ *
+ * @remarks 16-bit service solicitation UUID or 128-bit service solicitation UUID is supported.
+ * (e.g. 180F, 0000180F-0000-1000-8000-00805F9B34FB)
+ *
+ * @param[in] advertiser The handle of advertiser
+ * @param[in] pkt_type The packet type
+ * @param[in] uuid The string of the service solicitation UUID.
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_QUOTA_EXCEEDED Quota exceeded
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_adapter_le_clear_advertising_data()
+ */
+int bt_adapter_le_add_advertising_service_solicitation_uuid(bt_advertiser_h advertiser,
+ bt_adapter_le_packet_type_e pkt_type, const char *uuid);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Add service data to advertise or scan response data.
+ * The maximum advertised or responded data size is 31 bytes
+ * including data type and system wide data.
+ * @since_tizen 2.3.1
+ *
+ * @remarks 16-bit UUID is supported. (e.g. 180F)
+ *
+ * @param[in] advertiser The handle of advertiser
+ * @param[in] pkt_type The packet type
+ * @param[in] uuid 16-bit UUID of the service
+ * @param[in] service_data The service data
+ * @param[in] service_data_len The data length of service data
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_QUOTA_EXCEEDED Quota exceeded
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_adapter_le_clear_advertising_data()
+ */
+int bt_adapter_le_add_advertising_service_data(bt_advertiser_h advertiser,
+ bt_adapter_le_packet_type_e pkt_type, const char *uuid,
+ const char *service_data, int service_data_len);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Sets the external appearance of this device to advertise or scan response data.
+ * Please refer to the adopted Bluetooth specification for the the appearance.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] advertiser The handle of advertiser
+ * @param[in] pkt_type The packet type
+ * @param[in] appearance The external appearance of device
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_QUOTA_EXCEEDED Quota exceeded
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_adapter_le_clear_advertising_data()
+ */
+int bt_adapter_le_set_advertising_appearance(bt_advertiser_h advertiser,
+ bt_adapter_le_packet_type_e pkt_type, int appearance);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Add manufacturer specific data to advertise or scan response data.
+ * Please refer to the Bluetooth Assigned Numbers provided by the Bluetooth SIG for a list of existing company identifiers.
+ * The maximum advertised or responded data size is 31 bytes
+ * including data type and system wide data.
+ * @since_tizen 2.3.1
+ *
+ *
+ * @param[in] advertiser The handle of advertiser
+ * @param[in] pkt_type The packet type
+ * @param[in] manufacturer_id Manufacturer identifier
+ * @param[in] manufacturer_data The manufacturer specific data
+ * @param[in] manufacturer_data_len The data length of manufacturer data
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_QUOTA_EXCEEDED Quota exceeded
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_adapter_le_clear_advertising_data()
+ */
+int bt_adapter_le_add_advertising_manufacturer_data(bt_advertiser_h advertiser,
+ bt_adapter_le_packet_type_e pkt_type, int manufacturer_id, const char *manufacturer_data, int manufacturer_data_len);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Set whether the device name should be included in advertise or scan response data.
+ * The maximum advertised or responded data size is 31 bytes
+ * including data type and system wide data.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] advertiser The handle of advertiser
+ * @param[in] pkt_type The packet type
+ * @param[in] include_name Whether the device name should be included
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_QUOTA_EXCEEDED Quota exceeded
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_adapter_le_clear_advertising_data()
+ */
+int bt_adapter_le_set_advertising_device_name(bt_advertiser_h advertiser,
+ bt_adapter_le_packet_type_e pkt_type, bool include_name);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Set whether the transmission power level should be included in advertise or scan response data.
+ * The maximum advertised or responded data size is 31 bytes
+ * including data type and system wide data.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] advertiser The handle of advertiser
+ * @param[in] pkt_type The packet type
+ * @param[in] include_tx_power Whether the transmission power level should be included
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_QUOTA_EXCEEDED Quota exceeded
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_adapter_le_clear_advertising_data()
+ */
+int bt_adapter_le_set_advertising_tx_power_level(bt_advertiser_h advertiser,
+ bt_adapter_le_packet_type_e pkt_type, bool include_tx_power);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Clear all data to be advertised or responded to scan request from LE scanning device.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] advertiser The handle of advertiser
+ * @param[in] pkt_type The packet type to be cleared
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ */
+int bt_adapter_le_clear_advertising_data(bt_advertiser_h advertiser, bt_adapter_le_packet_type_e pkt_type);
+
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Stops the advertising.
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @param[in] advertiser The handle of advertiser
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_NOT_IN_PROGRESS Operation is not in progress
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The advertising must be going on with bt_adapter_le_start_advertising_new().
+ * @post This function invokes bt_adapter_le_advertising_state_changed_cb().
+ *
+ * @see bt_adapter_le_start_advertising_new()
+ * @see bt_adapter_le_advertising_state_changed_cb()
+ */
+int bt_adapter_le_stop_advertising(bt_advertiser_h advertiser);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Start advertising with passed advertiser and advertising parameters.
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @details Once Bluetooth advertising is started, nearby Bluetooth LE(Low Energy) supported
+ * devices can know this device's existence. And one of them can make a connection reqeust,
+ * if it is allowed.
+ *
+ * @param[in] advertiser The handle of advertiser
+ * @param[in] cb The callback to report the result of this function
+ * @param[in] user_data The user data to be passed when callback is called
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_NOW_IN_PROGRESS Operation is now in progress
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @post This function invokes bt_adapter_le_advertising_state_changed_cb().
+ *
+ * @see bt_adapter_le_stop_advertising()
+ * @see bt_adapter_le_advertising_state_changed_cb()
+ */
+int bt_adapter_le_start_advertising_new(bt_advertiser_h advertiser, bt_adapter_le_advertising_state_changed_cb cb, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Set advertising mode to control the advertising power and latency.
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @param[in] advertiser The handle of advertiser
+ * @param[in] mode The mode of advertising
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_NOW_IN_PROGRESS Operation is now in progress
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_adapter_le_start_advertising_new()
+ */
+int bt_adapter_le_set_advertising_mode(bt_advertiser_h advertiser, bt_adapter_le_advertising_mode_e mode);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Set whether the advertising type should be connectable or non-connectable
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @param[in] advertiser The handle of advertiser
+ * @param[in] connectable The type of advertising
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_NOW_IN_PROGRESS Operation is now in progress
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_adapter_le_start_advertising_new()
+ */
+int bt_adapter_le_set_advertising_connectable(bt_advertiser_h advertiser, bool connectable);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Sets the Privacy feature state of local Bluetooth adapter.
+ * @since_tizen 2.3.1
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ *
+ * @param[in] enable_privacy The privacy feature to set/unset.
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_LE_ENABLED.
+ *
+ */
+int bt_adapter_le_enable_privacy(bool enable_privacy);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Creates a bond with a remote Bluetooth device, asynchronously.
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @remarks A bond can be destroyed by bt_device_destroy_bond().\n
+ * The bonding request can be cancelled by bt_device_cancel_bonding().
+ *
+ * @param[in] remote_address The address of the remote Bluetooth device with which the bond should be created
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_RESOURCE_BUSY Device or resource busy
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @pre The remote device must be discoverable with bt_adapter_start_device_discovery().
+ * @post This function invokes bt_device_bond_created_cb().
+ *
+ * @see bt_adapter_start_device_discovery()
+ * @see bt_device_bond_created_cb()
+ * @see bt_device_cancel_bonding()
+ * @see bt_device_destroy_bond()
+ * @see bt_device_set_bond_created_cb()
+ * @see bt_device_unset_bond_created_cb()
+ */
+int bt_device_create_bond(const char *remote_address);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Creates a bond with a remote Bluetooth device, asynchronously.
+ * @since_tizen 2.3.1
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ *
+ * @remarks A bond can be destroyed by bt_device_destroy_bond().\n
+ * The bonding request can be cancelled by bt_device_cancel_bonding().
+ *
+ * @param[in] remote_address The address of the remote Bluetooth device with which the bond should be created
+ * @param[in] conn_type The connection type(LE or BREDR) to create bond with remote device
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_RESOURCE_BUSY Device or resource busy
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @pre The remote device must be discoverable with bt_adapter_start_device_discovery().
+ * @post This function invokes bt_device_bond_created_cb().
+ *
+ * @see bt_adapter_start_device_discovery()
+ * @see bt_device_create_bond()
+ * @see bt_device_bond_created_cb()
+ * @see bt_device_cancel_bonding()
+ * @see bt_device_destroy_bond()
+ * @see bt_device_set_bond_created_cb()
+ * @see bt_device_unset_bond_created_cb()
+ */
+int bt_device_create_bond_by_type(const char *remote_address,
+ bt_device_connection_link_type_e conn_type);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Cancels the bonding process.
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @remarks Use this function when the remote Bluetooth device is not responding to the
+ * bond request or you wish to cancel the bonding request.
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_NOT_IN_PROGRESS Operation not in progress
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The creating a bond must be in progress by bt_device_create_bond().
+ *
+ * @see bt_device_create_bond()
+ * @see bt_device_bond_created_cb()
+ * @see bt_device_set_bond_created_cb()
+ * @see bt_device_unset_bond_created_cb()
+ */
+int bt_device_cancel_bonding(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Destroys the bond, asynchronously.
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @param[in] remote_address The address of the remote Bluetooth device to remove bonding
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_RESOURCE_BUSY Device or resource busy
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_BONDED Remote device not bonded
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @pre The bond with the remote device must be created with bt_device_create_bond().
+ * @post This function invokes bt_device_bond_destroyed_cb().
+ *
+ * @see bt_device_create_bond()
+ * @see bt_device_bond_destroyed_cb()
+ * @see bt_device_set_bond_destroyed_cb()
+ * @see bt_device_unset_bond_destroyed_cb()
+ */
+int bt_device_destroy_bond(const char *remote_address);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Sets an alias for the bonded device.
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @param[in] remote_address The address of the remote Bluetooth device
+ * @param[in] alias The alias of the remote Bluetooth device
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_BONDED Remote device not bonded
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @pre The bond with the remote device must be created with bt_device_create_bond().
+ *
+ * @see bt_device_create_bond()
+ */
+int bt_device_set_alias(const char *remote_address, const char *alias);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Sets the authorization of a bonded device, asynchronously.
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @remarks Once a device is authorized, you don't need to receive a confirmation.
+ *
+ * @param[in] remote_address The address of the remote Bluetooth device to authorize
+ * @param[in] authorization_state The Bluetooth authorization state
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_BONDED Remote device not bonded
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @pre The bond with the remote device must be created with bt_device_create_bond().
+ * @post bt_device_authorization_changed_cb() will be invoked.
+ *
+ * @see bt_device_create_bond()
+ * @see bt_device_authorization_changed_cb()
+ * @see bt_device_set_authorization_changed_cb()
+ * @see bt_device_unset_authorization_changed_cb()
+ */
+int bt_device_set_authorization(const char *remote_address, bt_device_authorization_e authorization_state);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Starts the search for services supported by the specified device, asynchronously.
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @remarks If creating a bond succeeds, which means bt_device_bond_created_cb() is called with result #BT_ERROR_NONE,
+ * then you don't need to run this function.\n
+ * The service search takes a couple of seconds to complete normally. \n
+ *
+ * @param[in] remote_address The address of the remote Bluetooth device whose services need to be checked
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_BONDED Remote device not bonded
+ * @retval #BT_ERROR_SERVICE_SEARCH_FAILED Service search failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @pre The remote device must be discoverable with bt_adapter_start_device_discovery().
+ * @pre The bond with the remote device must be created with bt_device_create_bond().
+ * @post This function invokes bt_device_service_searched_cb().
+ *
+ * @see bt_adapter_start_device_discovery()
+ * @see bt_device_create_bond()
+ * @see bt_device_bond_created_cb()
+ * @see bt_device_service_searched_cb()
+ * @see bt_device_set_service_searched_cb()
+ * @see bt_device_unset_service_searched_cb()
+ */
+int bt_device_start_service_search(const char *remote_address);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Cancels service search process.
+ * @since_tizen 2.3.1
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_BONDED Remote device not bonded
+ * @retval #BT_ERROR_NOT_IN_PROGRESS Operation not in progress
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The service search must be in progress by bt_device_start_service_search().
+ *
+ * @see bt_device_start_service_search()
+ * @see bt_device_service_searched_cb()
+ * @see bt_device_set_service_searched_cb()
+ * @see bt_device_unset_service_searched_cb()
+ */
+int bt_device_cancel_service_search(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Gets the connected profiles.
+ * @since_tizen 2.3.1
+ * @param[in] remote_address The address of the remote device
+ * @param[in] callback The callback function to invoke
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @post bt_device_connected_profile() will be invoked.
+ * @see bt_device_connected_profile()
+ */
+int bt_device_foreach_connected_profiles(const char *remote_address, bt_device_connected_profile callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Gets the profile connected status.
+ * @since_tizen 2.3.1
+ * @param[in] remote_address The address of the remote device
+ * @param[in] bt_profile wish to know bt_profile
+ * @param[out] connected_status the connected status
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_BONDED Remote device not bonded
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ */
+int bt_device_is_profile_connected(const char *remote_address, bt_profile_e bt_profile,
+ bool *connected_status);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Registers a callback function to be invoked when the bond creates.
+ * @since_tizen 2.3.1
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @post bt_device_bond_created_cb() will be invoked.
+ * @see bt_initialize()
+ * @see bt_device_bond_created_cb()
+ * @see bt_device_unset_bond_created_cb()
+ */
+int bt_device_set_bond_created_cb(bt_device_bond_created_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Unregisters the callback function.
+ * @since_tizen 2.3.1
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @see bt_initialize()
+ * @see bt_device_set_bond_created_cb()
+ */
+int bt_device_unset_bond_created_cb(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Registers a callback function to be invoked when the bond destroys.
+ * @since_tizen 2.3.1
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @post bt_device_bond_destroyed_cb() will be invoked.
+ * @see bt_initialize()
+ * @see bt_device_bond_destroyed_cb()
+ * @see bt_device_unset_bond_destroyed_cb()
+ */
+int bt_device_set_bond_destroyed_cb(bt_device_bond_destroyed_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Unregisters the callback function.
+ * @since_tizen 2.3.1
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @see bt_initialize()
+ * @see bt_device_set_bond_destroyed_cb()
+ */
+int bt_device_unset_bond_destroyed_cb(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Registers a callback function to be invoked when the authorization of device changes.
+ * @since_tizen 2.3.1
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @post bt_device_authorization_changed_cb() will be invoked.
+ * @see bt_initialize()
+ * @see bt_device_authorization_changed_cb()
+ * @see bt_device_set_authorization_changed_cb()
+ * @see bt_device_unset_authorization_changed_cb()
+ */
+int bt_device_set_authorization_changed_cb(bt_device_authorization_changed_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Unregisters the callback function.
+ * @since_tizen 2.3.1
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @see bt_initialize()
+ * @see bt_device_set_authorization_changed_cb()
+ */
+int bt_device_unset_authorization_changed_cb(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Registers a callback function to be invoked when the process of service search finishes.
+ * @since_tizen 2.3.1
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @post bt_device_service_searched_cb() will be invoked.
+ * @see bt_initialize()
+ * @see bt_device_service_searched_cb()
+ * @see bt_device_unset_service_searched_cb()
+ */
+int bt_device_set_service_searched_cb(bt_device_service_searched_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Unregisters the callback function.
+ * @since_tizen 2.3.1
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @see bt_initialize()
+ * @see bt_device_set_service_searched_cb()
+ */
+int bt_device_unset_service_searched_cb(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Registers a callback function to be invoked when the connection state is changed.
+ * @since_tizen 2.3.1
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @post bt_device_connection_state_changed_cb() will be invoked.
+ * @see bt_initialize()
+ * @see bt_device_connection_state_changed_cb()
+ * @see bt_device_unset_connection_state_changed_cb()
+ */
+int bt_device_set_connection_state_changed_cb(bt_device_connection_state_changed_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Unregisters the callback function to be invoked when the connection state is changed.
+ * @since_tizen 2.3.1
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @see bt_initialize()
+ * @see bt_device_set_connection_state_changed_cb()
+ */
+int bt_device_unset_connection_state_changed_cb(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Registers a rfcomm server socket with a specific UUID.
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @remarks A socket can be destroyed by bt_socket_destroy_rfcomm().
+ *
+ * @param[in] service_uuid The UUID of service to provide
+ * @param[out] socket_fd The file descriptor of socket to listen
+ * @return 0 on success, otherwise a negative error value.
+ *
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ *
+ * @see bt_socket_listen_and_accept_rfcomm()
+ * @see bt_socket_destroy_rfcomm()
+ */
+int bt_socket_create_rfcomm(const char *service_uuid, int *socket_fd);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Removes the rfcomm server socket which was created using bt_socket_create_rfcomm().
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @remarks If callback function bt_socket_connection_state_changed_cb() is set and the remote Bluetooth device is connected,
+ * then bt_socket_connection_state_changed_cb() will be called when this function is finished successfully.
+ *
+ * @param[in] socket_fd The file descriptor of socket (which was created using bt_socket_create_rfcomm()) to destroy
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The socket must be created with bt_socket_create_rfcomm().
+ * @post If callback function bt_socket_connection_state_changed_cb() is set and the remote Bluetooth device is connected,
+ * then bt_socket_connection_state_changed_cb() will be called.
+ * @see bt_socket_create_rfcomm()
+ * @see bt_socket_connection_state_changed_cb()
+ * @see bt_socket_set_connection_state_changed_cb()
+ * @see bt_socket_unset_connection_state_changed_cb()
+ */
+int bt_socket_destroy_rfcomm(int socket_fd);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Starts listening on passed rfcomm socket and accepts connection requests.
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @details Pop-up is shown automatically when a RFCOMM connection is requested.
+ * bt_socket_connection_state_changed_cb() will be called with
+ * #BT_SOCKET_CONNECTED if you click "yes" and connection is finished successfully.
+ * @param[in] socket_fd The file descriptor of socket on which start to listen
+ * @param[in] max_pending_connections The maximum number of pending connections
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The socket must be created with bt_socket_create_rfcomm().
+ * @post If callback function bt_socket_connection_state_changed_cb() is set,
+ * then bt_socket_connection_state_changed_cb() will be called when the remote Bluetooth device is connected.
+ * @see bt_socket_create_rfcomm()
+ * @see bt_socket_connection_state_changed_cb()
+ * @see bt_socket_set_connection_state_changed_cb()
+ * @see bt_socket_unset_connection_state_changed_cb()
+ */
+int bt_socket_listen_and_accept_rfcomm(int socket_fd, int max_pending_connections);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Starts listening on passed rfcomm socket.
+ * @since_tizen 2.3.1
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @details bt_socket_connection_requested_cb() will be called when a RFCOMM connection is requested.
+ *
+ * @param[in] socket_fd The file descriptor socket on which start to listen
+ * @param[in] max_pending_connections The number of pending connections
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The socket must be created with bt_socket_create_rfcomm().
+ * @post This function invokes bt_socket_connection_state_changed_cb().
+ *
+ * @see bt_socket_create_rfcomm()
+ * @see bt_socket_set_connection_requested_cb()
+ * @see bt_socket_unset_connection_requested_cb()
+ * @see bt_socket_connection_requested_cb()
+ */
+int bt_socket_listen(int socket_fd, int max_pending_connections);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Accepts a connection request.
+ * @since_tizen 2.3.1
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] requested_socket_fd The file descriptor of socket on which a connection is requested
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The connection is requested by bt_socket_connection_requested_cb().
+ * @see bt_socket_create_rfcomm()
+ * @see bt_socket_connection_requested_cb()
+ * @see bt_socket_listen()
+ * @see bt_socket_reject()
+*/
+int bt_socket_accept(int requested_socket_fd);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Rejects a connection request.
+ * @since_tizen 2.3.1
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] socket_fd The file descriptor of socket on which a connection is requested
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The connection is requested by bt_socket_connection_requested_cb().
+ * @see bt_socket_create_rfcomm()
+ * @see bt_socket_connection_requested_cb()
+ * @see bt_socket_listen()
+ * @see bt_socket_accept()
+ */
+int bt_socket_reject(int socket_fd);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Connects to a specific RFCOMM based service on a remote Bluetooth device UUID, asynchronously.
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @remarks A connection can be disconnected by bt_socket_disconnect_rfcomm().
+ *
+ * @param[in] remote_address The address of the remote Bluetooth device
+ * @param[in] service_uuid The UUID of service provided by the remote Bluetooth device
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @pre The remote device must be discoverable with bt_adapter_start_device_discovery().
+ * @pre The bond with the remote device must be created with bt_device_create_bond().
+ * @post This function invokes bt_socket_connection_state_changed_cb().
+ *
+ * @see bt_device_create_bond()
+ * @see bt_adapter_start_device_discovery()
+ * @see bt_device_start_service_search()
+ * @see bt_socket_disconnect_rfcomm()
+ * @see bt_socket_connection_state_changed_cb()
+ * @see bt_socket_set_connection_state_changed_cb()
+ * @see bt_socket_unset_connection_state_changed_cb()
+ */
+int bt_socket_connect_rfcomm(const char *remote_address, const char *service_uuid);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Disconnects the RFCOMM connection with the given file descriptor of conneted socket.
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @param[in] socket_fd The file descriptor of socket to close which was received using bt_socket_connection_state_changed_cb().
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The connection must be established.
+ *
+ * @see bt_socket_connection_state_changed_cb()
+ * @see bt_socket_set_connection_state_changed_cb()
+ * @see bt_socket_unset_connection_state_changed_cb()
+ */
+int bt_socket_disconnect_rfcomm(int socket_fd);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Sends data to the connected device.
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @remark The specific error code can be obtained using the get_last_result() method. Error codes are described in Exception section.
+ *
+ * @param[in] socket_fd The file descriptor of connected socket which was received using bt_socket_connection_state_changed_cb()
+ * @param[in] data The data to be sent
+ * @param[in] length The length of data to be sent
+ *
+ * @return the number of bytes written (zero indicates nothing was written).
+ * @retval On error, -1 is returned, and errno is set appropriately. See write 2 man page.
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ * @exception BT_ERROR_PERMISSION_DENIED Permission denied
+ * @exception BT_ERROR_AGAIN Resource temporarily unavailable
+ *
+ * @pre The connection must be established.
+ *
+ * @see bt_socket_connection_state_changed_cb()
+ * @see bt_socket_set_connection_state_changed_cb()
+ * @see bt_socket_unset_connection_state_changed_cb()
+ */
+int bt_socket_send_data(int socket_fd, const char *data, int length);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Register a callback function that will be invoked when you receive data.
+ * @since_tizen 2.3.1
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @post bt_socket_data_received_cb() will be invoked.
+ * @see bt_initialize()
+ * @see bt_socket_data_received_cb()
+ * @see bt_socket_set_data_received_cb()
+ * @see bt_socket_unset_data_received_cb()
+ */
+int bt_socket_set_data_received_cb(bt_socket_data_received_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Unregisters the callback function.
+ * @since_tizen 2.3.1
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @see bt_initialize()
+ * @see bt_socket_data_received_cb()
+ * @see bt_socket_set_data_received_cb()
+ */
+int bt_socket_unset_data_received_cb(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Register a callback function that will be invoked when a RFCOMM connection is requested.
+ * @since_tizen 2.3.1
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @post If you listen and accept a socket by bt_socket_listen_and_accept_rfcomm(),
+ bt_socket_connection_requested_cb() will be invoked.
+ * @see bt_initialize()
+ * @see bt_socket_unset_connection_requested_cb()
+ */
+int bt_socket_set_connection_requested_cb(bt_socket_connection_requested_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Unregisters the callback function.
+ * @since_tizen 2.3.1
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @see bt_initialize()
+ * @see bt_socket_set_connection_requested_cb()
+ * @see bt_socket_connection_requested_cb()
+ */
+int bt_socket_unset_connection_requested_cb(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Register a callback function that will be invoked when the connection state changes.
+ * @since_tizen 2.3.1
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @post bt_socket_connection_state_changed_cb() will be invoked.
+ * @see bt_initialize()
+ * @see bt_socket_connection_state_changed_cb()
+ * @see bt_socket_unset_connection_state_changed_cb()
+ */
+int bt_socket_set_connection_state_changed_cb(bt_socket_connection_state_changed_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Unregisters the callback function.
+ * @since_tizen 2.3.1
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @see bt_initialize()
+ * @see bt_socket_connection_state_changed_cb()
+ * @see bt_socket_set_connection_state_changed_cb()
+ */
+int bt_socket_unset_connection_state_changed_cb(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_SERVER_MODULE
+ * @brief Initializes the Bluetooth OPP server requested by bt_opp_server_push_requested_cb().
+ * @since_tizen 2.3.1
+ * @details The popup appears when an OPP connection is requested from a remote device.
+ * If you accept the request, then connection will be established and bt_opp_server_push_requested_cb() will be called.
+ * At that time, you can call either bt_opp_server_accept() or bt_opp_server_reject().
+ * @remarks This function must be called to start Bluetooth OPP server. You must free all resources of the Bluetooth service
+ * by calling bt_opp_server_deinitialize() if Bluetooth OPP service is no longer needed.
+ * @param[in] destination The destination path
+ * @param[in] push_requested_cb The callback called when a push is requested
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_RESOURCE_BUSY Device or resource busy
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_opp_server_push_requested_cb()
+ * @see bt_opp_server_deinitialize()
+ * @see bt_opp_server_accept()
+ * @see bt_opp_server_reject()
+ */
+int bt_opp_server_initialize(const char *destination, bt_opp_server_push_requested_cb push_requested_cb, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_SERVER_MODULE
+ * @brief Initializes the Bluetooth OPP server requested by bt_opp_server_connection_requested_cb().
+ * @since_tizen 2.3.1
+ * @details No popup appears when an OPP connection is requested from a remote device.
+ * Instead, @a connection_requested_cb() will be called.
+ * At that time, you can call either bt_opp_server_accept() or bt_opp_server_reject().
+ * @remarks This function must be called to start Bluetooth OPP server. \n
+ * You must free all resources of the Bluetooth service by calling bt_opp_server_deinitialize() if Bluetooth OPP service is no longer needed.
+ * @param[in] destination The destination path
+ * @param[in] connection_requested_cb The callback called when an OPP connection is requested
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_RESOURCE_BUSY Device or resource busy
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_opp_server_connection_requested_cb()
+ * @see bt_opp_server_deinitialize()
+ * @see bt_opp_server_accept()
+ * @see bt_opp_server_reject()
+ */
+int bt_opp_server_initialize_by_connection_request(const char *destination, bt_opp_server_connection_requested_cb connection_requested_cb, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_SERVER_MODULE
+ * @brief Denitializes the Bluetooth OPP server.
+ * @since_tizen 2.3.1
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_opp_server_deinitialize()
+ */
+int bt_opp_server_deinitialize(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_SERVER_MODULE
+ * @brief Accepts the push request from the remote device.
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @remarks If you initialize OPP server by bt_opp_server_initialize_by_connection_request(), then name is ignored.
+ * You can cancel the pushes by bt_opp_server_cancel_transfer() with transfer_id.
+ * @param[in] progress_cb The callback called when a file is being transfered
+ * @param[in] finished_cb The callback called when a transfer is finished
+ * @param[in] name The name to store. This can be NULL if you initialize OPP server by bt_opp_server_initialize_by_connection_request().
+ * @param[in] user_data The user data to be passed to the callback function
+ * @param[out] transfer_id The ID of transfer
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOW_IN_PROGRESS Operation now in progress
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_opp_server_reject()
+ */
+int bt_opp_server_accept(bt_opp_server_transfer_progress_cb progress_cb, bt_opp_server_transfer_finished_cb finished_cb, const char *name,
+ void *user_data, int *transfer_id);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_SERVER_MODULE
+ * @brief Rejects the push request from the remote device.
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_opp_server_accept()
+ */
+int bt_opp_server_reject(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_SERVER_MODULE
+ * @brief Cancels the transfer.
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @param[in] transfer_id The ID of transfer
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_opp_server_accept()
+ */
+int bt_opp_server_cancel_transfer(int transfer_id);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_SERVER_MODULE
+ * @brief Sets the destination path of file to be pushed.
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @param[in] destination The destination path of file to be pushed
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ */
+int bt_opp_server_set_destination(const char *destination);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_CLIENT_MODULE
+ * @brief Initializes the Bluetooth OPP client.
+ * @since_tizen 2.3.1
+ * @remarks This function must be called before Bluetooth OPP client starts. \n
+ * You must free all resources of the Bluetooth service by calling bt_opp_client_deinitialize()
+ * if Bluetooth OPP service is no longer needed.
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_RESOURCE_BUSY Device or resource busy
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_opp_client_deinitialize()
+ */
+int bt_opp_client_initialize(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_CLIENT_MODULE
+ * @brief Denitializes the Bluetooth OPP client.
+ * @since_tizen 2.3.1
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_opp_client_initialize()
+ */
+int bt_opp_client_deinitialize(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_CLIENT_MODULE
+ * @brief Adds file to be pushed.
+ * @since_tizen 2.3.1
+ * @param[in] file The path of file to be pushed
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_opp_client_clear_files()
+ * @see bt_opp_client_push_files()
+ */
+int bt_opp_client_add_file(const char *file);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_CLIENT_MODULE
+ * @brief Adds file to be pushed.
+ * @since_tizen 2.3.1
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_opp_client_add_file()
+ * @see bt_opp_client_push_files()
+ */
+int bt_opp_client_clear_files(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_CLIENT_MODULE
+ * @brief Pushes the file to the remote device, asynchronously.
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @details At first, bt_opp_client_push_responded_cb() will be called when OPP server responds to the push request.
+ * After connection is established, bt_opp_client_push_progress_cb() will be called repeatedly until a file is tranfered completely.
+ * If you send several files, then bt_opp_client_push_progress_cb() with another file will be called repeatedly until the file is tranfered completely.
+ * bt_opp_client_push_finished_cb() will be called when the push request is finished.
+ * @param[in] remote_address The remote address
+ * @param[in] responded_cb The callback called when OPP server responds to the push request
+ * @param[in] progress_cb The callback called when each file is being transfered
+ * @param[in] finished_cb The callback called when the push request is finished
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOW_IN_PROGRESS Operation now in progress
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_opp_client_initialize()
+ * @see bt_opp_client_cancel_push
+ */
+int bt_opp_client_push_files(const char *remote_address, bt_opp_client_push_responded_cb responded_cb,
+ bt_opp_client_push_progress_cb progress_cb, bt_opp_client_push_finished_cb finished_cb, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_CLIENT_MODULE
+ * @brief Cancels the push request in progress, asynchronously.
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre bt_opp_client_push_files() must be called.
+ * @post bt_opp_client_push_finished_cb() will be invoked with result #BT_ERROR_CANCELLED,
+ * which is a parameter of bt_opp_client_push_files().
+ * @see bt_opp_client_initialize()
+ * @see bt_opp_client_push_files()
+ */
+int bt_opp_client_cancel_push(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_HID_MODULE
+ * @brief Initializes the Bluetooth HID(Human Interface Device) Host.
+ * @since_tizen 2.3.1
+ * @remarks This function must be called before Bluetooth HID Host starts. \n
+ * You must free all resources of the Bluetooth service by calling bt_hid_host_deinitialize()
+ * if Bluetooth HID Host service is no longer needed.
+ * @param[in] connection_cb The callback called when the connection state is changed
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @see bt_initialize()
+ * @see bt_hid_host_deinitialize()
+ */
+int bt_hid_host_initialize(bt_hid_host_connection_state_changed_cb connection_cb, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_HID_MODULE
+ * @brief Deinitializes the Bluetooth HID(Human Interface Device) Host.
+ * @since_tizen 2.3.1
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth HID service must be initialized with bt_hid_host_initialize().
+ * @see bt_hid_host_initialize()
+ */
+int bt_hid_host_deinitialize(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_HID_MODULE
+ * @brief Connects the remote device with the HID(Human Interface Device) service, asynchronously.
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @param[in] remote_address The remote address
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The local device must be bonded with the remote device by bt_device_create_bond().
+ * @pre The Bluetooth HID service must be initialized with bt_hid_host_initialize().
+ * @post bt_hid_host_connection_state_changed_cb() will be invoked.
+ * @see bt_hid_host_disconnect()
+ * @see bt_hid_host_connection_state_changed_cb()
+ */
+int bt_hid_host_connect(const char *remote_address);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_HID_MODULE
+ * @brief Disconnects the remote device with the HID(Human Interface Device) service, asynchronously.
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @param[in] remote_address The remote address
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device must be connected by bt_hid_host_connect().
+ * @post bt_hid_host_connection_state_changed_cb() will be invoked.
+ * @see bt_hid_host_connect()
+ * @see bt_hid_host_connection_state_changed_cb()
+ */
+int bt_hid_host_disconnect(const char *remote_address);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_MODULE
+ * @brief Initializes the Bluetooth profiles related with audio.
+ * @since_tizen 2.3.1
+ * @remarks This function must be called before Bluetooth profiles related with audio starts. \n
+ * You must free all resources of the this service by calling bt_audio_deinitialize()
+ * if Bluetooth profiles related with audio service is no longer needed.
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @see bt_initialize()
+ * @see bt_audio_deinitialize()
+ */
+int bt_audio_initialize(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_MODULE
+ * @brief Deinitializes the Bluetooth profiles related with audio.
+ * @since_tizen 2.3.1
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @see bt_audio_initialize()
+ */
+int bt_audio_deinitialize(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_MODULE
+ * @brief Connects the remote device with the given audio profile, asynchronously.
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @details If you input type as #BT_AUDIO_PROFILE_TYPE_ALL and connection request succeeds, then bt_audio_connection_state_changed_cb() will be called twice
+ * when #BT_AUDIO_PROFILE_TYPE_HSP_HFP is connected and #BT_AUDIO_PROFILE_TYPE_A2DP is connected.
+ * @param[in] remote_address The remote address
+ * @param[in] type The type of audio profile
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @pre The local device must be bonded with the remote device by bt_device_create_bond().
+ * @post bt_audio_connection_state_changed_cb() will be invoked.
+ * @see bt_audio_disconnect()
+ * @see bt_audio_connection_state_changed_cb()
+ */
+int bt_audio_connect(const char *remote_address, bt_audio_profile_type_e type);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_MODULE
+ * @brief Disconnects the remote device with the given audio profile, asynchronously.
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @details If you input type as #BT_AUDIO_PROFILE_TYPE_ALL and disconnection request succeeds, then bt_audio_connection_state_changed_cb() will be called twice
+ * when #BT_AUDIO_PROFILE_TYPE_HSP_HFP is disconnected and #BT_AUDIO_PROFILE_TYPE_A2DP is disconnected.
+ * @param[in] remote_address The remote address
+ * @param[in] type The type of audio profile
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device must be connected by bt_audio_connect().
+ * @post bt_audio_connection_state_changed_cb() will be invoked.
+ * @see bt_audio_connect()
+ * @see bt_audio_connection_state_changed_cb()
+ */
+int bt_audio_disconnect(const char *remote_address, bt_audio_profile_type_e type);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_MODULE
+ * @brief Registers a callback function that will be invoked when the connection state is changed.
+ * @since_tizen 2.3.1
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @see bt_audio_initialize()
+ * @see bt_audio_connection_state_changed_cb()
+ */
+int bt_audio_set_connection_state_changed_cb(bt_audio_connection_state_changed_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_MODULE
+ * @brief Unregisters a callback function that will be invoked when the connection state is changed.
+ * @since_tizen 2.3.1
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @see bt_audio_initialize()
+ * @see bt_audio_connection_state_changed_cb()
+ * @see bt_audio_set_connection_state_changed_cb()
+ */
+int bt_audio_unset_connection_state_changed_cb(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Opens a SCO(Synchronous Connection Oriented link) to connected remote device, asynchronously.
+ * @since_tizen 2.3.1
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_ALREADY_DONE Operation is already done
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio device must be connected with bt_audio_connect().
+ * @post bt_ag_sco_state_changed_cb() will be invoked.
+ * @see bt_ag_close_sco()
+ * @see bt_ag_sco_state_changed_cb()
+ * @see bt_audio_connect()
+ */
+int bt_ag_open_sco(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Closes an opened SCO(Synchronous Connection Oriented link), asynchronously.
+ * @since_tizen 2.3.1
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The SCO must be opened with bt_ag_open_sco().
+ * @post bt_ag_sco_state_changed_cb() will be invoked.
+ * @see bt_ag_open_sco()
+ * @see bt_ag_sco_state_changed_cb()
+ */
+int bt_ag_close_sco(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Checks whether an opened SCO(Synchronous Connection Oriented link) exists or not.
+ * @since_tizen 2.3.1
+ * @param[out] opened The SCO status: (@c true = opened, @c false = not opened)
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @see bt_ag_open_sco()
+ * @see bt_ag_close_sco()
+ */
+int bt_ag_is_sco_opened(bool *opened);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Registers a callback function that will be invoked when the SCO(Synchronous Connection Oriented link) state is changed.
+ * @since_tizen 2.3.1
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @see bt_audio_initialize()
+ * @see bt_ag_sco_state_changed_cb()
+ * @see bt_ag_unset_sco_state_changed_cb()
+ */
+int bt_ag_set_sco_state_changed_cb(bt_ag_sco_state_changed_cb callback, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Unregisters a callback function that will be invoked when the SCO(Synchronous Connection Oriented link) state is changed.
+ * @since_tizen 2.3.1
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @see bt_audio_initialize()
+ * @see bt_ag_sco_state_changed_cb()
+ * @see bt_ag_set_sco_state_changed_cb()
+ */
+int bt_ag_unset_sco_state_changed_cb(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Notifies the call event to the remote bluetooth device.
+ * @since_tizen 2.3.1
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @remarks Before notifying #BT_AG_CALL_EVENT_ANSWERED or #BT_AG_CALL_EVENT_DIALING, you should open SCO(Synchronous Connection Oriented link)
+ * if Bluetooth Hands-Free need SCO connection.
+ * @param[in] event The call event
+ * @param[in] call_id The call ID
+ * @param[in] phone_number The phone number. You must set this value in case of #BT_AG_CALL_EVENT_DIALING and #BT_AG_CALL_EVENT_INCOMING.
+ * In other cases, this value can be NULL.
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio device must be connected with bt_audio_connect().
+ * @see bt_audio_connect()
+ */
+int bt_ag_notify_call_event(bt_ag_call_event_e event, unsigned int call_id, const char *phone_number);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Notifies the call list to the remote bluetooth device.
+ * @since_tizen 2.3.1
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] list The call list
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio device must be connected with bt_audio_connect().
+ * @see bt_audio_connect()
+ */
+int bt_ag_notify_call_list(bt_call_list_h list);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Notifies the state of voice recognition.
+ * @since_tizen 2.3.1
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] state The state of voice recognition: (@c true = enabled, @c false = disabled)
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio device must be connected with bt_audio_connect().
+ * @see bt_audio_connect()
+ */
+int bt_ag_notify_voice_recognition_state(bool state);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Registers a callback function that will be invoked when a call handling event happened from Hands-Free.
+ * @since_tizen 2.3.1
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @see bt_audio_initialize()
+ * @see bt_ag_call_handling_event_cb()
+ * @see bt_ag_unset_call_handling_event_cb()
+ */
+int bt_ag_set_call_handling_event_cb(bt_ag_call_handling_event_cb callback, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Unregisters a callback function that will be invoked when a call handling event happened from Hands-Free.
+ * @since_tizen 2.3.1
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @see bt_audio_initialize()
+ * @see bt_ag_call_handling_event_cb()
+ * @see bt_ag_set_call_handling_event_cb()
+ */
+int bt_ag_unset_call_handling_event_cb(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Registers a callback function that will be invoked when a multi call handling event happened from Hands-Free.
+ * @since_tizen 2.3.1
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @see bt_audio_initialize()
+ * @see bt_ag_multi_call_handling_event_cb()
+ * @see bt_ag_unset_multi_call_handling_event_cb()
+ */
+int bt_ag_set_multi_call_handling_event_cb(bt_ag_multi_call_handling_event_cb callback, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Unregisters a callback function that will be invoked when a multi call handling event happened from Hands-Free.
+ * @since_tizen 2.3.1
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @see bt_audio_initialize()
+ * @see bt_ag_multi_call_handling_event_cb()
+ * @see bt_ag_set_multi_call_handling_event_cb()
+ */
+int bt_ag_unset_multi_call_handling_event_cb(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Registers a callback function that will be invoked when a DTMF(Dual Tone Multi Frequency) is transmitted from Hands-Free.
+ * @since_tizen 2.3.1
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @see bt_audio_initialize()
+ * @see bt_ag_dtmf_transmitted_cb()
+ * @see bt_ag_unset_dtmf_transmitted_cb()
+ */
+int bt_ag_set_dtmf_transmitted_cb(bt_ag_dtmf_transmitted_cb callback, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Unregisters a callback function that will be invoked when a DTMF(Dual Tone Multi Frequency) is transmitted from Hands-Free.
+ * @since_tizen 2.3.1
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @see bt_audio_initialize()
+ * @see bt_ag_dtmf_transmitted_cb()
+ * @see bt_ag_set_dtmf_transmitted_cb()
+ */
+int bt_ag_unset_dtmf_transmitted_cb(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Notifies the speaker gain to the remote device.
+ * @since_tizen 2.3.1
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @details This function sends a signal to the remote device. This signal has the gain value.
+ * @a gain is represented on a scale from 0 to 15. This value is absolute value relating to a particular volume level.
+ * When the speaker gain of remote device is changed to the requested gain, bt_audio_speaker_gain_changed_cb() will be called.
+ * @param[in] gain The gain of speaker (0 ~ 15)
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device is connected by bt_audio_connect() with #BT_AUDIO_PROFILE_TYPE_HSP_HFP service.
+ * @see bt_ag_get_speaker_gain()
+ * @see bt_ag_set_speaker_gain_changed_cb()
+ * @see bt_ag_unset_speaker_gain_changed_cb()
+ */
+int bt_ag_notify_speaker_gain(int gain);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Gets the current speaker gain of the remote device.
+ * @since_tizen 2.3.1
+ * @details This function gets the value of speaker gain of the remote device.
+ * @a gain is represented on a scale from 0 to 15. This value is absolute value relating to a particular volume level.
+ * @param[out] gain The gain of speaker (0 ~ 15)
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device is connected by bt_audio_connect() with #BT_AUDIO_PROFILE_TYPE_HSP_HFP service.
+ * @see bt_ag_notify_speaker_gain()
+ * @see bt_ag_set_speaker_gain_changed_cb()
+ * @see bt_ag_unset_speaker_gain_changed_cb()
+ */
+int bt_ag_get_speaker_gain(int *gain);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Checks whether the remoted device enables NREC(Noise Reduction and Echo Canceling) or not.
+ * @since_tizen 2.3.1
+ * @param[out] enabled The NREC status: (@c true = enabled, @c false = not enabled)
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device is connected by bt_audio_connect() with #BT_AUDIO_PROFILE_TYPE_HSP_HFP service.
+ * @see bt_audio_connect()
+ */
+int bt_ag_is_nrec_enabled(bool *enabled);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Registers a callback function that will be invoked when the speaker gain of the remote device is changed.
+ * @since_tizen 2.3.1
+ * @details This function let you know the change of the speaker gain of the remote device.
+ * @a gain is represented on a scale from 0 to 15. This value is absolute value relating to a particular volume level.
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @see bt_audio_initialize()
+ * @see bt_ag_unset_speaker_gain_changed_cb()
+ */
+int bt_ag_set_speaker_gain_changed_cb(bt_ag_speaker_gain_changed_cb callback, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Unregisters a callback function that will be invoked when the speaker gain of the remote device is changed.
+ * @since_tizen 2.3.1
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @see bt_audio_initialize()
+ * @see bt_ag_set_speaker_gain_changed_cb()
+ */
+int bt_ag_unset_speaker_gain_changed_cb(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Registers a callback function that will be invoked when the microphone gain of the remote device is changed.
+ * @since_tizen 2.3.1
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @see bt_audio_initialize()
+ * @see bt_ag_unset_microphone_gain_changed_cb()
+ */
+int bt_ag_set_microphone_gain_changed_cb(bt_ag_microphone_gain_changed_cb callback, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Unregisters a callback function that will be invoked when the microphone gain of the remote device is changed.
+ * @since_tizen 2.3.1
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @see bt_audio_initialize()
+ * @see bt_ag_set_microphone_gain_changed_cb()
+ */
+int bt_ag_unset_microphone_gain_changed_cb(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_CALL_MODULE
+ * @brief Creates a handle of call list.
+ * @since_tizen 2.3.1
+ * @param[out] list The handle of call list
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_call_list_destroy()
+ */
+int bt_call_list_create(bt_call_list_h *list);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_CALL_MODULE
+ * @brief Destroys the handle of call list.
+ * @since_tizen 2.3.1
+ * @param[in] list The handle of call list
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_call_list_create()
+ */
+int bt_call_list_destroy(bt_call_list_h list);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_CALL_MODULE
+ * @brief Resets the handle of call list.
+ * @since_tizen 2.3.1
+ * @param[in] list The handle of call list
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_call_list_create()
+ */
+int bt_call_list_reset(bt_call_list_h list);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_CALL_MODULE
+ * @brief Adds a call to the handle of call list.
+ * @since_tizen 2.3.1
+ * @param[in] list The handle of call list
+ * @param[in] call_id The call ID
+ * @param[in] state The state of audio gate call
+ * @param[in] phone_number The phone number. You must set this value in case of #BT_AG_CALL_EVENT_DIALING and #BT_AG_CALL_EVENT_INCOMING.
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_call_list_create()
+ */
+int bt_call_list_add(bt_call_list_h list, unsigned int call_id, bt_ag_call_state_e state, const char *phone_number);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Initializes the Bluetooth AVRCP(Audio/Video Remote Control Profile) service.
+ * @since_tizen 2.3.1
+ * @remarks This function must be called before Bluetooth AVRCP service. \n
+ * You must free all resources of the this service by calling bt_avrcp_target_deinitialize()
+ * if Bluetooth AVRCP service is no longer needed.
+ * @param[in] callback The callback function called when the connection state is changed
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @see bt_initialize()
+ * @see bt_avrcp_target_deinitialize()
+ */
+int bt_avrcp_target_initialize(bt_avrcp_target_connection_state_changed_cb callback, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Deinitializes the Bluetooth AVRCP(Audio/Video Remote Control Profile) service.
+ * @since_tizen 2.3.1
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio service must be initialized with bt_avrcp_target_initialize().
+ * @see bt_avrcp_target_initialize()
+ */
+int bt_avrcp_target_deinitialize(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Notifies the equalize state to the remote device.
+ * @since_tizen 2.3.1
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] state The state of equalizer
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device must be connected.
+ * @see bt_avrcp_target_connection_state_changed_cb()
+ * @see bt_avrcp_target_initialize()
+ */
+int bt_avrcp_target_notify_equalizer_state(bt_avrcp_equalizer_state_e state);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Notifies the repeat mode to the remote device.
+ * @since_tizen 2.3.1
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] mode The repeat mode
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device must be connected.
+ * @see bt_avrcp_target_connection_state_changed_cb()
+ * @see bt_avrcp_target_initialize()
+ */
+int bt_avrcp_target_notify_repeat_mode(bt_avrcp_repeat_mode_e mode);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Notifies the shuffle mode to the remote device.
+ * @since_tizen 2.3.1
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] mode The repeat mode
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device must be connected.
+ * @see bt_avrcp_target_connection_state_changed_cb()
+ * @see bt_avrcp_target_initialize()
+ */
+int bt_avrcp_target_notify_shuffle_mode(bt_avrcp_shuffle_mode_e mode);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Notifies the scan mode to the remote device.
+ * @since_tizen 2.3.1
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] mode The scan mode
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device must be connected.
+ * @see bt_avrcp_target_connection_state_changed_cb()
+ * @see bt_avrcp_target_initialize()
+ */
+int bt_avrcp_target_notify_scan_mode(bt_avrcp_scan_mode_e mode);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Notifies the player state to the remote device.
+ * @since_tizen 2.3.1
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] state The player state
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device must be connected.
+ * @see bt_avrcp_target_connection_state_changed_cb()
+ * @see bt_avrcp_target_initialize()
+ */
+int bt_avrcp_target_notify_player_state(bt_avrcp_player_state_e state);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Notifies the current position of song to the remote device.
+ * @since_tizen 2.3.1
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] position The current position in milliseconds
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device must be connected.
+ * @see bt_avrcp_target_connection_state_changed_cb()
+ * @see bt_avrcp_target_initialize()
+ */
+int bt_avrcp_target_notify_position(unsigned int position);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Notifies the track to the remote device.
+ * @since_tizen 2.3.1
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] title The title of track
+ * @param[in] artist The artist of track
+ * @param[in] album The album of track
+ * @param[in] genre The genre of track
+ * @param[in] track_num The track number
+ * @param[in] total_tracks The number of all tracks
+ * @param[in] duration The duration of track in milliseconds
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device must be connected.
+ * @see bt_avrcp_target_connection_state_changed_cb()
+ * @see bt_avrcp_target_initialize()
+ */
+int bt_avrcp_target_notify_track(const char *title, const char *artist, const char *album, const char *genre, unsigned int track_num, unsigned int total_tracks, unsigned int duration);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Registers a callback function that will be invoked when the equalizer state is changed by the remote control device.
+ * @since_tizen 2.3.1
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized by bt_initialize().
+ * @see bt_initialize()
+ * @see bt_avrcp_unset_equalizer_state_changed_cb()
+ */
+int bt_avrcp_set_equalizer_state_changed_cb(bt_avrcp_equalizer_state_changed_cb callback, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Unregisters a callback function that will be invoked when the equalizer state is changed by the remote control device.
+ * @since_tizen 2.3.1
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized by bt_initialize().
+ * @see bt_initialize()
+ * @see bt_avrcp_set_equalizer_state_changed_cb()
+ */
+int bt_avrcp_unset_equalizer_state_changed_cb(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Registers a callback function that will be invoked when the repeat mode is changed by the remote control device.
+ * @since_tizen 2.3.1
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized by bt_initialize().
+ * @see bt_initialize()
+ * @see bt_avrcp_unset_repeat_mode_changed_cb()
+ */
+int bt_avrcp_set_repeat_mode_changed_cb(bt_avrcp_repeat_mode_changed_cb callback, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Unregisters a callback function that will be invoked when the repeat mode is changed by the remote control device.
+ * @since_tizen 2.3.1
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized by bt_initialize().
+ * @see bt_initialize()
+ * @see bt_avrcp_set_repeat_mode_changed_cb()
+ */
+int bt_avrcp_unset_repeat_mode_changed_cb(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Registers a callback function that will be invoked when the shuffle mode is changed by the remote control device.
+ * @since_tizen 2.3.1
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized by bt_initialize().
+ * @see bt_initialize()
+ * @see bt_avrcp_unset_shuffle_mode_changed_cb()
+ */
+int bt_avrcp_set_shuffle_mode_changed_cb(bt_avrcp_shuffle_mode_changed_cb callback, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Unregisters a callback function that will be invoked when the shuffle mode is changed by the remote control device.
+ * @since_tizen 2.3.1
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized by bt_initialize().
+ * @see bt_initialize()
+ * @see bt_avrcp_set_shuffle_mode_changed_cb()
+ */
+int bt_avrcp_unset_shuffle_mode_changed_cb(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Registers a callback function that will be invoked when the scan mode is changed by the remote control device.
+ * @since_tizen 2.3.1
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized by bt_initialize().
+ * @see bt_initialize()
+ * @see bt_avrcp_unset_scan_mode_changed_cb()
+ */
+int bt_avrcp_set_scan_mode_changed_cb(bt_avrcp_scan_mode_changed_cb callback, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Unregisters a callback function that will be invoked when the scan mode is changed by the remote control device.
+ * @since_tizen 2.3.1
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized by bt_initialize().
+ * @see bt_initialize()
+ * @see bt_avrcp_set_scan_mode_changed_cb()
+ */
+int bt_avrcp_unset_scan_mode_changed_cb(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_HDP_MODULE
+ * @brief Registers an application that acts as the @a Sink role of HDP(Health Device Profile).
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @remarks The @a app_id must be released with free() by you.
+ * @param[in] data_type The data type of MDEP. This value is defined in ISO/IEEE 11073-20601 spec.
+ * For example, pulse oximeter is 0x1004 and blood pressure monitor is 0x1007.
+ * @param[out] app_id The ID of application
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @see bt_hdp_unregister_sink_app()
+ */
+int bt_hdp_register_sink_app(unsigned short data_type, char **app_id);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_HDP_MODULE
+ * @brief Unregisters the given application that acts as the @a Sink role of HDP(Health Device Profile).
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @param[in] app_id The ID of application
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_hdp_register_sink_app()
+ */
+int bt_hdp_unregister_sink_app(const char *app_id);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_HDP_MODULE
+ * @brief Connects the remote device which acts as @a Source role, asynchronously.
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @param[in] remote_address The remote address
+ * @param[in] app_id The ID of application
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Sink role of HDP must be registered with bt_hdp_register_sink_app().
+ * @pre The local device must be bonded with the remote device by bt_device_create_bond().
+ * @post bt_hdp_connected_cb() will be invoked.
+ * @see bt_hdp_disconnect()
+ * @see bt_hdp_set_connection_state_changed_cb()
+ * @see bt_hdp_unset_connection_state_changed_cb()
+ */
+int bt_hdp_connect_to_source(const char *remote_address, const char *app_id);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_HDP_MODULE
+ * @brief Disconnects the remote device, asynchronously.
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @param[in] remote_address The remote address
+ * @param[in] channel The connected data channel
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device must be connected.
+ * @post bt_hdp_disconnected_cb() will be invoked.
+ * @see bt_hdp_set_connection_state_changed_cb()
+ * @see bt_hdp_unset_connection_state_changed_cb()
+ */
+int bt_hdp_disconnect(const char *remote_address, unsigned int channel);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_HDP_MODULE
+ * @brief Sends the data to the remote device.
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @param[in] channel The connected data channel
+ * @param[in] data The data to send
+ * @param[in] size The size of data to send (byte)
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device must be connected.
+ * @see bt_hdp_data_received_cb()
+ * @see bt_hdp_set_data_received_cb()
+ * @see bt_hdp_unset_data_received_cb()
+ */
+int bt_hdp_send_data(unsigned int channel, const char *data, unsigned int size);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_HDP_MODULE
+ * @brief Registers a callback function that will be invoked when the connection state is changed.
+ * @since_tizen 2.3.1
+ * @param[in] connected_cb The callback function called when a connection is established
+ * @param[in] disconnected_cb The callback function called when a connection is disconnected
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @see bt_hdp_unset_connection_state_changed_cb()
+ */
+int bt_hdp_set_connection_state_changed_cb(bt_hdp_connected_cb connected_cb, bt_hdp_disconnected_cb disconnected_cb, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_HDP_MODULE
+ * @brief Unregisters a callback function that will be invoked when the connection state is changed.
+ * @since_tizen 2.3.1
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @see bt_hdp_set_connection_state_changed_cb()
+ */
+int bt_hdp_unset_connection_state_changed_cb(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_HDP_MODULE
+ * @brief Registers a callback function that will be invoked when you receive the data.
+ * @since_tizen 2.3.1
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @see bt_hdp_unset_data_received_cb()
+ */
+int bt_hdp_set_data_received_cb(bt_hdp_data_received_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_HDP_MODULE
+ * @brief Unregisters a callback function that will be invoked when you receive the data.
+ * @since_tizen 2.3.1
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @see bt_hdp_set_data_received_cb()
+ */
+int bt_hdp_unset_data_received_cb(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Gets the value of a characteristic or descriptor's GATT handle
+ * @since_tizen 2.3.1
+ *
+ * @remarks @a value must be released using free(). \n
+ * When @a gatt_handle is associated with bt_gatt_client_h, bt_gatt_client_read_value() must be used prior to this function \n
+ * in order to get the remote device's current value.
+ *
+ * @param[in] gatt_handle The handle of a characteristic or descriptor
+ * @param[out] value The value of @a gatt_handle. It is a byte stream type.
+ * @param[out] value_length The length of @a value
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ */
+int bt_gatt_get_value(bt_gatt_h gatt_handle, char **value, int *value_length);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Gets the value of a characteristic or descriptor's GATT handle as an integer type
+ * @since_tizen 2.3.1
+ *
+ * @remarks This function returns a locally saved value in @a gatt_handle. \n
+ * When @a gatt_handle is associated with bt_gatt_client_h, bt_gatt_client_read_value() must be used prior to this function \n
+ * in order to get the remote device's current value.
+ *
+ * @param[in] gatt_handle The handle of a characteristic or descriptor
+ * @param[in] type The type of a saved value in @a gatt_handle
+ * @param[in] offset The offset from where a value will be read from @a gatt_handle as an integer type
+ * @param[out] value The integer type's value of @a gatt_handle
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ */
+int bt_gatt_get_int_value(bt_gatt_h gatt_handle, bt_data_type_int_e type,
+ int offset, int *value);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Gets the value of a characteristic or descriptor's GATT handle as a float type
+ * @since_tizen 2.3.1
+ *
+ * @remarks This function returns a locally saved value in @a gatt_handle. \n
+ * When @a gatt_handle is associated with bt_gatt_client_h, bt_gatt_client_read_value() must be used prior to this function \n
+ * in order to get the remote device's current value.
+ *
+ * @param[in] gatt_handle The handle of a characteristic or descriptor
+ * @param[in] type The type of a saved value in @a gatt_handle
+ * @param[in] offset The offset from where a value will be read from @a gatt_handle as an integer type
+ * @param[out] value The float type's value of @a gatt_handle
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ */
+int bt_gatt_get_float_value(bt_gatt_h gatt_handle, bt_data_type_float_e type,
+ int offset, float *value);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Updates the value of a characteristic or descriptor's GATT handle
+ * @since_tizen 2.3.1
+ *
+ * @remarks This function updates a value of @a gatt_handle locally. \n
+ * When @a gatt_handle is associated with bt_gatt_client_h, bt_gatt_client_write_value() can be used after this function \n
+ * in order to update the remote device's value. \n
+ *
+ * @param[in] gatt_handle The handle of a characteristic or descriptor
+ * @param[in] value The value to be updated
+ * @param[in] value_length The length of @a value
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ */
+int bt_gatt_set_value(bt_gatt_h gatt_handle, const char *value, int value_length);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Updates the value of a characteristic or descriptor's GATT handle using a integer type's value
+ * @since_tizen 2.3.1
+ *
+ * @remarks This function updates a value of @a gatt_handle locally. \n
+ * When @a gatt_handle is associated with bt_gatt_client_h, bt_gatt_client_write_value() can be used after this function \n
+ * in order to update the remote device's value. \n
+ *
+ * @param[in] gatt_handle The handle of a characteristic or descriptor
+ * @param[in] type @a value will be saved in @a gatt_handle as this type
+ * @param[in] value The integer type's value to be updated
+ * @param[in] offset The offset from where @a value will be saved in @a gatt_handle
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ */
+int bt_gatt_set_int_value(bt_gatt_h gatt_handle, bt_data_type_int_e type,
+ int value, int offset);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Updates the value of a characteristic or descriptor's GATT handle using a float type's value
+ * @since_tizen 2.3.1
+ *
+ * @remarks This function updates a value of @a gatt_handle locally. \n
+ * When @a gatt_handle is associated with bt_gatt_client_h, bt_gatt_client_write_value() can be used after this function \n
+ * in order to update the remote device's value. \n
+ *
+ * @param[in] gatt_handle The handle of a characteristic or descriptor
+ * @param[in] type @a mantissa and @a exponent will be saved in @a gatt_handle as this type
+ * @param[in] mantissa The mantissa of float type's value to be updated
+ * @param[in] exponent The exponent of float type's value to be updated
+ * @param[in] offset The offset from where @a mantissa and @a exponent will be saved in @a gatt_handle
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ */
+int bt_gatt_set_float_value(bt_gatt_h gatt_handle, bt_data_type_float_e type,
+ int mantissa, int exponent, int offset);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Gets the UUID of a service, characteristic or descriptor's GATT handle
+ * @since_tizen 2.3.1
+ *
+ * @remarks @a uuid must be released using free(). \n
+ * 16-bit UUID or 128-bit UUID is supported. (e.g. 2A19, 00002A19-0000-1000-8000-00805F9B34FB)
+ *
+ * @param[in] gatt_handle The handle of a service, characteristic or descriptor
+ * @param[out] uuid The string of the UUID of @a gatt_handle
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ */
+int bt_gatt_get_uuid(bt_gatt_h gatt_handle, char **uuid);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Gets the type of GATT handle
+ * @since_tizen 2.3.1
+ *
+ * @param[in] gatt_handle The GATT handle
+ * @param[out] gatt_type The type of @a gatt_handle
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ */
+int bt_gatt_get_type(bt_gatt_h gatt_handle, bt_gatt_type_e *gatt_type);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Gets the GATT client handle which the specified service belongs to
+ * @since_tizen 2.3.1
+ *
+ * @remark This function doesn't allocate new memory for GATT client handle.
+ * The returned GATT client handle is the same one which was got from bt_gatt_client_create().
+ * So if it is destroyed by bt_gatt_client_destroy(), all related GATT handles are freed also.
+ *
+ * @param[in] service The service's GATT handle
+ * @param[out] client The GATT client handle which @a service belongs to
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_client_create()
+ */
+int bt_gatt_service_get_client(bt_gatt_h service, bt_gatt_client_h *client);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Gets a characteristic's GATT handle which has specific UUID
+ * @since_tizen 2.3.1
+ *
+ * @remark The returned GATT handle must not be freed by application.
+ * It will be freed when an associated client is destroyed by bt_gatt_client_destroy().
+ * If there are multiple characteristics which have same UUID, only the first matched one will be returned.
+ *
+ * @param[in] service The service's GATT handle
+ * @param[in] uuid The characteristic's GATT handle which has this UUID will be returned if it exists
+ * @param[out] characteristic The characteristic's GATT handle which has @a uuid if it exists
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NO_DATA No data available
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ */
+int bt_gatt_service_get_characteristic(bt_gatt_h service, const char *uuid,
+ bt_gatt_h *characteristic);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Invokes @a callback function on each characteristic that belongs to the specified service
+ * @since_tizen 2.3.1
+ *
+ * @param[in] service The service's GATT handle
+ * @param[in] callback The function to be invoked on each characteristic
+ * @param[in] user_data The user data to be passed to @a callback function
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_foreach_cb()
+ */
+int bt_gatt_service_foreach_characteristics(bt_gatt_h service,
+ bt_gatt_foreach_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Gets an included service's GATT handle which has specific UUID
+ * @since_tizen 2.3.1
+ *
+ * @remark The returned GATT handle must not be freed by application.
+ * It will be freed when an associated client is destroyed by bt_gatt_client_destroy().
+ * If there are multiple included services which have same UUID, only the first matched one will be returned.
+ *
+ * @param[in] service The service's GATT handle
+ * @param[in] uuid The included service's GATT handle which has this UUID will be returned if it exists
+ * @param[out] included_service The included service's GATT handle which has @a uuid if it exists
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NO_DATA No data available
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ */
+int bt_gatt_service_get_included_service(bt_gatt_h service, const char *uuid,
+ bt_gatt_h *included_service);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Invokes @a callback function on each included service that belongs to the specified service
+ * @since_tizen 2.3.1
+ *
+ * @param[in] service The service's GATT handle
+ * @param[in] callback The function to be invoked on each included service
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_foreach_cb()
+ */
+int bt_gatt_service_foreach_included_services(bt_gatt_h service,
+ bt_gatt_foreach_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Gets the service's GATT handle which the specified characteristic belongs to
+ * @since_tizen 2.3.1
+ *
+ * @remark The returned GATT handle must not be freed by application.
+ * It will be freed when an associated client is destroyed by bt_gatt_client_destroy().
+ *
+ * @param[in] characteristic The characteristic's GATT handle
+ * @param[out] service The service's GATT handle which @a characteristic belongs to
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ */
+int bt_gatt_characteristic_get_service(bt_gatt_h characteristic, bt_gatt_h *service);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Gets the properties which a characteristic's GATT handle has
+ * @since_tizen 2.3.1
+ *
+ * @param[in] characteristic The characteristic's GATT handle
+ * @param[out] properties The properties which a characteristic's GATT handle has
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_property_e
+ */
+int bt_gatt_characteristic_get_properties(bt_gatt_h characteristic, int *properties);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Gets the write type of the specified characteristic
+ * @since_tizen 2.3.1
+ *
+ * @param[in] characteristic The characteristic's GATT handle
+ * @param[out] write_type The write type of the specified characteristic
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_write_type_e
+ */
+int bt_gatt_characteristic_get_write_type(bt_gatt_h characteristic,
+ bt_gatt_write_type_e *write_type);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Updates the write type of the specified charateristic
+ * @since_tizen 2.3.1
+ *
+ * @param[in] characteristic The characteristic's GATT handle
+ * @param[in] write_type The write type to be updated
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_client_write_value()
+ * @see bt_gatt_write_type_e
+ */
+int bt_gatt_characteristic_set_write_type(bt_gatt_h characteristic,
+ bt_gatt_write_type_e write_type);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Gets a descriptor's GATT handle which has specific UUID
+ * @since_tizen 2.3.1
+ *
+ * @remark The returned GATT handle must not be freed by application.
+ * It will be freed when an associated client is destroyed by bt_gatt_client_destroy().
+ * If there are multiple descriptors which have same UUID, only the first matched one will be returned.
+ *
+ * @param[in] characteristic The characteristic's GATT handle
+ * @param[in] uuid The descriptor's GATT handle which has this UUID will be returned if it exists
+ * @param[out] descriptor The descriptor's GATT handle which has @a uuid if it exists
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NO_DATA No data available
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ */
+int bt_gatt_characteristic_get_descriptor(bt_gatt_h characteristic, const char *uuid,
+ bt_gatt_h *descriptor);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Invokes @a callback function on each descriptor that belongs to the specified characteristic
+ * @since_tizen 2.3.1
+ *
+ * @param[in] characteristic The characteristic's GATT handle
+ * @param[in] callback The function to be invoked on each descriptor
+ * @param[in] user_data The user data to be passed to @a callback function
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_foreach_cb()
+ */
+int bt_gatt_characteristic_foreach_descriptors(bt_gatt_h characteristic,
+ bt_gatt_foreach_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Gets the characteristic's GATT handle which the specified descriptor belongs to
+ * @since_tizen 2.3.1
+ *
+ * @remark The returned GATT handle must not be freed by application.
+ * It will be freed when an associated client is destroyed by bt_gatt_client_destroy().
+ *
+ * @param[in] descriptor The descriptor's GATT handle
+ * @param[out] characteristic The characteristic's GATT handle which @a descriptor belongs to
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ */
+int bt_gatt_descriptor_get_characteristic(bt_gatt_h descriptor, bt_gatt_h *characteristic);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Creates the GATT client handle
+ * @since_tizen 2.3.1
+ *
+ * @remark The GATT client handle must be freed by bt_gatt_client_destroy() after use
+ *
+ * @param[in] remote_address The address of the remote device
+ * @param[out] client The created GATT client's handle
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #BT_ERROR_ALREADY_DONE Operation is already done
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_client_destroy()
+ */
+int bt_gatt_client_create(const char *remote_address, bt_gatt_client_h *client);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Destroys the GATT client's handle
+ * @since_tizen 2.3.1
+ *
+ * @remark All related service, characteristic and descriptor's GATT handles are freed also
+ *
+ * @param[in] client The GATT client's handle
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_client_create()
+ */
+int bt_gatt_client_destroy(bt_gatt_client_h client);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Gets the address of remote device
+ * @since_tizen 2.3.1
+ *
+ * @param[in] client The created GATT client's handle
+ * @param[out] remote_address The address of the remote device which is associated with @a client
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_client_create()
+ */
+int bt_gatt_client_get_remote_address(bt_gatt_client_h client,
+ char **remote_address);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Reads the value of a characteristic or descriptor from the remote device asynchronously
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @param[in] gatt_handle The GATT handle of a characteristic or descriptor
+ * @param[in] callback When a read request is completed, this callback function will be called
+ * @param[in] user_data The user data to be passed to @a callback function
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOW_IN_PROGRESS Operation now in progress
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_client_create()
+ * @see bt_gatt_client_request_completed_cb()
+ */
+int bt_gatt_client_read_value(bt_gatt_h gatt_handle,
+ bt_gatt_client_request_completed_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Writes the value of a characteristic or descriptor to the remote device asynchronously
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @param[in] gatt_handle The GATT handle of a characteristic or descriptor
+ * @param[in] callback When a write request is completed, this callback function will be called
+ * @param[in] user_data The user data to be passed to @a callback function
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOW_IN_PROGRESS Operation now in progress
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_client_create()
+ * @see bt_gatt_characteristic_set_write_type()
+ * @see bt_gatt_set_value()
+ * @see bt_gatt_set_int_value()
+ * @see bt_gatt_set_float_value()
+ * @see bt_gatt_client_request_completed_cb()
+ */
+int bt_gatt_client_write_value(bt_gatt_h gatt_handle,
+ bt_gatt_client_request_completed_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Registers a callback function to be invoked when the characteristic value is changed on the remote device
+ * @since_tizen 2.3.1
+ *
+ * @param[in] characteristic The characteristic's GATT handle
+ * @param[in] callback The callback to be invoked when the value is changed and it is informed
+ * @param[in] user_data The user data to be passed to @a callback function
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_client_characteristic_value_changed_cb()
+ * @see bt_gatt_client_unset_characteristic_value_change()
+ */
+int bt_gatt_client_set_characteristic_value_changed_cb(bt_gatt_h characteristic,
+ bt_gatt_client_characteristic_value_changed_cb callback,
+ void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Unregisters a callback function to be invoked when the characteristic value is changed on the remote device
+ * @since_tizen 2.3.1
+ *
+ * @param[in] characteristic The characteristic's GATT handle, whose value change will not be informed
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_client_set_characteristic_value_changed_cb()
+ */
+int bt_gatt_client_unset_characteristic_value_changed_cb(bt_gatt_h characteristic);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Gets a service's GATT handle which has specific UUID
+ * @since_tizen 2.3.1
+ *
+ * @remark The returned GATT handle must not be freed by application.
+ * It will be freed when an associated client is destroyed by bt_gatt_client_destroy().
+ * If there are multiple services which have same UUID, only the first matched one will be returned.
+ *
+ * @param[in] client The GATT client's handle
+ * @param[in] uuid The serivce's GATT handle which has this UUID will be returned if it exists
+ * @param[out] service The service's GATT handle which has @a uuid if it exists
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NO_DATA No data available
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ */
+int bt_gatt_client_get_service(bt_gatt_client_h client, const char *uuid,
+ bt_gatt_h *service);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Invokes @a callback function on each service that belongs to the specified GATT client
+ * @since_tizen 2.3.1
+ *
+ * @param[in] client The GATT client's handle
+ * @param[in] callback The function to be invoked on each service
+ * @param[in] user_data The user data to be passed to @a callback function
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_foreach_cb()
+ */
+int bt_gatt_client_foreach_services(bt_gatt_client_h client,
+ bt_gatt_foreach_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Connect to a specific LE based service on a remote bluetooth dievice address, asynchronously.
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @remarks A connection can be disconnected by bt_gatt_disconnect().
+ *
+ * @param[in] address The address of the remote Bluetooth device.
+ * @param[in] auto_connect The flag of the auto connection.
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid paramater
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @pre The remote device must support le connection.
+ * @post This function invokes bt_gatt_connection_state_changed_cb().
+ *
+ * @see bt_initialize()
+ * @see bt_gatt_disconnect()
+ * @see bt_gatt_set_connection_state_changed_cb()
+ * @see bt_gatt_unset_connection_state_changed_cb()
+ * @see bt_gatt_connection_state_changed_cb()
+ */
+int bt_gatt_connect(const char *address, bool auto_connect);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Disconnect to LE connection with the given remote Bluetooth dievice address, asynchronously.
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @param[in] address The address of the remote Bluetooth device
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid paramater
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The connection must be established.
+ * @post This function invokes bt_gatt_connection_state_changed_cb().
+ *
+ * @see bt_initialize()
+ * @see bt_gatt_connect()
+ * @see bt_gatt_set_connection_state_changed_cb()
+ * @see bt_gatt_unset_connection_state_changed_cb()
+ * @see bt_gatt_connection_state_changed_cb()
+ */
+int bt_gatt_disconnect(const char *address);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Registers a callback function that will be invoked when the connection state is changed.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] callback The callback function to register.
+ * @param[in] user_data The user data to be passed to the callback function.
+ *
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid paramater
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_connect()
+ * @see bt_gatt_disconnect()
+ * @see bt_gatt_unset_connection_state_changed_cb()
+ */
+int bt_gatt_set_connection_state_changed_cb(bt_gatt_connection_state_changed_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Unregisters a callback function that will be invoked when the connection state is changed.
+ * @since_tizen 2.3.1
+ *
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_connect()
+ * @see bt_gatt_disconnect()
+ * @see bt_gatt_connection_state_changed_cb()
+ */
+int bt_gatt_unset_connection_state_changed_cb(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PAN_NAP_MODULE
+ * @brief Activates the NAP(Network Access Point).
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_ALREADY_DONE Operation is already done
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED
+ * @see bt_nap_deactivate()
+ */
+int bt_nap_activate(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PAN_NAP_MODULE
+ * @brief Deactivates the NAP(Network Access Point).
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_ALREADY_DONE Operation is already done
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth NAP service must be activated with bt_nap_activate().
+ * @see bt_nap_activate()
+ */
+int bt_nap_deactivate(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PAN_NAP_MODULE
+ * @brief Disconnects the all PANUs(Personal Area Networking User) which are connected to you.
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth NAP service must be activated with bt_nap_activate().
+ * @see bt_nap_activate()
+ */
+int bt_nap_disconnect_all(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PAN_NAP_MODULE
+ * @brief Disconnects the specified PANU(Personal Area Networking User) which is connected to you.
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @param[in] remote_address The remote address
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth NAP service must be activated with bt_nap_activate().
+ * @see bt_nap_activate()
+ */
+int bt_nap_disconnect(const char *remote_address);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PAN_NAP_MODULE
+ * @brief Registers a callback function that will be invoked when the connection state changes.
+ * @since_tizen 2.3.1
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @post bt_nap_connection_state_changed_cb() will be invoked.
+ * @see bt_initialize()
+ * @see bt_nap_connection_state_changed_cb()
+ * @see bt_nap_unset_connection_state_changed_cb()
+ */
+int bt_nap_set_connection_state_changed_cb(bt_nap_connection_state_changed_cb callback, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PAN_NAP_MODULE
+ * @brief Unregisters a callback function that will be invoked when the connection state changes.
+ * @since_tizen 2.3.1
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @post bt_nap_connection_state_changed_cb() will be invoked.
+ * @see bt_initialize()
+ * @see bt_nap_connection_state_changed_cb()
+ * @see bt_nap_set_connection_state_changed_cb()
+ */
+int bt_nap_unset_connection_state_changed_cb(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PAN_PANU_MODULE
+ * @brief Registers a callback function that will be invoked when the connection state changes.
+ * @since_tizen 2.3.1
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @post bt_nap_connection_state_changed_cb() will be invoked.
+ * @see bt_initialize()
+ * @see bt_panu_connection_state_changed_cb()
+ * @see bt_panu_unset_connection_state_changed_cb()
+ */
+int bt_panu_set_connection_state_changed_cb(bt_panu_connection_state_changed_cb callback, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PAN_PANU_MODULE
+ * @brief Unregisters a callback function that will be invoked when the connection state changes.
+ * @since_tizen 2.3.1
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @post bt_nap_connection_state_changed_cb() will be invoked.
+ * @see bt_initialize()
+ * @see bt_panu_connection_state_changed_cb()
+ * @see bt_panu_set_connection_state_changed_cb()
+ */
+int bt_panu_unset_connection_state_changed_cb(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PAN_PANU_MODULE
+ * @brief Connects the remote device with the PAN(Personal Area Networking) service, asynchronously.
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @param[in] remote_address The remote address
+ * @param[in] type The type of PAN service
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The local device must be bonded with the remote device by bt_device_create_bond().
+ * @post bt_panu_connection_state_changed_cb() will be invoked.
+ * @see bt_panu_disconnect()
+ * @see bt_panu_connection_state_changed_cb()
+ */
+int bt_panu_connect(const char *remote_address, bt_panu_service_type_e type);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PAN_PANU_MODULE
+ * @brief Disconnects the remote device with the PAN(Personal Area Networking) service, asynchronously.
+ * @since_tizen 2.3.1
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ * @param[in] remote_address The remote address
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device must be connected by bt_panu_connect().
+ * @post bt_panu_connection_state_changed_cb() will be invoked.
+ * @see bt_panu_connect()
+ * @see bt_panu_connection_state_changed_cb()
+ */
+int bt_panu_disconnect(const char *remote_address);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief update LE connection.
+ * @since_tizen 2.3.1
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized by bt_initialize().
+ * @pre The remote device must be connected with bt_gatt_connect().
+ */
+int bt_device_le_conn_update(const char *device_address,
+ const bt_le_conn_update_s *parameters);
+
+
+/**
+ * @}
+ */
+
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif // __TIZEN_NETWORK_BLUETOOTH_H__
diff --git a/include/wearable/bluetooth_internal.h b/include/wearable/bluetooth_internal.h
new file mode 100644
index 0000000..c00233d
--- /dev/null
+++ b/include/wearable/bluetooth_internal.h
@@ -0,0 +1,2276 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef __TIZEN_NETWORK_BLUETOOTH_INTERNAL_H__
+#define __TIZEN_NETWORK_BLUETOOTH_INTERNAL_H__
+
+#include <glib.h>
+#include "bluetooth_type.h"
+#include "bluetooth_type_internal.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+
+/**
+ * @file bluetooth_internal.h
+ */
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Sets the manufacturer data of local Bluetooth adapter.
+ * @since_tizen 2.3
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ *
+ * @param[in] data The manufacturer specific data of the Bluetooth device.
+ * @param[in] len The length of @a data.Maximaum length is 240 bytes.
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @post bt_adapter_manufacturer_data_changed_cb() will be invoked
+ * if this function returns #BT_ERROR_NONE.
+ *
+ * @see bt_adapter_manufacturer_data_changed_cb
+ * @see bt_adapter_set_manufacturer_data_changed_cb()
+ * @see bt_adapter_unset_manufacturer_data_changed_cb()
+ */
+int bt_adapter_set_manufacturer_data(char *data, int len);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Registers a callback function to be invoked
+ * when the manufacturer data of Bluetooth adapter changes.
+ * @since_tizen 2.3
+ *
+ * @param[in] callback The callback function to invoke
+ * @param[in] user_data The user data to be passed to the callback function
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @post bt_adapter_manufacturer_data_changed_cb() will be invoked.
+ *
+ * @see bt_initialize()
+ * @see bt_adapter_unset_manufacturer_data_changed_cb()
+ */
+int bt_adapter_set_manufacturer_data_changed_cb(
+ bt_adapter_manufacturer_data_changed_cb callback,
+ void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Unregisters the callback function.
+ * @since_tizen 2.3
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_initialize()
+ * @see bt_adapter_set_manufacturer_data_changed_cb()
+ */
+int bt_adapter_unset_manufacturer_data_changed_cb(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Set Bluetooth LE scan mode
+ * @since_tizen 2.3
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] scan_mode The scan mode
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_ENABLED Adapter is not enabled
+ * @retval #BT_ERROR_INVALID_PARAM Parameter is invalid
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @see bt_initialize()
+ */
+int bt_adapter_le_set_scan_mode(bt_adapter_le_scan_mode_e scan_mode);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Creates scan filter to find only LE advertisement which has specific data.
+ * @since_tizen 2.4
+ *
+ * @param[out] scan_filter The handle of scan filter
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_adapter_le_destroy_scan_filter()
+ */
+int bt_adapter_le_create_scan_filter(bt_scan_filter_h *scan_filter);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Destroys scan filter.
+ * @since_tizen 2.4
+ *
+ * @param[in] scan_filter The handle of scan filter
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_adapter_le_create_scan_filter()
+ */
+int bt_adapter_le_destroy_scan_filter(bt_scan_filter_h scan_filter);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Adds the device address to filter advertisements
+ * @since_tizen 2.4
+ *
+ * @param[in] scan_filter The handle of scan filter
+ * @param[in] address The device address to filter advertisements
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ */
+int bt_adapter_le_scan_filter_set_device_address(bt_scan_filter_h scan_filter, const char *address);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Adds the device name to filter advertisements
+ * @since_tizen 2.4
+ *
+ * @param[in] scan_filter The handle of scan filter
+ * @param[in] name The device name to filter advertisements
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ */
+int bt_adapter_le_scan_filter_set_device_name(bt_scan_filter_h scan_filter, const char *name);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Adds the service UUID to filter advertisements
+ * @since_tizen 2.4
+ *
+ * @param[in] scan_filter The handle of scan filter
+ * @param[in] uuid The service UUID to filter advertisements
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ */
+int bt_adapter_le_scan_filter_set_service_uuid(bt_scan_filter_h scan_filter, const char *uuid);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Adds the service uuid and the mask to filter advertisements by partial data
+ * @since_tizen 2.4
+ *
+ * @remarks the length of mask msut be the same with the length of service uuid.
+ *
+ * @param[in] scan_filter The handle of scan filter
+ * @param[in] uuid The service UUID to filter advertisements
+ * @param[in] mask The mask to filter advertisements
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ */
+int bt_adapter_le_scan_filter_set_service_uuid_with_mask(bt_scan_filter_h scan_filter,
+ const char *uuid, const char *mask);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Adds the service solicitation UUID to filter advertisements
+ * @since_tizen 2.4
+ *
+ * @param[in] scan_filter The handle of scan filter
+ * @param[in] uuid The service solicitation UUID to filter advertisements
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ */
+int bt_adapter_le_scan_filter_set_service_solicitation_uuid(bt_scan_filter_h scan_filter, const char *uuid);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Adds the service solicitation uuid and the mask to filter advertisements by partial data
+ * @since_tizen 2.4
+ *
+ * @remarks the length of mask msut be the same with the length of service solicitation uuid.
+ *
+ * @param[in] scan_filter The handle of scan filter
+ * @param[in] uuid The service solicitation UUID to filter advertisements
+ * @param[in] mask The mask to filter advertisements
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ */
+int bt_adapter_le_scan_filter_set_service_solicitation_uuid_with_mask(bt_scan_filter_h scan_filter,
+ const char *uuid, const char *mask);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Adds the service data to filter advertisements
+ * @since_tizen 2.4
+ *
+ * @param[in] scan_filter The handle of scan filter
+ * @param[in] uuid The service UUID to filter advertisements
+ * @param[in] data The service data to filter advertisements
+ * @param[in] data_len The length of the service data
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ */
+int bt_adapter_le_scan_filter_set_service_data(bt_scan_filter_h scan_filter,
+ const char *uuid, const char *data, unsigned int data_len);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Adds the service data and the mask to filter advertisements by partial data
+ * @since_tizen 2.4
+ *
+ * @remarks the length of mask msut be the same with the length of service data.
+ *
+ * @param[in] scan_filter The handle of scan filter
+ * @param[in] uuid The service UUID to filter advertisements
+ * @param[in] data The service data to filter advertisements
+ * @param[in] data_len The length of the service data
+ * @param[in] mask The mask to filter advertisements
+ * @param[in] mask_len The length of the mask to be set.
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ */
+int bt_adapter_le_scan_filter_set_service_data_with_mask(bt_scan_filter_h scan_filter,
+ const char *uuid, const char *data, unsigned int data_len, const char *mask, unsigned int mask_len);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Adds the manufacturer data to filter advertisements
+ * @since_tizen 2.4
+ *
+ * @param[in] scan_filter The handle of scan filter
+ * @param[in] manufacturer_id The manufacturer ID (0x0000 ~ 0xFFFF)
+ * @param[in] data The manufacturer data (byte array)
+ * @param[in] data_len The length of manufacturer data
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ */
+int bt_adapter_le_scan_filter_set_manufacturer_data(bt_scan_filter_h scan_filter,
+ int manufacturer_id, const char *data, unsigned int data_len);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Adds the manufacturer data and the mask to filter advertisements by partial data
+ * @since_tizen 2.4
+ *
+ * @remarks the length of mask msut be the same with the length of service uuid.
+ *
+ * @param[in] scan_filter The handle of scan filter
+ * @param[in] manufacturer_id The manufacturer ID (0x0000 ~ 0xFFFF)
+ * @param[in] data The manufacturer data (byte array)
+ * @param[in] data_len The length of manufacturer data
+ * @param[in] mask The mask to filter advertisements
+ * @param[in] mask_len The length of the mask to be set.
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ */
+int bt_adapter_le_scan_filter_set_manufacturer_data_with_mask(bt_scan_filter_h scan_filter,
+ int manufacturer_id, const char *data, unsigned int data_len, const char *mask, unsigned int mask_len);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Registers the scan filter to use for scanning
+ * @since_tizen 2.4
+ *
+ * @remarks Several scan filters can be registered. And the specific advertisements, satisfy the one of scan filters, will be found.
+ *
+ * @param[in] scan_filter The handle of scan filter
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOW_IN_PROGRESS Scan is in progress
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ */
+int bt_adapter_le_register_scan_filter(bt_scan_filter_h scan_filter);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Unregisters the scan filter to be registered
+ * @since_tizen 2.4
+ *
+ * @param[in] scan_filter The handle of scan filter
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOW_IN_PROGRESS Scan is in progress
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ */
+int bt_adapter_le_unregister_scan_filter(bt_scan_filter_h scan_filter);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Unregisters all scan filters to be registered
+ * @since_tizen 2.4
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOW_IN_PROGRESS Scan is in progress
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ */
+int bt_adapter_le_unregister_all_scan_filters(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Set advertising filter policy to use white list
+ * @since_tizen 2.4
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @param[in] advertiser The handle of advertiser
+ * @param[in] filter_policy The filter policy of advertising
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_NOW_IN_PROGRESS Operation is now in progress
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_adapter_le_start_advertising_new()
+ */
+int bt_adapter_le_set_advertising_filter_policy(bt_advertiser_h advertiser, bt_adapter_le_advertising_filter_policy_e filter_policy);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Gets a connection state
+ * @since_tizen 2.4
+ *
+ * @param[in] remote_address The address of the remote Bluetooth device
+ * @param[in] link_type The link type to get a connection state
+ * @param[out] connected The connection state
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ */
+int bt_device_get_connection_state(const char *remote_address, bt_device_connection_link_type_e link_type, bool *connected);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Registers a rfcomm server socket with a specific UUID. Activation by dbus is possible when the profile is connected.
+ * @since_tizen 2.4
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ *
+ * @remarks A socket can be destroyed by bt_socket_destroy_rfcomm_ex().
+ * Application should call this API to receive a connection event when launched again by dbus.
+ *
+ * @param[in] uuid The UUID of service to provide
+ * @param[in] bus_name bus_name of the application which is provided in service file.
+ * @param[in] object_path dbus of the application
+ * @return 0 on success, otherwise a negative error value.
+ *
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_NOW_IN_PROGRESS Already registered
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ *
+ * @see bt_socket_listen_and_accept_rfcomm_ex()
+ * @see bt_socket_destroy_rfcomm_ex()
+ */
+int bt_socket_create_rfcomm_ex(const char *uuid, const char *bus_name, const char *object_path);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Removes the rfcomm server socket which was created using bt_socket_create_rfcomm_ex().
+ * @since_tizen 2.4
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @remarks If callback function bt_socket_connection_state_changed_cb() is set and the remote Bluetooth device is connected,
+ * then bt_socket_connection_state_changed_cb() will be called when this function is finished successfully.
+ *
+ * @param[in] uuid The UUID (which was created using bt_socket_create_rfcomm()) to destroy
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The socket must be created with bt_socket_create_rfcomm_ex().
+ * @post If callback function bt_socket_connection_state_changed_cb() is set and the remote Bluetooth device is connected,
+ * then bt_socket_connection_state_changed_cb() will be called.
+ * @see bt_socket_create_rfcomm_ex()
+ * @see bt_socket_connection_state_changed_cb()
+ * @see bt_socket_set_connection_state_changed_cb()
+ * @see bt_socket_unset_connection_state_changed_cb()
+ */
+int bt_socket_destroy_rfcomm_ex(const char *uuid);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Starts listening on passed rfcomm socket and accepts connection requests. Activation by dbus is possible when the profile is connected.
+ * @since_tizen 2.4
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @details Pop-up is shown automatically when a RFCOMM connection is requested.
+ * bt_socket_connection_state_changed_cb() will be called with
+ * #BT_SOCKET_CONNECTED if you click "yes" and connection is finished successfully.
+ * @param[in] uuid The UUID of service to provide
+ * @param[in] max_pending_connections The maximum number of pending connections
+ * @param[in] bus_name bus_name of the application which is provided in service file.
+ * @param[in] object_path dbus of the application
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The socket must be created with bt_socket_create_rfcomm_ex().
+ * @post If callback function bt_socket_connection_state_changed_cb() is set,
+ * then bt_socket_connection_state_changed_cb() will be called when the remote Bluetooth device is connected.
+ * @see bt_socket_create_rfcomm_ex()
+ * @see bt_socket_connection_state_changed_cb()
+ * @see bt_socket_set_connection_state_changed_cb()
+ * @see bt_socket_unset_connection_state_changed_cb()
+ */
+int bt_socket_listen_and_accept_rfcomm_ex(const char *uuid, int max_pending_connections, const char* bus_name, const char *object_path);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Checks whether the remoted device is wbs (Wide Band Speech) mode or not.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[out] wbs_mode The wbs status: (@c true = wide band speech, @c false = narrow band speech)
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ * @pre The remote device is connected by bt_audio_connect() with #BT_AUDIO_PROFILE_TYPE_HSP_HFP service.
+ * @see bt_audio_connect()
+ */
+int bt_ag_is_wbs_mode(bool *wbs_mode);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Gets the HF(Hands-Free) profile connected status for AG role.
+ * @since_tizen 2.4
+ * @param[out] connected the connected status: (@c true = connected , @c false = not connected )
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ */
+int bt_ag_is_connected(bool *connected);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_HF_MODULE
+ * @brief Registers a callback function that will be invoked when the SCO(Synchronous Connection Oriented link) state is changed.
+ * @since_tizen @if MOBILE @elseif WEARABLE 2.3.1 @endif
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @see bt_audio_initialize()
+ * @see bt_ag_sco_state_changed_cb()
+ * @see bt_ag_unset_sco_state_changed_cb()
+ */
+int bt_hf_set_sco_state_changed_cb(bt_hf_sco_state_changed_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_HF_MODULE
+ * @brief Unregisters a callback function that will be invoked when the SCO(Synchronous Connection Oriented link) state is changed.
+ * @since_tizen @if MOBILE @elseif WEARABLE 2.3.1 @endif
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @see bt_audio_initialize()
+ * @see bt_ag_sco_state_changed_cb()
+ * @see bt_ag_set_sco_state_changed_cb()
+ */
+int bt_hf_unset_sco_state_changed_cb(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_HF_MODULE
+ * @brief Registers a callback function that will be invoked when a call handling event happened from Hands-Free.
+ * @since_tizen @if MOBILE @elseif WEARABLE 2.3.1 @endif
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @see bt_audio_initialize()
+ * @see bt_ag_call_handling_event_cb()
+ * @see bt_ag_unset_call_handling_event_cb()
+ */
+int bt_hf_set_call_handling_event_cb(bt_hf_call_handling_event_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_HF_MODULE
+ * @brief Unregisters a callback function that will be invoked when a call handling event happened from Hands-Free.
+ * @since_tizen @if MOBILE @elseif WEARABLE 2.3.1 @endif
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @see bt_audio_initialize()
+ * @see bt_ag_call_handling_event_cb()
+ * @see bt_ag_set_call_handling_event_cb()
+ */
+int bt_hf_unset_call_handling_event_cb(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_HF_MODULE
+ * @brief Registers a callback function that will be invoked when a multi call handling event happened from Hands-Free.
+ * @since_tizen @if MOBILE @elseif WEARABLE 2.3.1 @endif
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @see bt_audio_initialize()
+ * @see bt_ag_multi_call_handling_event_cb()
+ * @see bt_ag_unset_multi_call_handling_event_cb()
+ */
+int bt_hf_set_multi_call_handling_event_cb(bt_hf_multi_call_handling_event_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_HF_MODULE
+ * @brief Unregisters a callback function that will be invoked when a multi call handling event happened from Hands-Free.
+ * @since_tizen @if MOBILE @elseif WEARABLE 2.3.1 @endif
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @see bt_audio_initialize()
+ * @see bt_ag_multi_call_handling_event_cb()
+ * @see bt_ag_set_multi_call_handling_event_cb()
+ */
+int bt_hf_unset_multi_call_handling_event_cb(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_HF_MODULE
+ * @brief Initializes the Bluetooth HF profile related with audio.
+ * @since_tizen @if MOBILE @elseif WEARABLE 2.3.1 @endif
+ * @remarks This function must be called before Bluetooth profiles related with audio starts.
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @see bt_hf_deinitialize()
+ */
+int bt_hf_initialize(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_HF_MODULE
+ * @brief Deinitializes the Bluetooth HF profile related with audio.
+ * @since_tizen @if MOBILE @elseif WEARABLE 2.3.1 @endif
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @see bt_audio_initialize()
+ */
+int bt_hf_deinitialize(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_HF_MODULE
+ * @brief Notifies the call event to the remote bluetooth device.
+ * @since_tizen @if MOBILE @elseif WEARABLE 2.3.1 @endif
+ * @privlevel platform
+ * @privilege http://tizen.org/privilege/bluetooth.admin
+ * @remarks Before notifying #BT_HF_CALL_EVENT_ANSWERED or #BT_HF_CALL_EVENT_DIALING, you should open SCO(Synchronous Connection Oriented link)
+ * if Bluetooth Hands-Free need SCO connection.
+ * @param[in] event The call event
+ * @param[in] call_id The call ID
+ * @param[in] phone_number The phone number. You must set this value in case of #BT_HF_CALL_EVENT_DIALING and #BT_HF_CALL_EVENT_INCOMING.
+ * In other cases, this value can be NULL.
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ * @pre The Bluetooth audio device must be connected with bt_audio_connect().
+ * @see bt_audio_connect()
+ */
+int bt_hf_notify_call_event(bt_hf_call_event_e event, char *phone_number);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_HF_MODULE
+ * @brief Notifies the speaker gain to the remote device.
+ * @since_tizen @if MOBILE @elseif WEARABLE 2.3.1 @endif
+ * @privlevel platform
+ * @privilege http://tizen.org/privilege/bluetooth.admin
+ * @details This function sends a signal to the remote device. This signal has the gain value.
+ * @a gain is represented on a scale from 0 to 15. This value is absolute value relating to a particular volume level.
+ * When the speaker gain of remote device is changed to the requested gain, bt_audio_speaker_gain_changed_cb() will be called.
+ * @param[in] gain The gain of speaker (0 ~ 15)
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ * @pre The remote device is connected by bt_audio_connect() with #BT_AUDIO_PROFILE_TYPE_HSP_HFP service.
+ * @see bt_hf_get_speaker_gain()
+ * @see bt_hf_set_speaker_gain_changed_cb()
+ * @see bt_hf_unset_speaker_gain_changed_cb()
+ */
+int bt_hf_notify_speaker_gain(int gain);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_HF_MODULE
+ * @brief Registers a callback function that will be invoked when the speaker gain of the remote device is changed.
+ * @since_tizen @if MOBILE @elseif WEARABLE 2.3.1 @endif
+ * @details This function let you know the change of the speaker gain of the remote device.
+ * @a gain is represented on a scale from 0 to 15. This value is absolute value relating to a particular volume level.
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @see bt_audio_initialize()
+ * @see bt_hf_unset_speaker_gain_changed_cb()
+ */
+int bt_hf_set_speaker_gain_changed_cb(bt_hf_speaker_gain_changed_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_HF_MODULE
+ * @brief Unregisters a callback function that will be invoked when the speaker gain of the remote device is changed.
+ * @since_tizen @if MOBILE @elseif WEARABLE 2.3.1 @endif
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @see bt_audio_initialize()
+ * @see bt_hf_set_speaker_gain_changed_cb()
+ */
+int bt_hf_unset_speaker_gain_changed_cb(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_HF_MODULE
+ * @brief Notifies the state of voice recognition.
+ * @since_tizen @if MOBILE @elseif WEARABLE 2.3.1 @endif
+ * @privlevel platform
+ * @privilege http://tizen.org/privilege/bluetooth.admin
+ * @param[in] state The state of voice recognition: (@c true = enabled, @c false = disabled)
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ * @pre The Bluetooth audio device must be connected with bt_audio_connect().
+ * @see bt_audio_connect()
+ */
+int bt_hf_notify_voice_recognition_state(bool state);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_HF_MODULE
+ * @brief Registers a callback function that will be invoked when a call status event happened from Hands-Free.
+ * @since_tizen @if MOBILE @elseif WEARABLE 2.3.1 @endif
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @see bt_audio_initialize()
+ * @see bt_hf_unset_call_status_updated_event_cb()
+ */
+int bt_hf_set_call_status_updated_event_cb(bt_hf_call_status_updated_event_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_HF_MODULE
+ * @brief Unregisters a callback function that will be invoked when a call status event happened from Hands-Free.
+ * @since_tizen @if MOBILE @elseif WEARABLE 2.3.1 @endif
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @see bt_audio_initialize()
+ * @see bt_hf_set_call_status_updated_event_cb()
+ */
+int bt_hf_unset_call_status_updated_event_cb(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_HF_MODULE
+ * @brief Closes an opened SCO(Synchronous Connection Oriented link), synchronously.
+ * @since_tizen @if MOBILE @elseif WEARABLE 2.3.1 @endif
+ * @privlevel platform
+ * @privilege http://tizen.org/privilege/bluetooth.admin
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ */
+int bt_hf_close_sco(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_HF_MODULE
+ * @brief Sends the DTMF(Dual Tone Multi Frequency).
+ * @since_tizen @if MOBILE @elseif WEARABLE 2.3.1 @endif
+ * @privlevel platform
+ * @privilege http://tizen.org/privilege/bluetooth.admin
+ * @param[in] dtmf The DTMF to send
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ * @pre The Bluetooth audio device must be connected with bt_audio_connect().
+ * @see bt_audio_connect()
+ */
+int bt_hf_send_dtmf(char *dtmf);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_HF_MODULE
+ * @brief Gets the HF(Hands-Free) profile connected status for HF role.
+ * @since_tizen @if MOBILE @elseif WEARABLE 2.3.1 @endif
+ * @param[out] connected the connected status: (@c true = connected , @c false = not connected )
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ */
+int bt_hf_is_connected(bool *connected);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_HF_MODULE
+ * @brief Checks whether an opened SCO(Synchronous Connection Oriented link) exists or not.
+ * @since_tizen @if MOBILE @elseif WEARABLE 2.3.1 @endif
+ *
+ * @param[out] opened The SCO status: (@c true = opened, @c false = not opened)
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio device must be connected with bt_audio_connect().
+ * @see bt_audio_connect()
+ */
+int bt_hf_is_sco_opened(bool *opened);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_HF_MODULE
+ * @brief Gets the codec ID.
+ * @since_tizen @if MOBILE @elseif WEARABLE 2.3.1 @endif
+ * @remarks The @a codec_id must be released with free() by you.
+ *
+ * @param[out] codec_id The codec ID
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio device must be connected with bt_audio_connect().
+ * @see bt_audio_connect()
+ */
+int bt_hf_get_codec_id(unsigned int *codec_id);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_HF_MODULE
+ * @brief Gets the call status information list.
+ * @since_tizen @if MOBILE @elseif WEARABLE 2.3.1 @endif
+ * @remarks The @a call_list must be released with bt_hf_free_call_status_info_list() by you.
+ * @remarks call_info_list has elements which consist of bt_hf_call_status_info_s
+ *
+ * @param[out] call_list The call status information list
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio device must be connected with bt_audio_connect().
+ * @see bt_hf_call_status_info_s
+ * @see bt_audio_connect()
+ */
+int bt_hf_get_call_status_info_list(GSList **call_list);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_HF_MODULE
+ * @brief Frees the call status information list.
+ * @since_tizen @if MOBILE @elseif WEARABLE 2.3.1 @endif
+ *
+ * @param[in] call_list The call status information list
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_hf_get_call_status_info_list()
+ */
+int bt_hf_free_call_status_info_list(GSList *call_list);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PBAP_MODULE
+ * @brief Initializes the Bluetooth PBAP Client.
+ * @since_tizen @if MOBILE @elseif WEARABLE 2.3.1 @endif
+ * @details Initializes the Bluetooth PBAP Client.
+ * This initialization is necessary to call other PBAP client APIs.
+ *
+ * @remarks This function must be called to initiatize Bluetooth PBAP client. You must free all resources of the Bluetooth service
+ * by calling bt_pbap_deinit() if Bluetooth PBAP Client is no longer needed.
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ *
+ * @see bt_pbap_deinit()
+ * @see bt_pbap_connect()
+ * @see bt_pbap_disconnect()
+ * @see bt_pbap_get_phonebook_size()
+ * @see bt_pbap_get_phonebook()
+ * @see bt_pbap_get_list()
+ * @see bt_pbap_pull_vcard()
+ * @see bt_pbap_phonebook_search()
+ */
+int bt_pbap_init(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PBAP_MODULE
+ * @brief De-initializes the Bluetooth PBAP Client.
+ * @since_tizen @if MOBILE @elseif WEARABLE 2.3.1 @endif
+ * @details De-Initializes the Bluetooth PBAP Client.
+ * This deinitialization must be done to free resource when PBAP client is not longer needed.
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * PBAP client must be initialized with bt_pbap_init()
+ * @see bt_pbap_deinit()
+ * @see bt_pbap_connect()
+ * @see bt_pbap_disconnect()
+ * @see bt_pbap_get_phonebook_size()
+ * @see bt_pbap_get_phonebook()
+ * @see bt_pbap_get_list()
+ * @see bt_pbap_pull_vcard()
+ * @see bt_pbap_phonebook_search()
+ */
+int bt_pbap_deinit(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PBAP_MODULE
+ * @brief To connect to PBAP server
+ * @since_tizen @if MOBILE @elseif WEARABLE 2.3.1 @endif
+ * @privlevel platform
+ * @privilege http://tizen.org/privilege/bluetooth.admin
+ *
+ * @param[in] address The other device's address
+ * @param[in] Callback to be called when PBAP session is Connected.
+ * @param[in] user_data Data to be passed to PBAP enabled/disabled callback.
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Adapter is not enabled
+ * @retval #BLUETOOTH_ERROR_ALREADY_CONNECT PBAP client already connected
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * PBAP client must be initialized with bt_pbap_init()
+ * @see bt_pbap_disconnect()
+ */
+int bt_pbap_connect(const char *address, bt_pbap_enabled_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PBAP_MODULE
+ * @brief To disconnect from PBAP server
+ * @since_tizen @if MOBILE @elseif WEARABLE 2.3.1 @endif
+ * @privlevel platform
+ * @privilege http://tizen.org/privilege/bluetooth.admin
+ *
+ * @param[in] address The other device's address
+ * @param[in] Callback to be called when PBAP session is disconnected.
+ * @param[in] user_data Data to be passed to PBAP enabled/disabled callback.
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Adapter is not enabled
+ * @retval #BLUETOOTH_ERROR_NOT_CONNECTED PBAP Client is not connected
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * PBAP client must be initialized with bt_pbap_init()
+ * PBAP connection must be created with bt_pbap_connect().
+ *
+ * @see bt_pbap_connect()
+ */
+int bt_pbap_disconnect(const char *address, bt_pbap_enabled_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PBAP_MODULE
+ * @brief To get size of phonebook from PBAP server
+ * @since_tizen @if MOBILE @elseif WEARABLE 2.3.1 @endif
+ * @privlevel platform
+ * @privilege http://tizen.org/privilege/bluetooth.admin
+ *
+ * @param[in] address The other device's address
+ * @param[in] source Source of Phonebook (Phone/SIM)
+ * @param[in] type Type of folder
+ * @param[in] Callback to be called when PBAP Phonebook Size is Returned.
+ * @param[in] user_data Data to be passed to the PBAP Phonebook Size callback.
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Adapter is not enabled
+ * @retval #BLUETOOTH_ERROR_NOT_CONNECTED PBAP Client is not connected
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * PBAP client must be initialized with bt_pbap_init()
+ * PBAP connection must be created with bt_pbap_connect().
+ *
+ * @see bt_pbap_connect()
+ */
+int bt_pbap_get_phonebook_size(const char *address, bt_pbap_addressbook_source_e source,
+ bt_pbap_folder_type_e type, bt_pbap_phonebook_size_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PBAP_MODULE
+ * @brief To get contacts/call logs as vCards from PBAP server
+ * @since_tizen @if MOBILE @elseif WEARABLE 2.3.1 @endif
+ * @privlevel platform
+ * @privilege http://tizen.org/privilege/bluetooth.admin
+ *
+ * @param[in] address The other device's address
+ * @param[in] source Source of Phonebook (Phone/SIM)
+ * @param[in] type Type of folder
+ * @param[in] format Format of vCard
+ * @param[in] order Specifies which field shall be used to sort vCards.
+ * @param[in] offset vCards to be excluded from beginning.
+ * @param[in] maxlistcount Maximum number of vCards to be fetched
+ * @param[in] fields Fields of vCard to be fetched.
+ * @param[in] Callback to be called when PBAP Phonebook is Pulled.
+ * @param[in] user_data Data to be passed to the PBAP Phonebook Pull callback.
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Adapter is not enabled
+ * @retval #BLUETOOTH_ERROR_NOT_CONNECTED PBAP Client is not connected
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * PBAP client must be initialized with bt_pbap_init()
+ * PBAP connection must be created with bt_pbap_connect().
+ *
+ * @see bt_pbap_connect()
+ */
+int bt_pbap_get_phonebook(const char *address, bt_pbap_addressbook_source_e source,
+ bt_pbap_folder_type_e type, bt_pbap_filter_vcard_format_e format,
+ bt_pbap_filter_sort_order_e order, unsigned short offset,
+ unsigned short maxlistcount, long long unsigned fields,
+ bt_pbap_phonebook_pull_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PBAP_MODULE
+ * @brief To get Contact or Call List from PBAP server
+ * @since_tizen @if MOBILE @elseif WEARABLE 2.3.1 @endif
+ * @privlevel platform
+ * @privilege http://tizen.org/privilege/bluetooth.admin
+ *
+ * @param[in] address The other device's address
+ * @param[in] source Source of Phonebook (Phone/SIM)
+ * @param[in] type Type of folder
+ * @param[in] order Specifies which field shall be used to sort vCards.
+ * @param[in] offset vCards to be excluded from beginning.
+ * @param[in] maxlistcount Maximum number of vCards to be fetched
+ * @param[in] Callback to be called when PBAP List is returned.
+ * @param[in] user_data Data to be passed to the PBAP Phonebook Pull callback.
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Adapter is not enabled
+ * @retval #BLUETOOTH_ERROR_NOT_CONNECTED PBAP Client is not connected
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * PBAP client must be initialized with bt_pbap_init()
+ * PBAP connection must be created with bt_pbap_connect().
+ *
+ * @see bt_pbap_connect()
+ */
+int bt_pbap_get_list(const char *address, bt_pbap_addressbook_source_e source,
+ bt_pbap_folder_type_e type, bt_pbap_filter_sort_order_e order,
+ unsigned short offset, unsigned short maxlistcount,
+ bt_pbap_list_vcards_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PBAP_MODULE
+ * @brief To get a contact/call log from PBAP server
+ * @since_tizen @if MOBILE @elseif WEARABLE 2.3.1 @endif
+ * @privlevel platform
+ * @privilege http://tizen.org/privilege/bluetooth.admin
+ *
+ * @param[in] address The other device's address
+ * @param[in] source Source of Phonebook (Phone/SIM)
+ * @param[in] type Type of folder
+ * @param[in] index Handle of vCard to be fetched
+ * @param[in] format Format of vCard
+ * @param[in] fields Fields of vCard to be fetched.
+ * @param[in] Callback to be called when PBAP Phonebook is Pulled.
+ * @param[in] user_data Data to be passed to the PBAP Phonebook Pull callback.
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Adapter is not enabled
+ * @retval #BLUETOOTH_ERROR_NOT_CONNECTED PBAP Client is not connected
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * PBAP client must be initialized with bt_pbap_init()
+ * PBAP connection must be created with bt_pbap_connect().
+ *
+ * @see bt_pbap_connect()
+ */
+int bt_pbap_pull_vcard(const char *address, bt_pbap_addressbook_source_e source,
+ bt_pbap_folder_type_e type, int index,
+ bt_pbap_filter_vcard_format_e format, long long unsigned fields,
+ bt_pbap_get_vcard_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PBAP_MODULE
+ * @brief To get Contact or Call List from PBAP server
+ * @since_tizen @if MOBILE @elseif WEARABLE 2.3.1 @endif
+ * @privlevel platform
+ * @privilege http://tizen.org/privilege/bluetooth.admin
+ *
+ * @param[in] address The other device's address
+ * @param[in] source Source of Phonebook (Phone/SIM)
+ * @param[in] type Type of folder
+ * @param[in] search_attribute field to be search
+ * @param[in] search_value pattern to be searched for
+ * @param[in] order Specifies which field shall be used to sort vCards.
+ * @param[in] offset vCards to be excluded from beginning.
+ * @param[in] maxlistcount Maximum number of vCards to be fetched
+ * @param[in] Callback to be called when PBAP List is returned.
+ * @param[in] user_data Data to be passed to the PBAP Phonebook Pull callback.
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Adapter is not enabled
+ * @retval #BLUETOOTH_ERROR_NOT_CONNECTED PBAP Client is not connected
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * PBAP client must be initialized with bt_pbap_init()
+ * PBAP connection must be created with bt_pbap_connect().
+ *
+ * @see bt_pbap_connect()
+ */
+int bt_pbap_phonebook_search(const char *address,
+ bt_pbap_addressbook_source_e source, bt_pbap_folder_type_e type,
+ bt_pbap_search_field_e search_attribute, const char *search_value,
+ bt_pbap_filter_sort_order_e order,
+ unsigned short offset, unsigned short maxlistcount,
+ bt_pbap_search_list_cb callback, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Gets the specification name from the UUID
+ * @since_tizen 2.4
+ *
+ * @remarks @a name must be released with free() by you.
+ *
+ * @param[in] uuid The UUID
+ * @param[out] name The specification name which defined from www.bluetooth.org
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_get_uuid()
+ */
+int bt_gatt_get_uuid_specification_name(const char *uuid, char **name);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Destroys the GATT handle
+ * @since_tizen 2.4
+ *
+ * @param[in] gatt_handle The handle of service, characteristic or descriptor
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_service_create()
+ * @see bt_gatt_characteristic_create()
+ * @see bt_gatt_descriptor_create()
+ */
+int bt_gatt_destroy(bt_gatt_h gatt_handle);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Gets the permissions which a characteristic or descriptor's GATT handle has
+ * @since_tizen 2.4
+ *
+ * @param[in] gatt_handle The handle of a characteristic or descriptor
+ * @param[out] permissions The permissions which a characteristic or descriptor's GATT handle has.
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_characteristic_create()
+ * @see bt_gatt_descriptor_create()
+ * @see bt_gatt_permission_e
+ */
+int bt_gatt_get_permissions(bt_gatt_h gatt_handle, int *permissions);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Updates the permissions which a characteristic or descriptor's GATT handle has
+ * @since_tizen 2.4
+ *
+ * @param[in] gatt_handle The handle of a characteristic or descriptor
+ * @param[in] permissions The permissions to be updated
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_characteristic_create()
+ * @see bt_gatt_descriptor_create()
+ * @see bt_gatt_permission_e
+ */
+int bt_gatt_set_permissions(bt_gatt_h gatt_handle, int permissions);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Creates the GATT service
+ * @since_tizen 2.4
+ *
+ * @param[in] uuid The UUID of the service
+ * @param[in] type The type of the service
+ * @param[out] service The GATT handle of the created service
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_destroy()
+ */
+int bt_gatt_service_create(const char *uuid, bt_gatt_service_type_e type,
+ bt_gatt_h *service);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Adds a characteristic to a specified service
+ * @since_tizen 2.4
+ *
+ * @param[in] service The service's GATT handle
+ * @param[in] characteristic The characteristic's GATT handle to be added
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_service_create()
+ * @see bt_gatt_characteristic_create()
+ */
+int bt_gatt_service_add_characteristic(bt_gatt_h service,
+ bt_gatt_h characteristic);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Adds a service to a specified service as included service
+ * @since_tizen 2.4
+ *
+ * @param[in] service The service's GATT handle
+ * @param[in] included_service The service's GATT handle to be added as included service
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_service_create()
+ */
+int bt_gatt_service_add_included_service(bt_gatt_h service,
+ bt_gatt_h included_service);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Gets the GATT server handle to which the specified service belongs
+ * @since_tizen 2.4
+ *
+ * @param[in] service The service's GATT handle
+ * @param[out] server The GATT server handle to which @a service belongs
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_server_create()
+ * @see bt_gatt_service_create()
+ * @see bt_gatt_server_register_service()
+ */
+int bt_gatt_service_get_server(bt_gatt_h service, bt_gatt_server_h *server);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Creates the GATT characteristic
+ * @since_tizen 2.4
+ *
+ * @param[in] uuid The UUID of the characteristic
+ * @param[in] permissions the permissions of the characteristic
+ * @param[in] properties The properties of the characteristic
+ * @param[in] Value The value(byte stream) of the characteristic
+ * @param[in] value_length The length of @a value
+ * @param[out] characteristic The GATT handle of the created characteristic
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_destroy()
+ */
+int bt_gatt_characteristic_create(const char *uuid, int permissions,
+ int properties, const char *value, int value_length,
+ bt_gatt_h *characteristic);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Adds a descriptor to a specified characteristic
+ * @since_tizen 2.4
+ *
+ * @param[in] characteristic The GATT handle of the characteristic
+ * @param[in] descriptor The descriptor's GATT handle to be added
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_characteristic_create()
+ * @see bt_gatt_descriptor_create()
+ */
+int bt_gatt_characteristic_add_descriptor(bt_gatt_h characteristic,
+ bt_gatt_h descriptor);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Creates the GATT characteristic descriptor
+ * @since_tizen 2.4
+ *
+ * @param[in] uuid The UUID of the descriptor
+ * @param[in] permissions The permissions of the descriptor
+ * @param[in] value The value(byte stream) associated with the descriptor
+ * @param[in] value_length The length of @a value
+ * @param[out] descriptor The GATT handle of the created characteristic descriptor
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_destroy()
+ */
+int bt_gatt_descriptor_create(const char *uuid, int permissions,
+ const char *value, int value_length,
+ bt_gatt_h *descriptor);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Initializes the GATT Server
+ * @since_tizen 2.4
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @see bt_gatt_server_deinitialize()
+ */
+int bt_gatt_server_initialize(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief DeInitializes the GATT server
+ * @since_tizen 2.4
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The state of local Bluetooth must be #BT_ADAPTER_ENABLED.
+ * @see bt_gatt_server_initialize()
+ */
+int bt_gatt_server_deinitialize(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Creates the GATT server's handle
+ * @since_tizen 2.4
+ *
+ * @param[out] server The GATT server's handle
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_server_destroy()
+ */
+int bt_gatt_server_create(bt_gatt_server_h *server);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Destroys the GATT server's handle
+ * @since_tizen 2.4
+ *
+ * @remarks All registered services to GATT server are unregistered
+ *
+ * @param[in] server The GATT server's handle
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_server_create()
+ */
+int bt_gatt_server_destroy(bt_gatt_server_h server);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Registers a callback function to be invoked when a read request for a specified characteristic or descriptor is issued from a remote device(GATT client)
+ * @since_tizen 2.4
+ *
+ * @param[in] gatt_handle The GATT handle of a characteristic or descriptor
+ * @param[in] callback The callback to be invoked
+ * @param[in] user_data The user data to be passed to @a callback function
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_server_read_value_requested_cb()
+ * @see bt_gatt_server_send_response()
+ */
+int bt_gatt_server_set_read_value_requested_cb(bt_gatt_h gatt_handle,
+ bt_gatt_server_read_value_requested_cb callback,
+ void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Registers a callback function to be invoked when a value of a characteristic or descriptor has been changed by a remote device(GATT client)'s request
+ * @since_tizen 2.4
+ *
+ * @param[in] gatt_handle The GATT handle of a characteristic or descriptor
+ * @param[in] callback The callback to be invoked
+ * @param[in] user_data The user data to be passed to @a callback function
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_server_value_changed_cb()
+ */
+int bt_gatt_server_set_value_changed_cb(bt_gatt_h gatt_handle,
+ bt_gatt_server_value_changed_cb callback,
+ void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Registers a specified service to the specified GATT server that the local device is hosting
+ * @since_tizen 2.4
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @param[in] server The GATT server that local device is hosting
+ * @param[in] service The service, which needs to be registered in @a server
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_ALREADY_DONE Operation is already done
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_server_create()
+ * @see bt_gatt_service_create()
+ * @see bt_gatt_server_unregister_service()
+ */
+int bt_gatt_server_register_service(bt_gatt_server_h server, bt_gatt_h service);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Unregisters a specified service from the specified GATT server that the local device is hosting
+ * @since_tizen 2.4
+ *
+ * @param[in] server The GATT server that local device is hosting
+ * @param[in] service The service, which needs to be unregistered from @a server
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_SERVICE_NOT_FOUND Service not found
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_server_register_service()
+ */
+int bt_gatt_server_unregister_service(bt_gatt_server_h server, bt_gatt_h service);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Unregisters all services from the specified GATT server that the local device is hosting
+ * @since_tizen 2.4
+ *
+ * @param[in] server The GATT server that local device is hosting
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_server_register_service()
+ */
+int bt_gatt_server_unregister_all_services(bt_gatt_server_h server);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Sends a response to the remote device as a result of a read request
+ * @since_tizen 2.4
+ *
+ * @remarks Until this function is called, a read request is not finished.
+ *
+ * @param[in] request_id The identification of a read request
+ * @param[in] offset The offset from where a value is read
+ * @param[in] value The value to be sent. It will be sent from @a offset. If it is NULL, a requested GATT handle's value will be sent from @a offset.
+ * @param[in] value_length Value Length
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_server_read_value_requested_cb()
+ */
+int bt_gatt_server_send_response(int request_id,
+ int offset, char *value, int value_length);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Notifys a value change of the characteristic to the remote devices which enable a Client Characteristic Configuration Descriptor
+ * @since_tizen 2.4
+ *
+ * @param[in] characteristic The characteristic which has a changed value
+ * @param[in] need_confirm If it is true, an indication is sent. If it is false, a notification is sent.
+ * @param[in] callback The function to be invoked on each remote device when a sending operation is done
+ * @param[in] user_data The user data to be passed to @a callback function
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_server_notification_sent_cb()
+ */
+int bt_gatt_server_notify(bt_gatt_h characteristic, bool need_confirm,
+ bt_gatt_server_notification_sent_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Gets a service's GATT handle which has specific UUID
+ * @since_tizen 2.4
+ *
+ * @remark The returned GATT handle must not be freed by application.
+ * It will be freed when an associated server is destroyed by bt_gatt_server_destroy().
+ * If there are multiple services which have same UUID, only the first matched one will be returned.
+ *
+ * @param[in] server The GATT server's handle
+ * @param[in] uuid The serivce's GATT handle which has this UUID will be returned if it exists
+ * @param[out] service The service's GATT handle which has @a uuid if it exists
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NO_DATA No data available
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ */
+int bt_gatt_server_get_service(bt_gatt_server_h server, const char *uuid,
+ bt_gatt_h *service);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Invokes @a callback function on each service that belongs to the specified GATT server
+ * @since_tizen 2.4
+ *
+ * @param[in] server The GATT server's handle
+ * @param[in] callback The function to be invoked on each service
+ * @param[in] user_data The user data to be passed to @a callback function
+ * @return 0 on success, otherwise a negative error value
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_gatt_foreach_cb()
+ */
+int bt_gatt_server_foreach_services(bt_gatt_server_h server,
+ bt_gatt_foreach_cb callback, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Registers a callback function that will be invoked when the song position is changed by the remote target device.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized by bt_initialize().
+ * @see bt_initialize()
+ * @see bt_avrcp_unset_song_position_changed_cb()
+ */
+int bt_avrcp_set_song_position_changed_cb(bt_avrcp_song_position_changed_cb callback, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Unregisters a callback function that will be invoked when the song position is changed by the remote target device.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized by bt_initialize().
+ * @see bt_initialize()
+ * @see bt_avrcp_set_song_position_changed_cb()
+ */
+int bt_avrcp_unset_song_position_changed_cb(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Registers a callback function that will be invoked when the Play status is changed by the remote target device.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized by bt_initialize().
+ * @see bt_initialize()
+ * @see bt_avrcp_unset_play_status_changed_cb()
+ */
+int bt_avrcp_set_play_status_changed_cb(bt_avrcp_play_status_changed_cb callback, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Unregisters a callback function that will be invoked when the Play status is changed by the remote target device.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized by bt_initialize().
+ * @see bt_initialize()
+ * @see bt_avrcp_unset_play_status_changed_cb()
+ */
+int bt_avrcp_unset_play_status_changed_cb(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Registers a callback function that will be invoked when the track metadata is changed by the remote target device.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized by bt_initialize().
+ * @see bt_initialize()
+ * @see bt_avrcp_unset_track_info_changed_cb()
+ */
+int bt_avrcp_set_track_info_changed_cb(bt_avrcp_track_info_changed_cb callback, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Unregisters a callback function that will be invoked when the track metadata is changed by the remote target device.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized by bt_initialize().
+ * @see bt_initialize()
+ * @see bt_avrcp_set_track_info_changed_cb()
+ */
+int bt_avrcp_unset_track_info_changed_cb(void);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_MODULE
+ * @brief Registers a callback function that will be invoked when the A2DP Source connection state is changed.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @param[in] callback The callback function to register
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @see bt_audio_initialize()
+ * @see bt_audio_connection_state_changed_cb()
+ */
+int bt_a2dp_source_audio_set_connection_state_changed_cb(bt_audio_connection_state_changed_cb callback, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_MODULE
+ * @brief Unregisters a callback function that will be invoked when the A2DP Source connection state is changed.
+ * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth audio service must be initialized with bt_audio_initialize().
+ * @see bt_audio_initialize()
+ * @see bt_audio_connection_state_changed_cb()
+ * @see bt_audio_set_connection_state_changed_cb()
+ */
+int bt_a2dp_source_audio_unset_connection_state_changed_cb(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Initializes the Bluetooth AVRCP(Audio/Video Remote Control Profile) service.
+ * @since_tizen 2.4
+ * @remarks This function must be called before Bluetooth AVRCP service. \n
+ * You must free all resources of the this service by calling bt_avrcp_control_deinitialize()
+ * if Bluetooth AVRCP service is no longer needed.
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] callback The callback function called when the connection state is changed
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ * @see bt_initialize()
+ * @see bt_avrcp_control_deinitialize()
+ */
+int bt_avrcp_control_initialize(bt_avrcp_control_connection_state_changed_cb callback, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Deinitializes the Bluetooth AVRCP(Audio/Video Remote Control Profile) service.
+ * @since_tizen 2.4
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ * @pre The Bluetooth audio service must be initialized with bt_avrcp_control_initialize().
+ * @see bt_avrcp_control_initialize()
+ */
+int bt_avrcp_control_deinitialize(void);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Connects the Bluetooth AVRCP(Audio/Video Remote Control Profile) service.
+ * @since_tizen 2.4
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ * @pre The Bluetooth audio service must be initialized with bt_avrcp_control_initialize().
+ * @see bt_avrcp_control_initialize()
+ */
+int bt_avrcp_control_connect(const char *remote_address);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Disconnects the Bluetooth AVRCP(Audio/Video Remote Control Profile) service.
+ * @since_tizen 2.4
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ * @pre The Bluetooth audio service must be initialized with bt_avrcp_control_initialize().
+ * @see bt_avrcp_control_initialize()
+ * @see bt_avrcp_control_connect()
+ */
+int bt_avrcp_control_disconnect(const char *remote_address);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Handle the Bluetooth AVRCP(Audio/Video Remote Control Profile) commands.
+ * @since_tizen 2.4
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] AVRCP Commands Play, Pause, Next, Rewind.
+ * @return 0 on success, otherwise a negative error value.
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ * @pre The Bluetooth audio service must be initialized with bt_avrcp_control_initialize().
+ * @see bt_avrcp_control_initialize()
+ * @see bt_avrcp_control_connect()
+ */
+int bt_avrcp_control_send_player_command(bt_avrcp_player_command_e cmd);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief send the equalizer change to the remote device.
+ * @since_tizen 2.4
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] state To set the equalizer state ON/OFF
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device must be connected.
+ * @see bt_avrcp_target_connection_state_changed_cb()
+ * @see bt_avrcp_target_initialize()
+ */
+int bt_avrcp_control_set_equalizer_state(bt_avrcp_equalizer_state_e state);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief get the the equalize state of the remote device.
+ * @since_tizen 2.4
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] equalizer To get the equalizer value ON/OFF
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device must be connected.
+ * @see bt_avrcp_target_connection_state_changed_cb()
+ * @see bt_avrcp_target_initialize()
+ */
+int bt_avrcp_control_get_equalizer_state(bt_avrcp_equalizer_state_e *state);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief send the repeat change to the remote device.
+ * @since_tizen 2.4
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] Mode To set the repeat mode OFF, SINGLE, ALL
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device must be connected.
+ * @see bt_avrcp_target_connection_state_changed_cb()
+ * @see bt_avrcp_target_initialize()
+ */
+int bt_avrcp_control_set_repeat_mode(bt_avrcp_repeat_mode_e mode);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief get the repeat state of the remote device.
+ * @since_tizen 2.4
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] Mode To get the repeat mode OFF, SINGLE, ALL
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device must be connected.
+ * @see bt_avrcp_target_connection_state_changed_cb()
+ * @see bt_avrcp_target_initialize()
+ */
+int bt_avrcp_control_get_repeat_mode(bt_avrcp_repeat_mode_e *mode);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief send the shuffle change to the remote device.
+ * @since_tizen 2.4
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] Mode To set the shuffle mode OFF, GROUP, ALL
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device must be connected.
+ * @see bt_avrcp_target_connection_state_changed_cb()
+ * @see bt_avrcp_target_initialize()
+ */
+int bt_avrcp_control_set_shuffle_mode(bt_avrcp_shuffle_mode_e mode);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief get the shuffle state of the remote device.
+ * @since_tizen 2.4
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] Mode To get the shuffle mode OFF, GROUP, ALL
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device must be connected.
+ * @see bt_avrcp_target_connection_state_changed_cb()
+ * @see bt_avrcp_target_initialize()
+ */
+int bt_avrcp_control_get_shuffle_mode(bt_avrcp_shuffle_mode_e *mode);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief send the scan mode change to the remote device.
+ * @since_tizen 2.4
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] Mode To set the scan mode OFF, GROUP, ALL
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device must be connected.
+ * @see bt_avrcp_target_connection_state_changed_cb()
+ * @see bt_avrcp_target_initialize()
+ */
+int bt_avrcp_control_set_scan_mode(bt_avrcp_scan_mode_e mode);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief get the scan mode of the remote device.
+ * @since_tizen 2.4
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] Mode To get the scan mode OFF, GROUP, ALL
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device must be connected.
+ * @see bt_avrcp_target_connection_state_changed_cb()
+ * @see bt_avrcp_target_initialize()
+ */
+int bt_avrcp_control_get_scan_mode(bt_avrcp_scan_mode_e *mode);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief get the song position vale of the remote device.
+ * @since_tizen 2.4
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] Mode To get the position value in milliseconds
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device must be connected.
+ * @see bt_avrcp_target_connection_state_changed_cb()
+ * @see bt_avrcp_target_initialize()
+ */
+int bt_avrcp_control_get_position(unsigned int *position);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief get the play status of the remote device.
+ * @since_tizen 2.4
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] Mode To get the play status PLAYING, STOPPED...
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device must be connected.
+ * @see bt_avrcp_target_connection_state_changed_cb()
+ * @see bt_avrcp_target_initialize()
+ */
+int bt_avrcp_control_get_play_status(bt_avrcp_player_state_e *status);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief get the metadata of the remote device.
+ * @since_tizen 2.4
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] track To get the metadata of track played in remote device.
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_NOT_ENABLED Not enabled
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED Remote device is not connected
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The remote device must be connected.
+ * @see bt_avrcp_target_connection_state_changed_cb()
+ * @see bt_avrcp_target_initialize()
+ */
+int bt_avrcp_control_get_track_info(bt_avrcp_metadata_attributes_info_s **track);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief to free the metadata staructure.
+ * @since_tizen 2.4
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ * @param[in] track To free the memory of metadata structure.
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @pre track should point to valid metadata address.
+ * @see bt_avrcp_control_get_track_info()
+ * @see bt_avrcp_target_initialize()
+ */
+int bt_avrcp_control_free_track_info(bt_avrcp_metadata_attributes_info_s *track);
+
+/**
+ * @}
+ */
+
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif // __TIZEN_NETWORK_BLUETOOTH_INTERNAL_H__
diff --git a/include/wearable/bluetooth_type.h b/include/wearable/bluetooth_type.h
new file mode 100644
index 0000000..6690427
--- /dev/null
+++ b/include/wearable/bluetooth_type.h
@@ -0,0 +1,1608 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef __TIZEN_NETWORK_BLUETOOTH_TYPE_H__
+#define __TIZEN_NETWORK_BLUETOOTH_TYPE_H__
+
+ #ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+
+/**
+ * @file bluetooth_type.h
+ * @brief API to control the Bluetooth adapter, devices and communications.
+ * @ingroup CAPI_NETWORK_BLUETOOTH_TYPE_MODULE
+ */
+
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_MODULE
+ * @brief Enumerations of Bluetooth error codes.
+ * @since_tizen 2.3.1
+ */
+typedef enum
+{
+ BT_ERROR_NONE = TIZEN_ERROR_NONE, /**< Successful*/
+ BT_ERROR_CANCELLED = TIZEN_ERROR_CANCELED, /**< Operation cancelled */
+ BT_ERROR_INVALID_PARAMETER = TIZEN_ERROR_INVALID_PARAMETER, /**< Invalid parameter */
+ BT_ERROR_OUT_OF_MEMORY = TIZEN_ERROR_OUT_OF_MEMORY, /**< Out of memory */
+ BT_ERROR_RESOURCE_BUSY = TIZEN_ERROR_RESOURCE_BUSY, /**< Device or resource busy */
+ BT_ERROR_TIMED_OUT = TIZEN_ERROR_TIMED_OUT, /**< Timeout error */
+ BT_ERROR_NOW_IN_PROGRESS = TIZEN_ERROR_NOW_IN_PROGRESS, /**< Operation now in progress */
+ BT_ERROR_NOT_SUPPORTED = TIZEN_ERROR_NOT_SUPPORTED, /**< BT is Not Supported */
+ BT_ERROR_PERMISSION_DENIED = TIZEN_ERROR_PERMISSION_DENIED, /**< Permission denied */
+ BT_ERROR_QUOTA_EXCEEDED = TIZEN_ERROR_QUOTA_EXCEEDED, /**< Quota exceeded */
+ BT_ERROR_NO_DATA = TIZEN_ERROR_NO_DATA, /**< No data available */
+ BT_ERROR_NOT_INITIALIZED = TIZEN_ERROR_BLUETOOTH|0x0101, /**< Local adapter not initialized */
+ BT_ERROR_NOT_ENABLED = TIZEN_ERROR_BLUETOOTH|0x0102, /**< Local adapter not enabled */
+ BT_ERROR_ALREADY_DONE = TIZEN_ERROR_BLUETOOTH|0x0103, /**< Operation already done */
+ BT_ERROR_OPERATION_FAILED = TIZEN_ERROR_BLUETOOTH|0x0104, /**< Operation failed */
+ BT_ERROR_NOT_IN_PROGRESS = TIZEN_ERROR_BLUETOOTH|0x0105, /**< Operation not in progress */
+ BT_ERROR_REMOTE_DEVICE_NOT_BONDED = TIZEN_ERROR_BLUETOOTH|0x0106, /**< Remote device not bonded */
+ BT_ERROR_AUTH_REJECTED = TIZEN_ERROR_BLUETOOTH|0x0107, /**< Authentication rejected */
+ BT_ERROR_AUTH_FAILED = TIZEN_ERROR_BLUETOOTH|0x0108, /**< Authentication failed */
+ BT_ERROR_REMOTE_DEVICE_NOT_FOUND = TIZEN_ERROR_BLUETOOTH|0x0109, /**< Remote device not found */
+ BT_ERROR_SERVICE_SEARCH_FAILED = TIZEN_ERROR_BLUETOOTH|0x010A, /**< Service search failed */
+ BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED = TIZEN_ERROR_BLUETOOTH|0x010B, /**< Remote device is not connected */
+ BT_ERROR_AGAIN = TIZEN_ERROR_BLUETOOTH|0x010C, /**< Resource temporarily unavailable */
+ BT_ERROR_SERVICE_NOT_FOUND = TIZEN_ERROR_BLUETOOTH|0x010D, /**< Service Not Found */
+} bt_error_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Enumerations of the Bluetooth adapter state.
+ * @since_tizen 2.3.1
+ */
+typedef enum
+{
+ BT_ADAPTER_DISABLED = 0x00, /**< Bluetooth adapter is disabled */
+ BT_ADAPTER_ENABLED, /**< Bluetooth adapter is enabled */
+} bt_adapter_state_e;
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Enumerations of the Bluetooth adapter le state.
+ * @since_tizen 2.3.1
+ */
+typedef enum
+{
+ BT_ADAPTER_LE_DISABLED = 0x00, /**< Bluetooth le is disabled */
+ BT_ADAPTER_LE_ENABLED, /**< Bluetooth le is enabled */
+} bt_adapter_le_state_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Enumerations of the Bluetooth visibility mode.
+ * @since_tizen 2.3.1
+ */
+typedef enum
+{
+ BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE = 0x00, /**< Other devices cannot find your device via discovery */
+ BT_ADAPTER_VISIBILITY_MODE_GENERAL_DISCOVERABLE, /**< Discoverable mode */
+ BT_ADAPTER_VISIBILITY_MODE_LIMITED_DISCOVERABLE, /**< Discoverable mode with time limit. After specific period,
+ it is changed to #BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE.*/
+} bt_adapter_visibility_mode_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Enumerations of the discovery state of Bluetooth device.
+ * @since_tizen 2.3.1
+ */
+typedef enum
+{
+ BT_ADAPTER_DEVICE_DISCOVERY_STARTED, /**< Device discovery is started */
+ BT_ADAPTER_DEVICE_DISCOVERY_FINISHED, /**< Device discovery is finished */
+ BT_ADAPTER_DEVICE_DISCOVERY_FOUND, /**< The remote Bluetooth device is found */
+} bt_adapter_device_discovery_state_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Enumerations of the Bluetooth advertising state.
+ * @since_tizen 2.3.1
+ */
+typedef enum {
+ BT_ADAPTER_LE_ADVERTISING_STOPPED = 0x00, /**< Bluetooth advertising is stopped */
+ BT_ADAPTER_LE_ADVERTISING_STARTED, /**< Bluetooth advertising is started */
+} bt_adapter_le_advertising_state_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Enumerations of the Bluetooth advertising mode.
+ * @since_tizen 2.3.1
+ */
+typedef enum
+{
+ BT_ADAPTER_LE_ADVERTISING_MODE_BALANCED, /**< Balanced advertising mode */
+ BT_ADAPTER_LE_ADVERTISING_MODE_LOW_LATENCY, /**< Low latency advertising mode */
+ BT_ADAPTER_LE_ADVERTISING_MODE_LOW_ENERGY /**< Low energy advertising mode */
+} bt_adapter_le_advertising_mode_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Enumerations of the Bluetooth advertising filter policy.
+ * @since_tizen 2.3.1
+ */
+typedef enum {
+ BT_ADAPTER_LE_ADVERTISING_FILTER_DEFAULT = 0x00, /**< White list is not in use */
+ BT_ADAPTER_LE_ADVERTISING_FILTER_ALLOW_SCAN_WL = 0x01, /**< Allow the scan
+ request that in the White list */
+ BT_ADAPTER_LE_ADVERTISING_FILTER_ALLOW_CONN_WL = 0x02, /**< Allow the connectoin
+ request that in the White list */
+ BT_ADAPTER_LE_ADVERTISING_FILTER_ALLOW_SCAN_CONN_WL = 0x03, /**< Allow the
+ scan and connectoin request that in the White list */
+} bt_adapter_le_advertising_filter_policy_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Enumerations of the Bluetooth LE packet type.
+ * @since_tizen 2.3.1
+ */
+typedef enum {
+ BT_ADAPTER_LE_PACKET_ADVERTISING, /**< Advertising packet */
+ BT_ADAPTER_LE_PACKET_SCAN_RESPONSE, /**< Sacn response packet */
+} bt_adapter_le_packet_type_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Enumerations of device disconnect reason.
+ * @since_tizen 2.3.1
+ */
+typedef enum
+{
+ BT_DEVICE_DISCONNECT_REASON_UNKNOWN, /**< Disconnected by unknown reason */
+ BT_DEVICE_DISCONNECT_REASON_TIMEOUT, /**< Disconnected by timeout */
+ BT_DEVICE_DISCONNECT_REASON_LOCAL_HOST, /**< Disconnected by local host */
+ BT_DEVICE_DISCONNECT_REASON_REMOTE, /**< Disconnected by remote */
+} bt_device_disconnect_reason_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Enumerations of connection link type.
+ * @since_tizen 2.3.1
+ */
+typedef enum
+{
+ BT_DEVICE_CONNECTION_LINK_BREDR, /**< BR/EDR link */
+ BT_DEVICE_CONNECTION_LINK_LE, /**< LE link */
+ BT_DEVICE_CONNECTION_LINK_DEFAULT = 0xFF, /**< The connection type defualt */
+} bt_device_connection_link_type_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Enumerations of device authorization state.
+ * @since_tizen 2.3.1
+ */
+typedef enum
+{
+ BT_DEVICE_AUTHORIZED, /**< The remote Bluetooth device is authorized */
+ BT_DEVICE_UNAUTHORIZED, /**< The remote Bluetooth device is unauthorized */
+} bt_device_authorization_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Enumerations of Bluetooth profile.
+ * @since_tizen 2.3.1
+ */
+typedef enum
+{
+ BT_PROFILE_RFCOMM = 0x01, /**< RFCOMM Profile */
+ BT_PROFILE_A2DP = 0x02, /**< Advanced Audio Distribution Profile */
+ BT_PROFILE_HSP = 0x04, /**< Headset Profile */
+ BT_PROFILE_HID = 0x08, /**< Human Interface Device Profile */
+ BT_PROFILE_NAP = 0x10, /**< Network Access Point Profile */
+ BT_PROFILE_AG = 0x20, /**< Audio Gateway Profile */
+ BT_PROFILE_GATT = 0x40, /**< Generic Attribute Profile */
+ BT_PROFILE_NAP_SERVER = 0x80, /**< NAP server Profile */
+} bt_profile_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Enumerations of device address type.
+ * @since_tizen 2.3.1
+ */
+typedef enum
+{
+ BT_DEVICE_PUBLIC_ADDRESS = 0x00, /**< Public address */
+ BT_DEVICE_RANDOM_ADDRESS, /**< Random address */
+} bt_device_address_type_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Enumerations of service class.
+ * @since_tizen 2.3.1
+ */
+typedef enum {
+ BT_SC_NONE = 0, /**< No service class */
+ BT_SC_RES_SERVICE_MASK = 0x00000001, /**< RES service class */
+ BT_SC_SPP_SERVICE_MASK = 0x00000002, /**< SPP service class */
+ BT_SC_DUN_SERVICE_MASK = 0x00000004, /**< DUN service class */
+ BT_SC_FAX_SERVICE_MASK = 0x00000008, /**< FAX service class */
+ BT_SC_LAP_SERVICE_MASK = 0x00000010, /**< LAP service class */
+ BT_SC_HSP_SERVICE_MASK = 0x00000020, /**< HSP service class */
+ BT_SC_HFP_SERVICE_MASK = 0x00000040, /**< HFP service class */
+ BT_SC_OPP_SERVICE_MASK = 0x00000080, /**< OPP service class */
+ BT_SC_FTP_SERVICE_MASK = 0x00000100, /**< FTP service class */
+ BT_SC_CTP_SERVICE_MASK = 0x00000200, /**< CTP service class */
+ BT_SC_ICP_SERVICE_MASK = 0x00000400, /**< ICP service class */
+ BT_SC_SYNC_SERVICE_MASK = 0x00000800, /**< SYNC service class */
+ BT_SC_BPP_SERVICE_MASK = 0x00001000, /**< BPP service class */
+ BT_SC_BIP_SERVICE_MASK = 0x00002000, /**< BIP service class */
+ BT_SC_PANU_SERVICE_MASK = 0x00004000, /**< PANU service class */
+ BT_SC_NAP_SERVICE_MASK = 0x00008000, /**< NAP service class */
+ BT_SC_GN_SERVICE_MASK = 0x00010000, /**< GN service class */
+ BT_SC_SAP_SERVICE_MASK = 0x00020000, /**< SAP service class */
+ BT_SC_A2DP_SERVICE_MASK = 0x00040000, /**< A2DP service class */
+ BT_SC_AVRCP_SERVICE_MASK = 0x00080000, /**< AVRCP service class */
+ BT_SC_PBAP_SERVICE_MASK = 0x00100000, /**< PBAP service class */
+ BT_SC_HID_SERVICE_MASK = 0x00200000, /**< HID service class */
+ BT_SC_A2DP_SOURCE_SERVICE_MASK = 0x00400000, /**< A2DP SOURCE service class */
+ BT_SC_ALL_SERVICE_MASK = 0x00FFFFFF, /**< ALL service class */
+ BT_SC_MAX /**< MAX service class */
+} bt_service_class_t;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Enumerations of major service class.
+ * @since_tizen 2.3.1
+ */
+typedef enum
+{
+ BT_MAJOR_SERVICE_CLASS_LIMITED_DISCOVERABLE_MODE = 0x002000, /**< Limited discoverable mode */
+ BT_MAJOR_SERVICE_CLASS_POSITIONING = 0x010000, /**< Positioning class */
+ BT_MAJOR_SERVICE_CLASS_NETWORKING = 0x020000, /**< Networking class */
+ BT_MAJOR_SERVICE_CLASS_RENDERING = 0x040000, /**< Rendering class */
+ BT_MAJOR_SERVICE_CLASS_CAPTURING = 0x080000, /**< Capturing class */
+ BT_MAJOR_SERVICE_CLASS_OBJECT_TRANSFER = 0x100000, /**< Object transferring class */
+ BT_MAJOR_SERVICE_CLASS_AUDIO = 0x200000, /**< Audio class*/
+ BT_MAJOR_SERVICE_CLASS_TELEPHONY = 0x400000, /**< Telephony class */
+ BT_MAJOR_SERVICE_CLASS_INFORMATION = 0x800000, /**< Information class */
+} bt_major_service_class_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Enumerations of major device class.
+ * @since_tizen 2.3.1
+ */
+typedef enum
+{
+ BT_MAJOR_DEVICE_CLASS_MISC = 0x00, /**< Miscellaneous major device class*/
+ BT_MAJOR_DEVICE_CLASS_COMPUTER = 0x01, /**< Computer major device class */
+ BT_MAJOR_DEVICE_CLASS_PHONE = 0x02, /**< Phone major device class */
+ BT_MAJOR_DEVICE_CLASS_LAN_NETWORK_ACCESS_POINT = 0x03, /**< LAN/Network access point major device class */
+ BT_MAJOR_DEVICE_CLASS_AUDIO_VIDEO = 0x04, /**< Audio/Video major device class */
+ BT_MAJOR_DEVICE_CLASS_PERIPHERAL = 0x05, /**< Peripheral major device class */
+ BT_MAJOR_DEVICE_CLASS_IMAGING = 0x06, /**< Imaging major device class */
+ BT_MAJOR_DEVICE_CLASS_WEARABLE = 0x07, /**< Wearable device class */
+ BT_MAJOR_DEVICE_CLASS_TOY = 0x08, /**< Toy device class */
+ BT_MAJOR_DEVICE_CLASS_HEALTH = 0x09, /**< Health device class */
+ BT_MAJOR_DEVICE_CLASS_UNCATEGORIZED = 0x1F, /**< Uncategorized major device class */
+} bt_major_device_class_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Enumerations of minor device class.
+ * @since_tizen 2.3.1
+ */
+typedef enum
+{
+ BT_MINOR_DEVICE_CLASS_COMPUTER_UNCATEGORIZED = 0x00, /**< Uncategorized minor device class of computer */
+ BT_MINOR_DEVICE_CLASS_COMPUTER_DESKTOP_WORKSTATION = 0x04, /**< Desktop workstation minor device class of computer */
+ BT_MINOR_DEVICE_CLASS_COMPUTER_SERVER_CLASS = 0x08, /**< Server minor device class of computer */
+ BT_MINOR_DEVICE_CLASS_COMPUTER_LAPTOP = 0x0C, /**< Laptop minor device class of computer */
+ BT_MINOR_DEVICE_CLASS_COMPUTER_HANDHELD_PC_OR_PDA = 0x10, /**< Handheld PC/PDA minor device class of computer */
+ BT_MINOR_DEVICE_CLASS_COMPUTER_PALM_SIZED_PC_OR_PDA = 0x14, /**< Palm sized PC/PDA minor device class of computer */
+ BT_MINOR_DEVICE_CLASS_COMPUTER_WEARABLE_COMPUTER = 0x18, /**< Wearable(watch sized) minor device class of computer */
+
+ BT_MINOR_DEVICE_CLASS_PHONE_UNCATEGORIZED = 0x00, /**< Uncategorized minor device class of phone */
+ BT_MINOR_DEVICE_CLASS_PHONE_CELLULAR = 0x04, /**< Cellular minor device class of phone */
+ BT_MINOR_DEVICE_CLASS_PHONE_CORDLESS = 0x08, /**< Cordless minor device class of phone */
+ BT_MINOR_DEVICE_CLASS_PHONE_SMART_PHONE = 0x0C, /**< Smart phone minor device class of phone */
+ BT_MINOR_DEVICE_CLASS_PHONE_WIRED_MODEM_OR_VOICE_GATEWAY = 0x10, /**< Wired modem or voice gateway minor device class of phone */
+ BT_MINOR_DEVICE_CLASS_PHONE_COMMON_ISDN_ACCESS = 0x14, /**< Common ISDN minor device class of phone */
+
+ BT_MINOR_DEVICE_CLASS_LAN_NETWORK_ACCESS_POINT_FULLY_AVAILABLE = 0x04, /**< Fully available minor device class of LAN/Network access point */
+ BT_MINOR_DEVICE_CLASS_LAN_NETWORK_ACCESS_POINT_1_TO_17_PERCENT_UTILIZED = 0x20, /**< 1-17% utilized minor device class of LAN/Network access point */
+ BT_MINOR_DEVICE_CLASS_LAN_NETWORK_ACCESS_POINT_17_TO_33_PERCENT_UTILIZED = 0x40, /**< 17-33% utilized minor device class of LAN/Network access point */
+ BT_MINOR_DEVICE_CLASS_LAN_NETWORK_ACCESS_POINT_33_TO_50_PERCENT_UTILIZED = 0x60, /**< 33-50% utilized minor device class of LAN/Network access point */
+ BT_MINOR_DEVICE_CLASS_LAN_NETWORK_ACCESS_POINT_50_to_67_PERCENT_UTILIZED = 0x80, /**< 50-67% utilized minor device class of LAN/Network access point */
+ BT_MINOR_DEVICE_CLASS_LAN_NETWORK_ACCESS_POINT_67_TO_83_PERCENT_UTILIZED = 0xA0, /**< 67-83% utilized minor device class of LAN/Network access point */
+ BT_MINOR_DEVICE_CLASS_LAN_NETWORK_ACCESS_POINT_83_TO_99_PERCENT_UTILIZED = 0xC0, /**< 83-99% utilized minor device class of LAN/Network access point */
+ BT_MINOR_DEVICE_CLASS_LAN_NETWORK_ACCESS_POINT_NO_SERVICE_AVAILABLE = 0xE0, /**< No service available minor device class of LAN/Network access point */
+
+ BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_UNCATEGORIZED = 0x00, /**< Uncategorized minor device class of audio/video */
+ BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_WEARABLE_HEADSET = 0x04, /**< Wearable headset minor device class of audio/video */
+ BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_HANDS_FREE = 0x08, /**< Hands-free minor device class of audio/video */
+ BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_MICROPHONE = 0x10, /**< Microphone minor device class of audio/video */
+ BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_LOUDSPEAKER = 0x14, /**< Loudspeaker minor device class of audio/video */
+ BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_HEADPHONES = 0x18, /**< Headphones minor device class of audio/video */
+ BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_PORTABLE_AUDIO = 0x1C, /**< Portable audio minor device class of audio/video */
+ BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_CAR_AUDIO = 0x20, /**< Car audio minor device class of audio/video */
+ BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_SET_TOP_BOX = 0x24, /**< Set-top box minor device class of audio/video */
+ BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_HIFI_AUDIO_DEVICE = 0x28, /**< Hifi audio minor device class of audio/video */
+ BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_VCR = 0x2C, /**< VCR minor device class of audio/video */
+ BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_VIDEO_CAMERA = 0x30, /**< Video camera minor device class of audio/video */
+ BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_CAMCORDER = 0x34, /**< Camcorder minor device class of audio/video */
+ BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_VIDEO_MONITOR = 0x38, /**< Video monitor minor device class of audio/video */
+ BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_VIDEO_DISPLAY_LOUDSPEAKER = 0x3C, /**< Video display and loudspeaker minor device class of audio/video */
+ BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_VIDEO_CONFERENCING = 0x40, /**< Video conferencing minor device class of audio/video */
+ BT_MINOR_DEVICE_CLASS_AUDIO_VIDEO_GAMING_TOY = 0x48, /**< Gaming/toy minor device class of audio/video */
+
+ BT_MINOR_DEVICE_CLASS_PERIPHERA_UNCATEGORIZED = 0x00, /**< Uncategorized minor device class of peripheral */
+ BT_MINOR_DEVICE_CLASS_PERIPHERAL_KEY_BOARD = 0x40, /**< Key board minor device class of peripheral */
+ BT_MINOR_DEVICE_CLASS_PERIPHERAL_POINTING_DEVICE = 0x80, /**< Pointing device minor device class of peripheral */
+ BT_MINOR_DEVICE_CLASS_PERIPHERAL_COMBO_KEYBOARD_POINTING_DEVICE = 0xC0, /**< Combo keyboard or pointing device minor device class of peripheral */
+ BT_MINOR_DEVICE_CLASS_PERIPHERAL_JOYSTICK = 0x04, /**< Joystick minor device class of peripheral */
+ BT_MINOR_DEVICE_CLASS_PERIPHERAL_GAME_PAD = 0x08, /**< Game pad minor device class of peripheral */
+ BT_MINOR_DEVICE_CLASS_PERIPHERAL_REMOTE_CONTROL = 0x0C, /**< Remote control minor device class of peripheral */
+ BT_MINOR_DEVICE_CLASS_PERIPHERAL_SENSING_DEVICE = 0x10, /**< Sensing device minor device class of peripheral */
+ BT_MINOR_DEVICE_CLASS_PERIPHERAL_DIGITIZER_TABLET = 0x14, /**< Digitizer minor device class of peripheral */
+ BT_MINOR_DEVICE_CLASS_PERIPHERAL_CARD_READER = 0x18, /**< Card reader minor device class of peripheral */
+ BT_MINOR_DEVICE_CLASS_PERIPHERAL_DIGITAL_PEN = 0x1C, /**< Digital pen minor device class of peripheral */
+ BT_MINOR_DEVICE_CLASS_PERIPHERAL_HANDHELD_SCANNER = 0x20, /**< Handheld scanner minor device class of peripheral */
+ BT_MINOR_DEVICE_CLASS_PERIPHERAL_HANDHELD_GESTURAL_INPUT_DEVICE = 0x24, /**< Handheld gestural input device minor device class of peripheral */
+
+ BT_MINOR_DEVICE_CLASS_IMAGING_DISPLAY = 0x10, /**< Display minor device class of imaging */
+ BT_MINOR_DEVICE_CLASS_IMAGING_CAMERA = 0x20, /**< Camera minor device class of imaging */
+ BT_MINOR_DEVICE_CLASS_IMAGING_SCANNER = 0x40, /**< Scanner minor device class of imaging */
+ BT_MINOR_DEVICE_CLASS_IMAGING_PRINTER = 0x80, /**< Printer minor device class of imaging */
+
+ BT_MINOR_DEVICE_CLASS_WEARABLE_WRIST_WATCH = 0x04, /**< Wrist watch minor device class of wearable */
+ BT_MINOR_DEVICE_CLASS_WEARABLE_PAGER = 0x08, /**< Pager minor device class of wearable */
+ BT_MINOR_DEVICE_CLASS_WEARABLE_JACKET = 0x0C, /**< Jacket minor device class of wearable */
+ BT_MINOR_DEVICE_CLASS_WEARABLE_HELMET = 0x10, /**< Helmet minor device class of wearable */
+ BT_MINOR_DEVICE_CLASS_WEARABLE_GLASSES = 0x14, /**< Glasses minor device class of wearable */
+
+ BT_MINOR_DEVICE_CLASS_TOY_ROBOT = 0x04, /**< Robot minor device class of toy */
+ BT_MINOR_DEVICE_CLASS_TOY_VEHICLE = 0x08, /**< Vehicle minor device class of toy */
+ BT_MINOR_DEVICE_CLASS_TOY_DOLL_ACTION = 0x0C, /**< Doll/Action minor device class of toy */
+ BT_MINOR_DEVICE_CLASS_TOY_CONTROLLER = 0x10, /**< Controller minor device class of toy */
+ BT_MINOR_DEVICE_CLASS_TOY_GAME = 0x14, /**< Game minor device class of toy */
+
+ BT_MINOR_DEVICE_CLASS_HEALTH_UNCATEGORIZED = 0x00, /**< Uncategorized minor device class of health */
+ BT_MINOR_DEVICE_CLASS_HEALTH_BLOOD_PRESSURE_MONITOR = 0x04, /**< Blood pressure monitor minor device class of health */
+ BT_MINOR_DEVICE_CLASS_HEALTH_THERMOMETER = 0x08, /**< Thermometer minor device class of health */
+ BT_MINOR_DEVICE_CLASS_HEALTH_WEIGHING_SCALE = 0x0C, /**< Weighing scale minor device class of health */
+ BT_MINOR_DEVICE_CLASS_HEALTH_GLUCOSE_METER = 0x10, /**< Glucose minor device class of health */
+ BT_MINOR_DEVICE_CLASS_HEALTH_PULSE_OXIMETER = 0x14, /**< Pulse oximeter minor device class of health */
+ BT_MINOR_DEVICE_CLASS_HEALTH_HEART_PULSE_RATE_MONITOR = 0x18, /**< Heart/Pulse rate monitor minor device class of health */
+ BT_MINOR_DEVICE_CLASS_HEALTH_DATA_DISPLAY = 0x1C, /**< Health data display minor device class of health */
+ BT_MINOR_DEVICE_CLASS_HEALTH_STEP_COUNTER = 0x20, /**< Step counter minor device class of health */
+ BT_MINOR_DEVICE_CLASS_HEALTH_BODY_COMPOSITION_ANALYZER = 0x24, /**< Body composition analyzer minor device class of health */
+ BT_MINOR_DEVICE_CLASS_HEALTH_PEAK_FLOW_MONITOR = 0x28, /**< Peak flow monitor minor device class of health */
+ BT_MINOR_DEVICE_CLASS_HEALTH_MEDICATION_MONITOR = 0x2C, /**< Medication monitor minor device class of health */
+ BT_MINOR_DEVICE_CLASS_HEALTH_KNEE_PROSTHESIS = 0x30, /**< Knee prosthesis minor device class of health */
+ BT_MINOR_DEVICE_CLASS_HEALTH_ANKLE_PROSTHESIS = 0x34, /**< Ankle prosthesis minor device class of health */
+} bt_minor_device_class_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Enumerations of gap appearance type.
+ * @since_tizen 2.3.1
+ */
+typedef enum
+{
+ BT_APPEARANCE_TYPE_UNKNOWN = 0x00, /**< Unknown appearance type */
+ BT_APPEARANCE_TYPE_GENERIC_PHONE = 0x40, /**< Generic Phone type - Generic category */
+ BT_APPEARANCE_TYPE_GENERIC_COMPUTER = 0x80, /**< Generic Computer type - Generic category */
+ BT_APPEARANCE_TYPE_GENERIC_WATCH = 0xC0, /**< Generic Watch type - Generic category */
+} bt_appearance_type_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Enumerations of connected Bluetooth device event role.
+ * @since_tizen 2.3.1
+ */
+typedef enum
+{
+ BT_SOCKET_UNKNOWN = 0x00, /**< Unknown role*/
+ BT_SOCKET_SERVER , /**< Server role*/
+ BT_SOCKET_CLIENT, /**< Client role*/
+} bt_socket_role_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Enumerations of Bluetooth socket connection state.
+ * @since_tizen 2.3.1
+ */
+typedef enum
+{
+ BT_SOCKET_CONNECTED, /**< RFCOMM is connected */
+ BT_SOCKET_DISCONNECTED, /**< RFCOMM is disconnected */
+} bt_socket_connection_state_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_MODULE
+ * @brief Enumerations for the types of profiles related with audio
+ * @since_tizen 2.3.1
+ */
+typedef enum {
+ BT_AUDIO_PROFILE_TYPE_ALL = 0, /**< All supported profiles related with audio */
+ BT_AUDIO_PROFILE_TYPE_HSP_HFP, /**< HSP(Headset Profile) and HFP(Hands-Free Profile) */
+ BT_AUDIO_PROFILE_TYPE_A2DP, /**< A2DP(Advanced Audio Distribution Profile) */
+ BT_AUDIO_PROFILE_TYPE_AG, /**< AG(Audio Gateway) */
+} bt_audio_profile_type_e;
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Enumerations for the call handling event
+ * @since_tizen 2.3.1
+ */
+typedef enum {
+ BT_AG_CALL_HANDLING_EVENT_ANSWER = 0x00, /**< Request to answer an incoming call */
+ BT_AG_CALL_HANDLING_EVENT_RELEASE, /**< Request to release a call */
+ BT_AG_CALL_HANDLING_EVENT_REJECT, /**< Request to reject an incoming call */
+} bt_ag_call_handling_event_e;
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Enumerations for the multi call handling event
+ * @since_tizen 2.3.1
+ */
+typedef enum {
+ BT_AG_MULTI_CALL_HANDLING_EVENT_RELEASE_HELD_CALLS = 0x00, /**< Request to release held calls */
+ BT_AG_MULTI_CALL_HANDLING_EVENT_RELEASE_ACTIVE_CALLS, /**< Request to release active calls */
+ BT_AG_MULTI_CALL_HANDLING_EVENT_ACTIVATE_HELD_CALL, /**< Request to put active calls into hold state and activate another (held or waiting) call */
+ BT_AG_MULTI_CALL_HANDLING_EVENT_MERGE_CALLS, /**< Request to add a held call to the conversation */
+ BT_AG_MULTI_CALL_HANDLING_EVENT_EXPLICIT_CALL_TRANSFER, /**< Request to let a user who has two calls to connect these two calls together and release its connections to both other parties */
+} bt_ag_multi_call_handling_event_e;
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Enumerations for the call state
+ * @since_tizen 2.3.1
+ */
+typedef enum {
+ BT_AG_CALL_EVENT_IDLE = 0x00, /**< Idle */
+ BT_AG_CALL_EVENT_ANSWERED, /**< Answered */
+ BT_AG_CALL_EVENT_HELD, /**< Held */
+ BT_AG_CALL_EVENT_RETRIEVED, /**< Retrieved */
+ BT_AG_CALL_EVENT_DIALING, /**< Dialing */
+ BT_AG_CALL_EVENT_ALERTING, /**< Alerting */
+ BT_AG_CALL_EVENT_INCOMING, /**< Incoming */
+} bt_ag_call_event_e;
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Enumerations for the call state
+ * @since_tizen 2.3.1
+ */
+typedef enum {
+ BT_AG_CALL_STATE_IDLE = 0x00, /**< Idle state */
+ BT_AG_CALL_STATE_ACTIVE, /**< Active state */
+ BT_AG_CALL_STATE_HELD, /**< Held state */
+ BT_AG_CALL_STATE_DIALING, /**< Dialing state */
+ BT_AG_CALL_STATE_ALERTING, /**< Alerting state */
+ BT_AG_CALL_STATE_INCOMING, /**< Incoming state */
+ BT_AG_CALL_STATE_WAITING, /**< Waiting for connected indication event after answering an incoming call*/
+} bt_ag_call_state_e;
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Enumerations for the equalizer state
+ * @since_tizen 2.3.1
+ */
+typedef enum {
+ BT_AVRCP_EQUALIZER_STATE_OFF = 0x01, /**< Equalizer Off */
+ BT_AVRCP_EQUALIZER_STATE_ON, /**< Equalizer On */
+} bt_avrcp_equalizer_state_e;
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Enumerations for the repeat mode
+ * @since_tizen 2.3.1
+ */
+typedef enum {
+ BT_AVRCP_REPEAT_MODE_OFF = 0x01, /**< Repeat Off */
+ BT_AVRCP_REPEAT_MODE_SINGLE_TRACK, /**< Single track repeat */
+ BT_AVRCP_REPEAT_MODE_ALL_TRACK, /**< All track repeat */
+ BT_AVRCP_REPEAT_MODE_GROUP, /**< Group repeat */
+} bt_avrcp_repeat_mode_e;
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Enumerations for the shuffle mode
+ * @since_tizen 2.3.1
+ */
+typedef enum {
+ BT_AVRCP_SHUFFLE_MODE_OFF = 0x01, /**< Shuffle Off */
+ BT_AVRCP_SHUFFLE_MODE_ALL_TRACK, /**< All tracks shuffle */
+ BT_AVRCP_SHUFFLE_MODE_GROUP, /**< Group shuffle */
+} bt_avrcp_shuffle_mode_e;
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Enumerations for the scan mode
+ * @since_tizen 2.3.1
+ */
+typedef enum {
+ BT_AVRCP_SCAN_MODE_OFF = 0x01, /**< Scan Off */
+ BT_AVRCP_SCAN_MODE_ALL_TRACK, /**< All tracks scan */
+ BT_AVRCP_SCAN_MODE_GROUP, /**< Group scan */
+} bt_avrcp_scan_mode_e;
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Enumerations for the player state
+ * @since_tizen 2.3.1
+ */
+typedef enum {
+ BT_AVRCP_PLAYER_STATE_STOPPED = 0x00, /**< Stopped */
+ BT_AVRCP_PLAYER_STATE_PLAYING, /**< Playing */
+ BT_AVRCP_PLAYER_STATE_PAUSED, /**< Paused */
+ BT_AVRCP_PLAYER_STATE_FORWARD_SEEK, /**< Seek Forward */
+ BT_AVRCP_PLAYER_STATE_REWIND_SEEK, /**< Seek Rewind */
+} bt_avrcp_player_state_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_HDP_MODULE
+ * @brief Enumerations for the data channel type
+ * @since_tizen 2.3.1
+ */
+typedef enum {
+ BT_HDP_CHANNEL_TYPE_RELIABLE = 0x01, /**< Reliable Data Channel */
+ BT_HDP_CHANNEL_TYPE_STREAMING, /**< Streaming Data Channel */
+} bt_hdp_channel_type_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Enumerations of the integer type for GATT handle's value
+ * @since_tizen 2.3.1
+ */
+typedef enum {
+ BT_DATA_TYPE_SINT8, /**< 8 bit signed int type */
+ BT_DATA_TYPE_SINT16, /**< 16 bit signed int type */
+ BT_DATA_TYPE_SINT32, /**< 32 bit signed int type */
+ BT_DATA_TYPE_UINT8, /**< 8 bit unsigned int type */
+ BT_DATA_TYPE_UINT16, /**< 16 bit unsigned int type */
+ BT_DATA_TYPE_UINT32 /**< 32 bit unsigned int type */
+} bt_data_type_int_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Enumerations of the float type for GATT handle's value
+ * @since_tizen 2.3.1
+ */
+typedef enum {
+ BT_DATA_TYPE_FLOAT, /**< 32 bit float type */
+ BT_DATA_TYPE_SFLOAT /**< 16 bit float type */
+} bt_data_type_float_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Enumerations of the write type
+ * @since_tizen 2.3.1
+ */
+typedef enum {
+ BT_GATT_WRITE_TYPE_WRITE_NO_RESPONSE, /**< Write without response type */
+ BT_GATT_WRITE_TYPE_WRITE /**< Write type */
+} bt_gatt_write_type_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Enumerations of the GATT handle's type
+ * @since_tizen 2.3.1
+ */
+typedef enum {
+ BT_GATT_TYPE_SERVICE = 0x01, /**< GATT service type */
+ BT_GATT_TYPE_CHARACTERISTIC = 0x02, /** GATT characteristic type */
+ BT_GATT_TYPE_DESCRIPTOR = 0x03, /** GATT descriptor type */
+} bt_gatt_type_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Enumerations of the service type
+ * @since_tizen 2.3.1
+ */
+typedef enum {
+ BT_GATT_SERVICE_TYPE_PRIMARY = 0x01, /**< GATT primary service type */
+ BT_GATT_SERVICE_TYPE_SECONDARY = 0x02, /**< GATT secondary service type */
+} bt_gatt_service_type_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Enumerations of the characteristic's property
+ * @since_tizen 2.3.1
+ */
+typedef enum {
+ BT_GATT_PROPERTY_BROADCAST = 0x01, /**< Broadcast property */
+ BT_GATT_PROPERTY_READ = 0x02, /**< Read property */
+ BT_GATT_PROPERTY_WRITE_WITHOUT_RESPONSE = 0x04, /**< Write without response property */
+ BT_GATT_PROPERTY_WRITE = 0x08, /**< Write property */
+ BT_GATT_PROPERTY_NOTIFY = 0x10, /**< Notify property */
+ BT_GATT_PROPERTY_INDICATE = 0x20, /**< Indicate property */
+ BT_GATT_PROPERTY_AUTHENTICATED_SIGNED_WRITES = 0x40, /**< Authenticated signed writes property */
+ BT_GATT_PROPERTY_EXTENDED_PROPERTIES = 0x80, /**< Extended properties */
+} bt_gatt_property_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PAN_PANU_MODULE
+ * @brief Enumerations for the types of PAN(Personal Area Networking) service
+ * @since_tizen 2.3.1
+ */
+typedef enum {
+ BT_PANU_SERVICE_TYPE_NAP = 0, /**< Network Access Point */
+} bt_panu_service_type_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief The handle to control Bluetooth LE advertising
+ * @since_tizen 2.3.1
+ */
+typedef void* bt_advertiser_h;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief The handle of a service, characteristic or descriptor
+ * @since_tizen 2.3.1
+ */
+typedef void* bt_gatt_h;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief The handle of a GATT client which is associated with a remote device
+ * @since_tizen 2.3.1
+ */
+typedef void* bt_gatt_client_h;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief The handle of calls state
+ * @since_tizen 2.3.1
+ */
+typedef void* bt_call_list_h;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Class structure of device and service.
+ * @since_tizen 2.3.1
+ *
+ * @see #bt_device_info_s
+ * @see #bt_adapter_device_discovery_info_s
+ * @see bt_device_bond_created_cb()
+ * @see bt_adapter_device_discovery_state_changed_cb()
+ */
+typedef struct
+{
+ bt_major_device_class_e major_device_class; /**< Major device class. */
+ bt_minor_device_class_e minor_device_class; /**< Minor device class. */
+ int major_service_class_mask; /**< Major service class mask.
+ This value can be a combination of #bt_major_service_class_e like #BT_MAJOR_SERVICE_CLASS_RENDERING | #BT_MAJOR_SERVICE_CLASS_AUDIO */
+} bt_class_s;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Structure of device discovery information.
+ * @since_tizen 2.3.1
+ *
+ * @see #bt_class_s
+ * @see bt_adapter_device_discovery_state_changed_cb()
+ */
+typedef struct
+{
+ char *remote_address; /**< The address of remote device */
+ char *remote_name; /**< The name of remote device */
+ bt_class_s bt_class; /**< The Bluetooth classes */
+ int rssi; /**< The strength indicator of received signal */
+ bool is_bonded; /**< The bonding state */
+ char **service_uuid; /**< The UUID list of service */
+ int service_count; /**< The number of services */
+ bt_appearance_type_e appearance; /**< The Bluetooth appearance */
+ int manufacturer_data_len; /**< manufacturer specific data length */
+ char *manufacturer_data; /**< manufacturer specific data */
+} bt_adapter_device_discovery_info_s;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Structure of le scan result information.
+ * @since_tizen 2.3.1
+ *
+ * @see bt_adapter_le_start_scan()
+ */
+typedef struct
+{
+ char *remote_address; /**< The address of remote device */
+ bt_device_address_type_e address_type; /**< The address type of remote device */
+ int rssi; /**< The strength indicator of received signal */
+ int adv_data_len; /**< advertising indication data length */
+ char *adv_data; /**< advertising indication data */
+ int scan_data_len; /**< scan response data length */
+ char *scan_data; /**< scan response data */
+} bt_adapter_le_device_scan_result_info_s;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief LE service data structure
+ * @since_tizen 2.3.1
+ *
+ * @see bt_adapter_le_get_scan_result_service_data()
+ */
+typedef struct
+{
+ char *service_uuid; /**< 16 bit UUID of the service data */
+ char *service_data; /**< Service data */
+ int service_data_len; /**< Service data length */
+} bt_adapter_le_service_data_s;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Device information structure used for identifying pear device.
+ * @since_tizen 2.3.1
+ *
+ * @see #bt_class_s
+ * @see bt_device_bond_created_cb()
+ */
+typedef struct
+{
+ char *remote_address; /**< The address of remote device */
+ char *remote_name; /**< The name of remote device */
+ bt_class_s bt_class; /**< The Bluetooth classes */
+ char **service_uuid; /**< The UUID list of service */
+ int service_count; /**< The number of services */
+ bool is_bonded; /**< The bonding state */
+ bool is_connected; /**< The connection state */
+ bool is_authorized; /**< The authorization state */
+ int manufacturer_data_len; /**< manufacturer specific data length */
+ char *manufacturer_data; /**< manufacturer specific data */
+} bt_device_info_s;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Service Discovery Protocol (SDP) data structure.
+ * @since_tizen 2.3.1
+ *
+ * @details This protocol is used for discovering available services or pear device,
+ * and finding one to connect with.
+ *
+ * @see bt_device_service_searched_cb()
+ */
+typedef struct
+{
+ char *remote_address; /**< The address of remote device */
+ char **service_uuid; /**< The UUID list of service */
+ int service_count; /**< The number of services. */
+} bt_device_sdp_info_s;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Device connection information structure.
+ * @since_tizen 2.3.1
+ *
+ * @see bt_device_connection_state_changed_cb()
+ */
+typedef struct
+{
+ char *remote_address; /**< The address of remote device */
+ bt_device_connection_link_type_e link; /**< Link type */
+ bt_device_disconnect_reason_e disconn_reason; /**< Disconnection reason */
+} bt_device_connection_info_s;
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Device LE connection update structure.
+ * @since_tizen 2.3.1
+ *
+ * @see bt_device_le_conn_update()
+ */
+typedef struct
+{
+ unsigned int interval_min; /**< Minimum value for the connection event interval (msec) */
+ unsigned int interval_max; /**< Maximum value for the connection event interval (msec) */
+ unsigned int latency; /**< Slave latency (msec) */
+ unsigned int time_out; /**< Supervision timeout (msec) */
+} bt_le_conn_update_s;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Rfcomm connection data used for exchanging data between Bluetooth devices.
+ * @since_tizen 2.3.1
+ *
+ * @see bt_socket_connection_state_changed_cb()
+ */
+typedef struct
+{
+ int socket_fd; /**< The file descriptor of connected socket */
+ int server_fd; /**< The file descriptor of the server socket or -1 for client connection */
+ bt_socket_role_e local_role; /**< The local device role in this connection */
+ char *remote_address; /**< The remote device address */
+ char *service_uuid; /**< The service UUId */
+} bt_socket_connection_s;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Structure of RFCOMM received data.
+ * @since_tizen 2.3.1
+ *
+ * @remarks User can use standard linux functions for reading/writing
+ * data from/to sockets.
+ *
+ * @see bt_socket_data_received_cb()
+ */
+typedef struct
+{
+ int socket_fd; /**< The socket fd */
+ int data_size; /**< The length of the received data */
+ char *data; /**< The received data */
+} bt_socket_received_data_s;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Called when the Bluetooth adapter state changes.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] result The result of the adapter state changing
+ * @param[in] adapter_state The adapter state to be changed
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_adapter_set_state_changed_cb()
+ * @see bt_adapter_unset_state_changed_cb()
+ */
+typedef void (*bt_adapter_state_changed_cb)(int result, bt_adapter_state_e adapter_state, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Called when adapter name changes.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] device_name The name of the Bluetooth device to be changed
+ * @param[in] user_data The user data passed from the callback registration function
+ * @pre This function will be invoked when the name of Bluetooth adapter changes
+ * if you register this callback using bt_adapter_set_name_changed_cb().
+ * @see bt_adapter_set_name()
+ * @see bt_adapter_set_name_changed_cb()
+ * @see bt_adapter_unset_name_changed_cb()
+ */
+typedef void (*bt_adapter_name_changed_cb)(char *device_name, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Called when the visibility mode changes.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] result The result of the visibility mode changing
+ * @param[in] visibility_mode The visibility mode to be changed
+ * @param[in] user_data The user data passed from the callback registration function
+ *
+ * @pre This function will be invoked when the visibility of Bluetooth adapter changes
+ * if you register this callback using bt_adapter_set_visibility_mode_changed_cb().
+ *
+ * @see bt_adapter_set_visibility_mode_changed_cb()
+ * @see bt_adapter_unset_visibility_mode_changed_cb()
+ */
+typedef void (*bt_adapter_visibility_mode_changed_cb)
+ (int result, bt_adapter_visibility_mode_e visibility_mode, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Called every second until the visibility mode is changed to #BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE.
+ * @since_tizen 2.3.1
+ *
+ * @remarks This callback function is called only if visibility mode is #BT_ADAPTER_VISIBILITY_MODE_LIMITED_DISCOVERABLE.
+ * @param[in] duration The duration until the visibility mode is changed to #BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE (in seconds)
+ * @param[in] user_data The user data passed from the callback registration function
+ * @pre This function will be invoked if you register this callback using bt_adapter_set_visibility_duration_changed_cb().
+ * @see bt_adapter_set_visibility_duration_changed_cb()
+ * @see bt_adapter_unset_visibility_duration_changed_cb()
+ */
+typedef void (*bt_adapter_visibility_duration_changed_cb)(int duration, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Called when the state of device discovery changes.
+ * @since_tizen 2.3.1
+ *
+ * @remarks If \a discovery_state is #BT_ADAPTER_DEVICE_DISCOVERY_FOUND,
+ * then you can get some information, such as remote device address, remote device name, rssi, and bonding state.
+ *
+ * @param[in] result The result of the device discovery
+ * @param[in] discovery_state The discovery state to be changed
+ * @param[in] discovery_info The information of the discovered device \n
+ * If \a discovery_state is #BT_ADAPTER_DEVICE_DISCOVERY_STARTED or
+ * #BT_ADAPTER_DEVICE_DISCOVERY_FINISHED, then \a discovery_info is NULL.
+ * @param[in] user_data The user data passed from the callback registration function
+ *
+ * @pre Either bt_adapter_start_device_discovery() or bt_adapter_stop_device_discovery() will invoke this function
+ * if you register this callback using bt_adapter_set_device_discovery_state_changed_cb().
+ *
+ * @see bt_adapter_start_device_discovery()
+ * @see bt_adapter_stop_device_discovery()
+ * @see bt_adapter_set_device_discovery_state_changed_cb()
+ * @see bt_adapter_unset_device_discovery_state_changed_cb()
+ *
+ */
+typedef void (*bt_adapter_device_discovery_state_changed_cb)
+ (int result, bt_adapter_device_discovery_state_e discovery_state, bt_adapter_device_discovery_info_s *discovery_info, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Called when you get bonded devices repeatedly.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] device_info The bonded device information
+ * @param[in] user_data The user data passed from the foreach function
+ * @return @c true to continue with the next iteration of the loop,
+ * \n @c false to break out of the loop.
+ * @pre bt_adapter_foreach_bonded_device() will invoke this function.
+ *
+ * @see bt_adapter_foreach_bonded_device()
+ *
+ */
+typedef bool (*bt_adapter_bonded_device_cb)(bt_device_info_s *device_info, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Called when the connectable state changes.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] result The result of the connectable state changing
+ * @param[in] connectable The connectable to be changed
+ * @param[in] user_data The user data passed from the callback registration function
+ *
+ * @pre This function will be invoked when the connectable state of local Bluetooth adapter changes
+ * if you register this callback using bt_adapter_set_connectable_changed_cb().
+ *
+ * @see bt_adapter_set_connectable()
+ * @see bt_adapter_set_connectable_changed_cb()
+ * @see bt_adapter_unset_connectable_changed_cb()
+ */
+typedef void (*bt_adapter_connectable_changed_cb)
+ (int result, bool connectable, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Called when the LE advertisement has been found.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] result The result of the LE scan
+ * @param[in] info The information of the found LE advertisement.
+ * @param[in] user_data The user data passed from the start function
+ *
+ * @see bt_adapter_le_start_scan()
+ *
+ */
+typedef void (*bt_adapter_le_scan_result_cb)(int result,
+ bt_adapter_le_device_scan_result_info_s *info, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Called when the state of advertiser changes.
+ * @since_tizen 2.3.1
+ *
+ * @param[out] result The result of the requested state change of advertiser
+ * @param[out] advertiser The handle of the state changed advertiser
+ * @param[out] adv_state The advertiser state to be changed
+ * @param[out] user_data The user data passed from the start function
+ *
+ * @see bt_adapter_le_start_advertising_new()
+ * @see bt_adapter_le_stop_advertising()
+ */
+typedef void (*bt_adapter_le_advertising_state_changed_cb)(int result,
+ bt_advertiser_h advertiser, bt_adapter_le_advertising_state_e adv_state, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Called when the Bluetooth adapter le state changes.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] result The result of the adapter state changing
+ * @param[in] adapter_le_state The adapter le state to be changed
+ * @param[in] user_data The user data passed from the callback registration function
+ * @pre Either bt_adapter_le_enable() or bt_adapter_le_disable() will invoke this callback if you register this callback using bt_adapter_le_set_state_changed_cb().
+ * @see bt_adapter_le_enable()
+ * @see bt_adapter_le_disable()
+ * @see bt_adapter_le_set_state_changed_cb()
+ * @see bt_adapter_le_unset_state_changed_cb()
+ */
+typedef void (*bt_adapter_le_state_changed_cb)(int result, bt_adapter_le_state_e adapter_le_state, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Called when the process of creating bond finishes.
+ * @since_tizen 2.3.1
+ *
+ * @remarks If the remote user does not respond within 60 seconds, a time out will happen with #BT_ERROR_TIMED_OUT result code.\n
+ * If bt_device_cancel_bonding() is called and it returns #BT_ERROR_NONE, then this callback function will be called
+ * with #BT_ERROR_CANCELLED result. \n
+ * If creating a bond succeeds but service search fails, then this callback will be called with #BT_ERROR_SERVICE_SEARCH_FAILED.
+ * In this case, you should try service search again by bt_device_start_service_search() to get the supported service list.
+ *
+ * @param[in] result The result of the bonding device
+ * @param[in] device_info The device information which you creates bond with
+ * @param[in] user_data The user data passed from the callback registration function
+ *
+ * @pre Either bt_device_create_bond() will invoke this function
+ * if you register this callback using bt_device_set_bond_created_cb().
+ *
+ * @see bt_device_create_bond()
+ * @see bt_device_cancel_bonding()
+ * @see bt_device_set_bond_created_cb()
+ * @see bt_device_unset_bond_created_cb()
+ */
+typedef void (*bt_device_bond_created_cb)(int result, bt_device_info_s *device_info, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Called when you get connected profiles repeatedly.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] profile The connected Bluetooth profile
+ * @param[in] user_data The user data passed from the foreach function
+ * @return @c true to continue with the next iteration of the loop,
+ * \n @c false to break out of the loop.
+ * @pre bt_device_foreach_connected_profiles() will invoke this function.
+ * @see bt_device_foreach_connected_profiles()
+ */
+typedef bool (*bt_device_connected_profile)(bt_profile_e profile, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Called when the bond destroys.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] result The result that a bond is destroyed
+ * @param[in] remote_address The address of the remote Bluetooth device to destroy bond with
+ * @param[in] user_data The user data passed from the callback registration function
+ * @pre bt_device_destroy_bond() will invoke this function
+ * if you register this callback using bt_device_set_bond_destroyed_cb().
+ *
+ * @see bt_device_destroy_bond()
+ * @see bt_device_set_bond_destroyed_cb()
+ * @see bt_device_unset_bond_destroyed_cb()
+ */
+typedef void (*bt_device_bond_destroyed_cb)(int result, char *remote_address, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Called when the authorization of device changes.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] authorization The authorization of device
+ * @param[in] remote_address The address of the remote Bluetooth device which is (un)authorized
+ * @param[in] user_data The user data passed from the callback registration function
+ * @pre bt_device_set_authorization() will invoke this function if you register this callback using bt_device_set_authorization_changed_cb().
+ *
+ * @see bt_device_set_authorization()
+ * @see #bt_device_set_authorization_changed_cb()
+ * @see #bt_device_unset_authorization_changed_cb()
+ */
+typedef void (*bt_device_authorization_changed_cb)
+ (bt_device_authorization_e authorization, char *remote_address, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Called when the process of service search finishes.
+ * @since_tizen 2.3.1
+ *
+ * @remark
+ *
+ * @param[in] result The result of the service searching
+ * @param[in] sdp_info The structure of service lists found on a device
+ * @param[in] user_data The user data passed from the callback registration function
+ * @pre Either bt_device_start_service_search() will invoke this function
+ * if you register this callback using bt_device_set_service_searched_cb().
+ *
+ * @see bt_device_start_service_search()
+ * @see bt_device_set_service_searched_cb()
+ * @see bt_device_unset_service_searched_cb()
+ *
+ */
+typedef void (*bt_device_service_searched_cb)(int result, bt_device_sdp_info_s *sdp_info, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_DEVICE_MODULE
+ * @brief Called when the connection state is changed.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] connected The connection status: (@c true = connected, @c false = disconnected)
+ * @param[in] conn_info The connection information
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_device_set_connection_state_changed_cb()
+ * @see bt_device_unset_connection_state_changed_cb()
+ */
+typedef void (*bt_device_connection_state_changed_cb)(bool connected, bt_device_connection_info_s *conn_info, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Called when you receive data.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] data The received data from the remote device
+ * @param[in] user_data The user data passed from the callback registration function
+ *
+ * @pre When the connected remote Bluetooth device invokes bt_socket_send_data(),
+ * this function will be invoked if you register this function using bt_socket_set_data_received_cb().
+ *
+ * @see bt_socket_set_data_received_cb()
+ * @see bt_socket_unset_data_received_cb()
+ * @see bt_socket_send_data()
+ */
+typedef void (*bt_socket_data_received_cb)(bt_socket_received_data_s *data, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Called when the socket connection state changes.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] result The result of connection state changing
+ * @param[in] connection_state The connection state
+ * @param[in] connection The connection information which is established or disconnected
+ * @param[in] user_data The user data passed from the callback registration function
+ * @pre Either bt_socket_connect_rfcomm() will invoke this function.
+ * In addtion, bt_socket_connection_state_changed_cb() will be invoked when the socket connection state is changed.
+ * @see bt_socket_listen_and_accept_rfcomm()
+ * @see bt_socket_connect_rfcomm()
+ * @see bt_socket_set_connection_state_changed_cb()
+ * @see bt_socket_unset_connection_state_changed_cb()
+ */
+typedef void (*bt_socket_connection_state_changed_cb)
+ (int result, bt_socket_connection_state_e connection_state, bt_socket_connection_s *connection, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_SOCKET_MODULE
+ * @brief Called when a RFCOMM connection is requested.
+ * @since_tizen 2.3.1
+ *
+ * @details You must call bt_socket_accept() if you want to accept. Otherwise, you must call bt_socket_reject().
+ * @param[in] socket_fd The file descriptor of socket on which a connection is requested
+ * @param[in] remote_address The address of remote device
+ * @param[in] user_data The user data passed from the callback registration function
+ * @pre If you register this callback function by bt_socket_set_connection_requested_cb() and listen a socket by bt_socket_listen(),
+ * bt_socket_connection_requested_cb() will be invoked.
+ * @see bt_socket_listen()
+ * @see bt_socket_accept()
+ * @see bt_socket_reject()
+ */
+typedef void (*bt_socket_connection_requested_cb) (int socket_fd, const char *remote_address, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_SERVER_MODULE
+ * @brief Called when the push is requested.
+ * @since_tizen 2.3.1
+ *
+ * @details You must call bt_opp_server_accept() if you want to accept.
+ * Otherwise, you must call bt_opp_server_reject().
+ * @param[in] file The path of file to be pushed
+ * @param[in] size The file size (bytes)
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_opp_server_initialize()
+ */
+typedef void (*bt_opp_server_push_requested_cb)(const char *file, int size, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_SERVER_MODULE
+ * @brief Called when an OPP connection is requested.
+ * @since_tizen 2.3.1
+ *
+ * @details You must call bt_opp_server_accept_connection() if you want to accept.
+ * Otherwise, you must call bt_opp_server_reject_connection().
+ * @param[in] remote_address The address of remote device
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_opp_server_accept()
+ * @see bt_opp_server_reject()
+ */
+typedef void (*bt_opp_server_connection_requested_cb)(const char *remote_address, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_SERVER_MODULE
+ * @brief Called when a file is being transfered.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] file The path of file to be pushed
+ * @param[in] size The file size (bytes)
+ * @param[in] percent The progress in percentage (1 ~ 100)
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_opp_server_accept()
+ * @see bt_opp_server_accept_connection()
+ */
+typedef void (*bt_opp_server_transfer_progress_cb) (const char *file, long long size, int percent, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_SERVER_MODULE
+ * @brief Called when a transfer is finished.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] error_code The result of push
+ * @param[in] file The path of file to be pushed
+ * @param[in] size The file size (bytes)
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_opp_server_accept()
+ * @see bt_opp_server_accept_connection()
+ */
+typedef void (*bt_opp_server_transfer_finished_cb) (int result, const char *file, long long size, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_CLIENT_MODULE
+ * @brief Called when OPP server responds to the push request.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] result The result of OPP server response
+ * @param[in] remote_address The remote address
+ * @param[in] user_data The user data passed from the callback registration function
+ * @pre bt_opp_client_push_files() will invoke this function.
+ * @see bt_opp_client_push_files()
+ */
+typedef void (*bt_opp_client_push_responded_cb)(int result, const char *remote_address, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_CLIENT_MODULE
+ * @brief Called when each file is being transfered.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] file The path of file to be pushed
+ * @param[in] size The file size (bytes)
+ * @param[in] percent The progress in percentage (1 ~ 100). 100 means that a file is transfered completely.
+ * @param[in] user_data The user data passed from the callback registration function
+ * @pre bt_opp_client_push_files() will invoke this function.
+ * @see bt_opp_client_push_files()
+ */
+typedef void (*bt_opp_client_push_progress_cb)(const char *file, long long size, int percent, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_OPP_CLIENT_MODULE
+ * @brief Called when the push request is finished.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] result The result of the push request
+ * @param[in] remote_address The remote address
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_opp_client_push_files()
+ */
+typedef void (*bt_opp_client_push_finished_cb)(int result, const char *remote_address, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_MODULE
+ * @brief Called when the connection state is changed.
+ * @since_tizen 2.3.1
+ *
+ * @details This callback is called when the connection state is changed.
+ * When you call bt_audio_connect() or bt_audio_disconnect(), this callback is also called with error result even though these functions fail.
+ * @param[in] result The result of changing the connection state
+ * @param[in] connected The state to be changed. @a true means connected state, Otherwise, @a false.
+ * @param[in] remote_address The remote address
+ * @param[in] type The type of audio profile except #BT_AUDIO_PROFILE_TYPE_ALL
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_audio_set_connection_state_changed_cb()
+ * @see bt_audio_unset_connection_state_changed_cb()
+ */
+typedef void (*bt_audio_connection_state_changed_cb) (int result, bool connected, const char *remote_address, bt_audio_profile_type_e type, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Called when the SCO(Synchronous Connection Oriented link) state is changed.
+ * @since_tizen 2.3.1
+ *
+ * @details This callback is called when the SCO state is changed.
+ * When you call bt_ag_open_sco() or bt_ag_close_sco(), this callback is also called with error result even though these functions failed.
+ * @param[in] result The result of changing the connection state
+ * @param[in] opened The state to be changed: (@c true = opened, @c false = not opened)
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_ag_set_sco_state_changed_cb()
+ * @see bt_ag_unset_sco_state_changed_cb()
+ * @see bt_ag_open_sco()
+ * @see bt_ag_close_sco()
+ */
+typedef void (*bt_ag_sco_state_changed_cb) (int result, bool opened, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Called when a call handling event happened from Hands-Free.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] event The call handling event happened from Hands-Free
+ * @param[in] call_id The call ID
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_ag_set_call_handling_event_cb()
+ * @see bt_ag_unset_call_handling_event_cb()
+ */
+typedef void (*bt_ag_call_handling_event_cb) (bt_ag_call_handling_event_e event, unsigned int call_id, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Called when a multi call handling event happened from Hands-Free.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] event The call handling event happened from Hands-Free
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_ag_set_multi_call_handling_event_cb()
+ * @see bt_ag_unset_multi_call_handling_event_cb()
+ */
+typedef void (*bt_ag_multi_call_handling_event_cb) (bt_ag_multi_call_handling_event_e event, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Called when a DTMF(Dual Tone Multi Frequency) is transmitted from Hands-Free.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] dtmf The DTMF transmitted from Hands-Free
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_ag_set_dtmf_transmitted_cb()
+ * @see bt_ag_unset_dtmf_transmitted_cb()
+ */
+typedef void (*bt_ag_dtmf_transmitted_cb) (const char *dtmf, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Called when the speaker gain of the remote device is changed.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] gain The gain of speaker (0 ~ 15)
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_ag_set_speaker_gain_changed_cb()
+ * @see bt_ag_unset_speaker_gain_changed_cb()
+ */
+typedef void (*bt_ag_speaker_gain_changed_cb) (int gain, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_AG_MODULE
+ * @brief Called when the microphone gain of the remote device is changed.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] gain The gain of microphone (0 ~ 15)
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_ag_set_microphone_gain_changed_cb()
+ * @see bt_ag_unset_microphone_gain_changed_cb()
+ */
+typedef void (*bt_ag_microphone_gain_changed_cb) (int gain, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Called when the connection state is changed.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] connected The state to be changed. @a true means connected state, Otherwise, @a false.
+ * @param[in] remote_address The remote address
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_avrcp_target_initialize()
+ * @see bt_avrcp_target_deinitialize()
+ */
+typedef void (*bt_avrcp_target_connection_state_changed_cb) (bool connected, const char *remote_address, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Called when the equalizer state is changed by the remote control device.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] equalizer The equalizer state
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_avrcp_set_equalizer_state_changed_cb()
+ * @see bt_avrcp_unset_equalizer_state_changed_cb()
+ */
+typedef void (*bt_avrcp_equalizer_state_changed_cb) (bt_avrcp_equalizer_state_e equalizer, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Called when the repeat mode is changed by the remote control device.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] repeat The repeat mode
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_avrcp_set_repeat_mode_changed_cb()
+ * @see bt_avrcp_unset_repeat_mode_changed_cb()
+ */
+typedef void (*bt_avrcp_repeat_mode_changed_cb) (bt_avrcp_repeat_mode_e repeat, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Called when the shuffle mode is changed by the remote control device.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] shuffle The shuffle mode
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_avrcp_set_shuffle_mode_changed_cb()
+ * @see bt_avrcp_unset_shuffle_mode_changed_cb()
+ */
+typedef void (*bt_avrcp_shuffle_mode_changed_cb) (bt_avrcp_shuffle_mode_e shuffle, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Called when the scan mode is changed by the remote control device.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] shuffle The shuffle mode
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_avrcp_set_scan_mode_changed_cb()
+ * @see bt_avrcp_unset_scan_mode_changed_cb()
+ */
+typedef void (*bt_avrcp_scan_mode_changed_cb) (bt_avrcp_scan_mode_e scan, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_HID_MODULE
+ * @brief Called when the connection state is changed.
+ * @since_tizen 2.3.1
+ *
+ * @details This callback is called when the connection state is changed.
+ * When you call bt_hid_host_connect() or bt_hid_host_disconnect(), this callback is also called with error result even though these functions fail.
+ * @param[in] result The result of changing the connection state
+ * @param[in] connected The state to be changed. @a true means connected state, Otherwise, @a false.
+ * @param[in] remote_address The remote address
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_hid_host_connect()
+ * @see bt_hid_host_disconnect()
+ */
+typedef void (*bt_hid_host_connection_state_changed_cb) (int result, bool connected, const char *remote_address, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_HDP_MODULE
+ * @brief Called when the connection is established.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] result The result of connecting to the remote device
+ * @param[in] remote_address The address of connected remote device
+ * @param[in] app_id The ID of application
+ * @param[in] type The type of HDP(Health Device Profile) channel
+ * @param[in] channel The connected data channel
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_hdp_disconnected_cb
+ * @see bt_hdp_set_connection_state_changed_cb()
+ * @see bt_hdp_unset_connection_state_changed_cb()
+ */
+typedef void (*bt_hdp_connected_cb) (int result, const char *remote_address, const char *app_id,
+ bt_hdp_channel_type_e type, unsigned int channel, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_HDP_MODULE
+ * @brief Called when the connection is disconnected.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] result The result of disconnecting from the remote device
+ * @param[in] remote_address The address of disconnected remote device
+ * @param[in] channel The connected data channel
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_hdp_connected_cb
+ * @see bt_hdp_set_connection_state_changed_cb()
+ * @see bt_hdp_unset_connection_state_changed_cb()
+ */
+typedef void (*bt_hdp_disconnected_cb) (int result, const char *remote_address, unsigned int channel, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_HDP_MODULE
+ * @brief Called when the you receive the data.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] channel The connected data channel
+ * @param[in] data The received data
+ * @param[in] size The size of received data (byte)
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_hdp_set_data_received_cb()
+ * @see bt_hdp_unset_data_received_cb()
+ */
+typedef void (*bt_hdp_data_received_cb) (unsigned int channel, const char *data, unsigned int size, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Called when you get GATT handles repeatedly
+ * @since_tizen 2.3.1
+ *
+ * @param[in] total The total number of GATT handles to be called
+ * @param[in] index The index of current GATT handle. It starts from 0.
+ * @param[in] gatt_handle The GATT handle
+ * @param[in] user_data The user data passed from the foreach function
+ *
+ * @see bt_gatt_service_foreach_characteristics()
+ * @see bt_gatt_service_foreach_included_services()
+ * @see bt_gatt_characteristic_foreach_descriptors()
+ * @see bt_gatt_client_foreach_services()
+ */
+typedef bool (*bt_gatt_foreach_cb) (int total, int index, bt_gatt_h gatt_handle,
+ void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Called when the client request(e.g. read / write) has been completed
+ * @since_tizen 2.3.1
+ *
+ * @param[in] result The result of a request
+ * @param[in] request_handle The requesting GATT handle
+ * @param[in] user_data The user data passed from the requesting function
+ *
+ * @see bt_gatt_client_read_value()
+ * @see bt_gatt_client_write_value()
+ */
+typedef void (*bt_gatt_client_request_completed_cb) (int result,
+ bt_gatt_h request_handle, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Called when a value of a watched characteristic's GATT handle has been changed
+ * @since_tizen 2.3.1
+ *
+ * @remarks After this function is returned, a changed vlaue is automatically
+ * applied to @a characteristic. Before that, @a characteristic has an old value.
+ *
+ * @param[in] characteristic The characteristic's GATT handle of which value change is informed. It has an old value.
+ * @param[in] value The new value
+ * @param[in] len The length of @a value
+ * @param[in] user_data The user data passed from the registering function
+ *
+ * @see bt_gatt_client_set_characteristic_value_changed_cb()
+ */
+typedef void (*bt_gatt_client_characteristic_value_changed_cb) (bt_gatt_h characteristic,
+ char *value, int len, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Called when the connection state is changed.
+ * @since_tizen 2.3.1
+ *
+ * @details This callback is called when the connection state is changed.
+ * When you called bt_gatt_connect() or bt_gatt_disconnect(), this callback is also called with error result even though these functions fail.
+ *
+ * @param[in] result The result of changing the connection state.
+ * @param[in] connected The state to be changed, @a true means connected state, Otherwise, @a false.
+ * @param[in] remote_address The remote_address
+ * @param[in] user_data The user data passed from the callback registration function.
+ *
+ * @see bt_gatt_connect()
+ * @see bt_gatt_disconnect()
+ * @see bt_gatt_set_connection_state_changed_cb()
+ * @see bt_gatt_unset_connection_state_changed_cb()
+ */
+typedef void (*bt_gatt_connection_state_changed_cb)(int result, bool connected, const char *remote_address, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PAN_NAP_MODULE
+ * @brief Called when the connection state is changed.
+ * @since_tizen 2.3.1
+ *
+ * @param[in] connected Indicates whether a client is connected or disconnected
+ * @param[in] remote_address The remote address
+ * @param[in] interface_name The interface name. For example, bnep0, bnep1.
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_nap_set_connection_state_changed_cb()
+ * @see bt_nap_unset_connection_state_changed_cb()
+ */
+typedef void (*bt_nap_connection_state_changed_cb) (bool connected, const char *remote_address, const char *interface_name, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PAN_PANU_MODULE
+ * @brief Called when the connection state is changed.
+ * @since_tizen 2.3.1
+ *
+ * @details This callback is called when the connection state is changed.
+ * When you call bt_panu_connect() or bt_panu_disconnect(), this callback is also called with error result even though these functions fail.
+ * @param[in] result The result of changing the connection state
+ * @param[in] connected The state to be changed. @a true means connected state, Otherwise, @a false.
+ * @param[in] remote_address The remote address
+ * @param[in] type The type of PAN service
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_nap_set_connection_state_changed_cb()
+ * @see bt_nap_unset_connection_state_changed_cb()
+ */
+typedef void (*bt_panu_connection_state_changed_cb) (int result, bool connected, const char *remote_address, bt_panu_service_type_e type, void *user_data);
+
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif // __TIZEN_NETWORK_BLUETOOTH_TYPE_H__
diff --git a/include/wearable/bluetooth_type_internal.h b/include/wearable/bluetooth_type_internal.h
new file mode 100644
index 0000000..80e1f5b
--- /dev/null
+++ b/include/wearable/bluetooth_type_internal.h
@@ -0,0 +1,582 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef __TIZEN_NETWORK_BLUETOOTH_TYPE_INTERNAL_H__
+#define __TIZEN_NETWORK_BLUETOOTH_TYPE_INTERNAL_H__
+
+ #ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+
+/**
+ * @file bluetooth_type_internal.h
+ */
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PBAP_MODULE
+ * @brief definitions for PBAP fields.
+ * @since_tizen 2.3
+ */
+#define BT_PBAP_FIELD_ALL (0xFFFFFFFFFFFFFFFFULL)
+#define BT_PBAP_FIELD_VERSION (1ULL << 0)
+#define BT_PBAP_FIELD_FN (1ULL << 1)
+#define BT_PBAP_FIELD_N (1ULL << 2)
+#define BT_PBAP_FIELD_PHOTO (1ULL << 3)
+#define BT_PBAP_FIELD_BDAY (1ULL << 4)
+#define BT_PBAP_FIELD_ADR (1ULL << 5)
+#define BT_PBAP_FIELD_LABEL (1ULL << 6)
+#define BT_PBAP_FIELD_TEL (1ULL << 7)
+#define BT_PBAP_FIELD_EMAIL (1ULL << 8)
+#define BT_PBAP_FIELD_MAILER (1ULL << 9)
+#define BT_PBAP_FIELD_TZ (1ULL << 10)
+#define BT_PBAP_FIELD_GEO (1ULL << 11)
+#define BT_PBAP_FIELD_TITLE (1ULL << 12)
+#define BT_PBAP_FIELD_ROLE (1ULL << 13)
+#define BT_PBAP_FIELD_LOGO (1ULL << 14)
+#define BT_PBAP_FIELD_AGENT (1ULL << 15)
+#define BT_PBAP_FIELD_ORG (1ULL << 16)
+#define BT_PBAP_FIELD_NOTE (1ULL << 17)
+#define BT_PBAP_FIELD_REV (1ULL << 18)
+#define BT_PBAP_FIELD_SOUND (1ULL << 19)
+#define BT_PBAP_FIELD_URL (1ULL << 20)
+#define BT_PBAP_FIELD_UID (1ULL << 21)
+#define BT_PBAP_FIELD_KEY (1ULL << 22)
+#define BT_PBAP_FIELD_NICKNAME (1ULL << 23)
+#define BT_PBAP_FIELD_CATEGORIES (1ULL << 24)
+#define BT_PBAP_FIELD_PROID (1ULL << 25)
+#define BT_PBAP_FIELD_CLASS (1ULL << 26)
+#define BT_PBAP_FIELD_SORT_STRING (1ULL << 27)
+#define BT_PBAP_FIELD_X_IRMC_CALL_DATETIME (1ULL << 28)
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Enumerations of the Bluetooth adapter le scan type.
+ * @since_tizen 2.3
+ */
+typedef enum
+{
+ BT_ADAPTER_LE_PASSIVE_SCAN = 0x00,
+ BT_ADAPTER_LE_ACTIVE_SCAN
+} bt_adapter_le_scan_type_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Enumerations of the Bluetooth le scan mode.
+ * @since_tizen 2.3
+ */
+typedef enum
+{
+ BT_ADAPTER_LE_SCAN_MODE_BALANCED,
+ BT_ADAPTER_LE_SCAN_MODE_LOW_LATENCY,
+ BT_ADAPTER_LE_SCAN_MODE_LOW_ENERGY
+} bt_adapter_le_scan_mode_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_HF_MODULE
+ * @brief Enumerations for the call handling event
+ * @since_tizen 2.3
+ */
+typedef enum {
+ BT_HF_CALL_HANDLING_EVENT_ANSWER = 0x00, /**< Request to answer an incoming call */
+ BT_HF_CALL_HANDLING_EVENT_RELEASE, /**< Request to release a call */
+ BT_HF_CALL_HANDLING_EVENT_REJECT, /**< Request to reject an incoming call */
+ BT_HF_CALL_HANDLING_EVENT_RING, /**< Request of ringing call */
+ BT_HF_CALL_HANDLING_EVENT_CALL_STARTED, /**< Request of Call started */
+ BT_HF_CALL_HANDLING_EVENT_CALL_ENDED, /**< Request of Call Ended */
+ BT_HF_CALL_HANDLING_EVENT_VOICE_RECOGNITION_ENABLED, /**< Request of voice recognition enabled */
+ BT_HF_CALL_HANDLING_EVENT_VOICE_RECOGNITION_DISABLED, /**< Request of voice recognition disabled */
+ BT_HF_CALL_HANDLING_EVENT_VENDOR_DEP_CMD, /**< Request of Vendor command */
+ BT_HF_CALL_HANDLING_EVENT_WAITING, /**< Request to waiting a call */
+ BT_HF_CALL_HANDLING_EVENT_HELD, /**< Request to hold a call */
+ BT_HF_CALL_HANDLING_EVENT_UNHELD, /**< Request to unhold calls */
+ BT_HF_CALL_HANDLING_EVENT_SWAPPED, /**< Request to swap calls */
+} bt_hf_call_handling_event_e;
+
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_HF_MODULE
+ * @brief Enumerations for the multi call handling event
+ * @since_tizen 2.3
+ */
+typedef enum {
+ BT_HF_MULTI_CALL_HANDLING_EVENT_RELEASE_HELD_CALLS = 0x00, /**< Request to release held calls */
+ BT_HF_MULTI_CALL_HANDLING_EVENT_RELEASE_ACTIVE_CALLS, /**< Request to release active calls */
+ BT_HF_MULTI_CALL_HANDLING_EVENT_ACTIVATE_HELD_CALL, /**< Request to put active calls into hold state and activate another (held or waiting) call */
+ BT_HF_MULTI_CALL_HANDLING_EVENT_MERGE_CALLS, /**< Request to add a held call to the conversation */
+ BT_HF_MULTI_CALL_HANDLING_EVENT_EXPLICIT_CALL_TRANSFER, /**< Request to let a user who has two calls to connect these two calls together and release its connections to both other parties */
+} bt_hf_multi_call_handling_event_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_HF_MODULE
+ * @brief Enumerations for the call state
+ * @since_tizen 2.3
+ */
+typedef enum {
+ BT_HF_CALL_EVENT_IDLE = 0x00, /**< Idle */
+ BT_HF_CALL_EVENT_ANSWER, /**< Answered */
+ BT_HF_CALL_EVENT_HOLD, /**< Held */
+ BT_HF_CALL_EVENT_RETRIEVE, /**< Retrieved */
+ BT_HF_CALL_EVENT_DIAL, /**< Dialing */
+ BT_HF_CALL_EVENT_ALERT, /**< Alerting */
+ BT_HF_CALL_EVENT_INCOMING, /**< Incoming */
+ BT_HF_CALL_EVENT_REDIAL, /**< Redialling */
+ BT_HF_CALL_EVENT_RELEASE_ALL_NONACTIVE_CALLS, /**< Release all nonactive calls */
+ BT_HF_CALL_EVENT_ACCEPT_AND_RELEASE, /**< Accept and Release */
+ BT_HF_CALL_EVENT_ACCEPT_AND_HOLD, /**< Accept and Hold */
+ BT_HF_CALL_EVENT_ADD_TO_CONVERSATION, /**< Add to the conversation */
+} bt_hf_call_event_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PBAP_MODULE
+ * @brief Enumerations of Addressbook memory for PBAP.
+ * @since_tizen 2.3
+ */
+typedef enum
+{
+ BT_PBAP_PHONE = 0x00, /**< Request for Addressbook from Phone*/
+ BT_PBAP_SIM , /**< Request for Addressbook from SIM*/
+} bt_pbap_addressbook_source_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PBAP_MODULE
+ * @brief Enumerations of Folder type.
+ * @since_tizen 2.3
+ */
+typedef enum
+{
+ BT_PBAP_PHONEBOOK = 0x00, /**< Request for Addressbook*/
+ BT_PBAP_INCOMING , /**< Request for Incoming Calls*/
+ BT_PBAP_OUTGOING , /**< Request for Outgoing Calls*/
+ BT_PBAP_MISSED , /**< Request for Missed Calls*/
+ BT_PBAP_COMBINED , /**< Request for Combined Calls*/
+} bt_pbap_folder_type_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PBAP_MODULE
+ * @brief Enumerations of Phonebook Search field.
+ * @since_tizen 2.3
+ */
+typedef enum
+{
+ BT_PBAP_SEARCH_NAME = 0x00, /**< Request for Search by name (default)*/
+ BT_PBAP_SEARCH_NUMBER, /**< Request for Search by phone number*/
+ BT_PBAP_SEARCH_SOUND, /**< Request for Search by sound*/
+} bt_pbap_search_field_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PBAP_MODULE
+ * @brief Enumerations of vCard Formats.
+ * @since_tizen 2.3
+ */
+typedef enum
+{
+ BT_PBAP_APP_PARAM_VCARD21 = 0x00, /**< vCard Format 2.1 (default)*/
+ BT_PBAP_APP_PARAM_VCARD30, /**< vCard Format 3.0*/
+} bt_pbap_filter_vcard_format_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PBAP_MODULE
+ * @brief Enumerations of Sorting Orders.
+ * @since_tizen 2.3
+ */
+typedef enum
+{
+ BT_PBAP_APP_PARAM_ORDER_INDEXED = 0x00, /**< Filter Order Indexed (default)*/
+ BT_PBAP_APP_PARAM_ORDER_ALPHANUMERIC, /**< Filter Order Alphanumeric*/
+ BT_PBAP_APP_PARAM_ORDER_PHONETIC, /**< Filter Order Phonetic*/
+} bt_pbap_filter_sort_order_e;
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Enumerations for the player control command
+ * @since_tizen 2.3
+ */
+ typedef enum {
+ BT_AVRCP_CONTROL_PLAY = 0x01, /**< Play */
+ BT_AVRCP_CONTROL_PAUSE, /**< Pause */
+ BT_AVRCP_CONTROL_STOP, /**< Stop */
+ BT_AVRCP_CONTROL_NEXT, /**< Next Track*/
+ BT_AVRCP_CONTROL_PREVIOUS, /**< Previous track */
+ BT_AVRCP_CONTROL_FAST_FORWARD, /**< Fast Forward */
+ BT_AVRCP_CONTROL_REWIND /**< Rewind */
+} bt_avrcp_player_command_e;
+
+ /**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Structure of Track metadata information.
+ * @since_tizen 2.3
+ *
+ * @see #bt_class_s
+ */
+typedef struct {
+ const char *title;
+ const char *artist;
+ const char *album;
+ const char *genre;
+ unsigned int total_tracks;
+ unsigned int number;
+ unsigned int duration;
+} bt_avrcp_metadata_attributes_info_s;
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Called when the connection state is changed.
+ * @since_tizen 2.3
+ * @param[in] connected The state to be changed. @a true means connected state, Otherwise, @a false.
+ * @param[in] remote_address The remote address
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_avrcp_control_initialize()
+ * @see bt_avrcp_control_deinitialize()
+ */
+typedef void (*bt_avrcp_control_connection_state_changed_cb) (bool connected, const char *remote_address, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Called when the Song position mode is changed by the remote target device.
+ * @since_tizen 2.3
+ *
+ * @param[in] position The song position
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_avrcp_set_song_position_changed_cb()
+ * @see bt_avrcp_unset_song_position_changed_cb()
+ */
+typedef void (*bt_avrcp_song_position_changed_cb) (unsigned int position, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Called when the Song metadata information is changed by the remote target device.
+ * @since_tizen 2.3
+ *
+ * @param[in] position The song metadata information
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_avrcp_set_track_info_changed_cb()
+ * @see bt_avrcp_unset_track_info_changed_cb()
+ */
+typedef void (*bt_avrcp_track_info_changed_cb) (bt_avrcp_metadata_attributes_info_s *track, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AVRCP_MODULE
+ * @brief Called when the Song Play status mode is changed by the remote target device.
+ * @since_tizen 2.3
+ *
+ * @param[in] play_state The song play status
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_avrcp_set_play_status_changed_cb()
+ * @see bt_avrcp_unset_play_status_changed_cb()
+ */
+typedef void (*bt_avrcp_play_status_changed_cb) (bt_avrcp_player_state_e play_state, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_HF_MODULE
+ * @brief HF Call status information.
+ * @since_tizen 2.3
+ */
+typedef struct {
+ char *number; /**< Phone Number */
+ int direction; /**< Direction :Incoming(1), Outgoing(0) */
+ int status; /**< Call Status :Active(0), Held(1), Waiting(5), Dailing(2) */
+ int multi_party; /**< Multiparty/conf call: Yes(1), No(0) */
+ int index; /**< Call index/ID */
+} bt_hf_call_status_info_s;
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
+ * @brief Called when the manufacturer dat changes.
+ * @since_tizen 2.3
+ *
+ * @param[in] data The manufacurer data of the Bluetooth device to be changed
+ * @param[in] len The length of @a data
+ * @param[in] user_data The user data passed from the callback registration function
+ * @pre This function will be invoked when the manufacturer data of Bluetooth adapter changes
+ * if callback is registered using bt_adapter_set_manufacturer_data_changed_cb().
+ * @see bt_adapter_set_manufacturer_data()
+ * @see bt_adapter_set_manufacturer_data_changed_cb()
+ * @see bt_adapter_unset_manufacturer_data_changed_cb()
+ */
+typedef void (*bt_adapter_manufacturer_data_changed_cb) (char *data,
+ int len, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_HF_MODULE
+ * @brief Called when the SCO(Synchronous Connection Oriented link) state is changed.
+ * @since_tizen 2.3
+ *
+ * @details This callback is called when the SCO state is changed.
+ * When you call bt_ag_open_sco() or bt_ag_close_sco(), this callback is also called with error result even though these functions failed.
+ * @param[in] result The result of changing the connection state
+ * @param[in] opened The state to be changed: (@c true = opened, @c false = not opened)
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_ag_set_sco_state_changed_cb()
+ * @see bt_ag_unset_sco_state_changed_cb()
+ * @see bt_ag_open_sco()
+ * @see bt_ag_close_sco()
+ */
+typedef void (*bt_hf_sco_state_changed_cb) (int result, bool opened, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_HF_MODULE
+ * @brief Called when a call handling event happened from Hands-Free.
+ * @since_tizen 2.3
+ *
+ * @param[in] event The call handling event happened from Hands-Free
+ * @param[in] call_id The call ID
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_ag_set_call_handling_event_cb()
+ * @see bt_ag_unset_call_handling_event_cb()
+ */
+typedef void (*bt_hf_call_handling_event_cb) (bt_hf_call_handling_event_e event, char *phone_number, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_HF_MODULE
+ * @brief Called when a multi call handling event happened from Hands-Free.
+ * @since_tizen 2.3
+ *
+ * @param[in] event The call handling event happened from Hands-Free
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_ag_set_multi_call_handling_event_cb()
+ * @see bt_ag_unset_multi_call_handling_event_cb()
+ */
+typedef void (*bt_hf_multi_call_handling_event_cb) (bt_hf_multi_call_handling_event_e event, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_HF_MODULE
+ * @brief Called when the speaker gain of the remote device is changed.
+ * @since_tizen 2.3
+ *
+ * @param[in] gain The gain of speaker (0 ~ 15)
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_hf_set_speaker_gain_changed_cb()
+ * @see bt_hf_unset_speaker_gain_changed_cb()
+ */
+typedef void (*bt_hf_speaker_gain_changed_cb) (int gain, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_AUDIO_HF_MODULE
+ * @brief Called when a call status updated event happened from Hands-Free.
+ * @since_tizen 2.3
+ * @remarks call_info_list has elements which consist of bt_hf_call_status_info_s
+ * @remarks The @a call_info_list must be released with bt_hf_free_call_status_info_list() by you.
+ *
+ * @param[in] event The call handling event happened from Hands-Free
+ * @param[in] call_id The call ID
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_hf_call_status_info_s
+ * @see bt_hf_set_call_status_updated_event_cb()
+ * @see bt_hf_unset_call_status_updated_event_cb()
+ */
+typedef void (*bt_hf_call_status_updated_event_cb) (GSList *call_info_list, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PBAP_MODULE
+ * @brief Called when PBAP is Connected or Disconnected.
+ * @since_tizen 2.3
+ *
+ * @param[in] remote_address Remote Device address
+ * @param[in] pbap_enabled PBAP connection status (@c 1 = enabled, @c 0 = disabled)
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_pbap_connect()
+ * @see bt_pbap_disconnect()
+ */
+typedef void (*bt_pbap_enabled_cb)(const char *remote_address,
+ int pbap_enabled, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PBAP_MODULE
+ * @brief Called when PBAP Phonebook Size is returned.
+ * @since_tizen 2.3
+ *
+ * @param[in] remote_address Remote Device address
+ * @param[in] size Size of Phonebook
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_pbap_get_phonebook_size()
+ * @see bt_pbap_connect()
+ * @see bt_pbap_disconnect()
+ */
+typedef void (*bt_pbap_phonebook_size_cb)(const char *remote_address,
+ int size, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PBAP_MODULE
+ * @brief Called when PBAP Phonebook Pull returns all contacts.
+ * @since_tizen 2.3
+ *
+ * @param[in] remote_address Remote Device address
+ * @param[in] vcf_file File in which vCards are saved
+ * @param[in] status Status for successful Transfer (@c 0 = Unsuccessful, @c 1 = Successful)
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_pbap_get_phonebook()
+ * @see bt_pbap_connect()
+ * @see bt_pbap_disconnect()
+ */
+typedef void (*bt_pbap_phonebook_pull_cb)(const char *remote_address,
+ char *vcf_file, int status, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PBAP_MODULE
+ * @brief Called when PBAP List vCards returns the handles and Names.
+ * @since_tizen 2.3
+ *
+ * @param[in] remote_address Remote Device address
+ * @param[in] vcards List of vCards
+ * @param[in] count Number of contacts in the list
+ * @param[in] status Status for successful Transfer (@c 0 = Unsuccessful, @c 1 = Successful)
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_pbap_get_phonebook()
+ * @see bt_pbap_connect()
+ * @see bt_pbap_disconnect()
+ */
+typedef void (*bt_pbap_list_vcards_cb)(const char *remote_address,
+ char **vcards, int count, int status, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PBAP_MODULE
+ * @brief Called when PBAP Get vCard returns the contact.
+ * @since_tizen 2.3
+ *
+ * @param[in] remote_address Remote Device address
+ * @param[in] vcard Contact as vCard
+ * @param[in] status Status for successful Transfer (@c 0 = Unsuccessful, @c 1 = Successful)
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_pbap_get_phonebook()
+ * @see bt_pbap_connect()
+ * @see bt_pbap_disconnect()
+ */
+typedef void (*bt_pbap_get_vcard_cb)(const char *remote_address,
+ char *vcard, int status, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_PBAP_MODULE
+ * @brief Called when PBAP Phonebook Search returns the handles and Names.
+ * @since_tizen 2.3
+ *
+ * @param[in] remote_address Remote Device address
+ * @param[in] vcards List of vCards
+ * @param[in] count Number of contacts in the list
+ * @param[in] status Status for successful Transfer (@c 0 = Unsuccessful, @c 1 = Successful)
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see bt_pbap_get_phonebook()
+ * @see bt_pbap_connect()
+ * @see bt_pbap_disconnect()
+ */
+typedef void (*bt_pbap_search_list_cb)(const char *remote_address,
+ char **vcards, int count, int status, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Enumerations of the attribute's permission
+ * @since_tizen 2.4
+ */
+typedef enum {
+ BT_GATT_PERMISSION_READ = 0x01,
+ BT_GATT_PERMISSION_WRITE = 0x02,
+ BT_GATT_PERMISSION_ENCRYPTION = 0x04,
+ BT_GATT_PERMISSION_AUTHENTICATION = 0x08,
+ BT_GATT_PERMISSION_AUTHORIZATION = 0x10,
+ BT_GATT_PERMISSION_NONE = 0x20,
+} bt_gatt_permission_e;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief The handle to control Bluetooth LE scan filter
+ * @since_tizen 2.4
+ */
+typedef void* bt_scan_filter_h;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief The handle of a GATT server
+ * @since_tizen 2.4
+ */
+typedef void* bt_gatt_server_h;
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Called when a value of a characteristic or descriptor's GATT handle has been changed
+ * @since_tizen 2.4
+ *
+ * @remarks After this function is returned, a changed vlaue is automatically
+ * applied to @a gatt_handle. Before that, @a gatt_handle has an old value.
+ *
+ * @param[in] remote_address The address of the remote device which requests a change
+ * @param[in] server The GATT server handle
+ * @param[in] gatt_handle The characteristic or descriptor's GATT handle which has an old value
+ * @param[in] offset The requested offset from where the @a gatt_handle value will be updated
+ * @param[in] value The new value
+ * @param[in] len The length of @a value
+ * @param[in] user_data The user data passed from the registration function
+ *
+ * @see bt_gatt_server_set_value_changed_cb()
+ */
+typedef void (*bt_gatt_server_value_changed_cb) (char *remote_address,
+ bt_gatt_server_h server, bt_gatt_h gatt_handle,
+ int offset, char *value, int len,
+ void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Called when the remote device requests to read a value on a GATT server
+ * @since_tizen 2.4
+ *
+ * @param[in] remote_address The address of the requesting remote device
+ * @param[in] server The GATT server handle
+ * @param[in] gatt_handle The characteristic or descriptor's GATT handle to be read
+ * @param[in] request_id The identification of this request. It will be used to send a reponse.
+ * @param[in] offset The requested offset from where the GATT handle's value is read
+ * @param[in] user_data The user data passed from the registration function
+ *
+ * @see bt_gatt_server_set_read_value_requested_cb()
+ * @see bt_gatt_server_send_response()
+ */
+typedef void (*bt_gatt_server_read_value_requested_cb) (char *remote_address,
+ int request_id, bt_gatt_server_h server, bt_gatt_h gatt_handle,
+ int offset, void *user_data);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_GATT_MODULE
+ * @brief Called when the sending notification / indication is done
+ * @since_tizen 2.4
+ *
+ * @remarks In case of an indication, once a confirmation is received from the remote device this callback will be called. \n
+ * This callback will be called several times if there are two or more remote devices which enable a Client Characteristic Configuration Descriptor(CCCD). \n
+ * For the last remote device, @a completed will be set as true.
+ *
+ * @param[in] result The result of a sending operation
+ * @param[in] remote_address The address of the remote device
+ * @param[in] server The GATT server handle
+ * @param[in] characteristic The characteristic's GATT handle
+ * @param[in] completed If this callback is for the last remote device which enables a CCCD, it will be true. Or it will be false.
+ * @param[in] user_data The user data passed from the requesting function
+ *
+ * @see bt_gatt_server_notify()
+ */
+typedef void (*bt_gatt_server_notification_sent_cb) (int result,
+ char *remote_address, bt_gatt_server_h server,
+ bt_gatt_h characteristic, bool completed, void *user_data);
+/**
+ * @}
+ */
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif // __TIZEN_NETWORK_BLUETOOTH_TYPE_INTERNAL_H__
diff --git a/packaging/capi-network-bluetooth.spec b/packaging/capi-network-bluetooth.spec
index a41c233..774dc0f 100644
--- a/packaging/capi-network-bluetooth.spec
+++ b/packaging/capi-network-bluetooth.spec
@@ -1,22 +1,25 @@
#sbs-git:slp/api/bluetooth capi-network-bluetooth 0.1.0 686c444083e4197845c768e5dd034022b1dfa250
Name: capi-network-bluetooth
Summary: Network Bluetooth Framework
-Version: 0.1.15
+Version: 0.1.53
Release: 1
Group: TO_BE/FILLED_IN
-License: TO BE FILLED IN
+License: Apache-2.0
Source0: %{name}-%{version}.tar.gz
-Requires(post): /sbin/ldconfig
-Requires(postun): /sbin/ldconfig
+Requires(post): eglibc
+Requires(postun): eglibc
-BuildRequires: pkgconfig(dbus-glib-1)
BuildRequires: pkgconfig(dlog)
BuildRequires: pkgconfig(glib-2.0)
BuildRequires: pkgconfig(vconf)
BuildRequires: pkgconfig(bluetooth-api)
BuildRequires: pkgconfig(capi-base-common)
+%if "%{?tizen_profile_name}" == "wearable"
+BuildRequires: pkgconfig(privacy-manager-client)
+%endif
BuildRequires: cmake
+BuildRequires: model-build-features
%description
@@ -30,10 +33,127 @@ Requires: %{name} = %{version}-%{release}
%description devel
Network Bluetooth Framework (DEV).
+%package test
+Summary: Network Bluetooth Framework test application
+Group: TO_BE/FILLED
+Requires: %{name} = %{version}-%{release}
+
+%description test
+This package is C-API test application.
+
+%package gatt-test
+Summary: Gatt Test Application
+Group: TO_BE/FILLED
+Requires: %{name} = %{version}-%{release}
+
+%description gatt-test
+This package is C-API gatt-test application.
+
+%package infinite-boot-test
+Summary: Network Bluetooth Framework infinite reboot test application
+Group: TO_BE/FILLED
+
+%description infinite-boot-test
+This package is made to test BT on while infinte boot
+
+%package infinite-spp-test-server
+Summary: Network Bluetooth Framework infinite spp test application as server role
+Group: TO_BE/FILLED
+
+%description infinite-spp-test-server
+This package is made to test SPP throughput infintely as server role
+
+%package infinite-spp-test-client
+Summary: Network Bluetooth Framework infinite spp test application as client role
+Group: TO_BE/FILLED
+
+%description infinite-spp-test-client
+This package is made to test SPP throughput infintely as client role
+
%prep
%setup -q
%build
+export CFLAGS="$CFLAGS -DTIZEN_DEBUG_ENABLE -DTIZEN_ENGINEER_MODE"
+export CXXFLAGS="$CXXFLAGS -DTIZEN_DEBUG_ENABLE -DTIZEN_ENGINEER_MODE"
+export FFLAGS="$FFLAGS -DTIZEN_DEBUG_ENABLE -DTIZEN_ENGINEER_MODE"
+
+%if "%{?tizen_profile_name}" == "wearable"
+export CFLAGS="$CFLAGS -DTIZEN_WEARABLE"
+export CXXFLAGS="$CXXFLAGS -DTIZEN_WEARABLE"
+export FFLAGS="$FFLAGS -DTIZEN_WEARABLE"
+%endif
+
+%if "%{?tizen_profile_name}" == "mobile"
+export CFLAGS="$CFLAGS -DBT_ENABLE_LEGACY_GATT_CLIENT"
+export CXXFLAGS="$CXXFLAGS -DBT_ENABLE_LEGACY_GATT_CLIENT"
+export FFLAGS="$FFLAGS -DBT_ENABLE_LEGACY_GATT_CLIENT"
+%endif
+
+%if %{?model_build_feature_bt_disable_all}
+export CFLAGS="$CFLAGS -DTIZEN_BT_DISABLE -DTIZEN_LE_DISABLE -DTIZEN_GATT_DISABLE
+ -DTIZEN_OPP_SERVER_DISABLE -DTIZEN_OPP_CLIENT_DISABLE
+ -DTIZEN_PAN_DISABLE -DTIZEN_HID_DISABLE -DTELEPHONY_DISABLED
+ -DTIZEN_AVRCP_DISABLE -DTIZEN_HDP_DISABLE"
+export CXXFLAGS="$CXXFLAGS -DTIZEN_BT_DISABLE -DTIZEN_LE_DISABLE -DTIZEN_GATT_DISABLE
+ -DTIZEN_OPP_SERVER_DISABLE -DTIZEN_OPP_CLIENT_DISABLE
+ -DTIZEN_PAN_DISABLE -DTIZEN_HID_DISABLE -DTELEPHONY_DISABLED
+ -DTIZEN_AVRCP_DISABLE -DTIZEN_HDP_DISABLE"
+export FFLAGS="$FFLAGS -DTIZEN_BT_DISABLE -DTIZEN_LE_DISABLE -DTIZEN_GATT_DISABLE
+ -DTIZEN_OPP_SERVER_DISABLE -DTIZEN_OPP_CLIENT_DISABLE
+ -DTIZEN_PAN_DISABLE -DTIZEN_HID_DISABLE -DTELEPHONY_DISABLED
+ -DTIZEN_AVRCP_DISABLE -DTIZEN_HDP_DISABLE"
+%else
+%if %{?model_build_feature_bt_disable_le}
+export CFLAGS="$CFLAGS -DTIZEN_LE_DISABLE -DTIZEN_GATT_DISABLE"
+export CXXFLAGS="$CXXFLAGS -DTIZEN_LE_DISABLE -DTIZEN_GATT_DISABLE"
+export FFLAGS="$FFLAGS -DTIZEN_LE_DISABLE -DTIZEN_GATT_DISABLE"
+%endif
+
+%if %{?model_build_feature_bt_disable_opp}
+export CFLAGS="$CFLAGS -DTIZEN_OPP_SERVER_DISABLE -DTIZEN_OPP_CLIENT_DISABLE"
+export CXXFLAGS="$CXXFLAGS -DTIZEN_OPP_SERVER_DISABLE -DTIZEN_OPP_CLIENT_DISABLE"
+export FFLAGS="$FFLAGS -DTIZEN_OPP_SERVER_DISABLE -DTIZEN_OPP_CLIENT_DISABLE"
+%endif
+
+%if %{?model_build_feature_bt_disable_tethering}
+export CFLAGS="$CFLAGS -DTIZEN_PAN_DISABLE"
+export CXXFLAGS="$CXXFLAGS -DTIZEN_PAN_DISABLE"
+export FFLAGS="$FFLAGS -DTIZEN_PAN_DISABLE"
+%endif
+
+%if %{?model_build_feature_bt_disable_hid}
+export CFLAGS="$CFLAGS -DTIZEN_HID_DISABLE"
+export CXXFLAGS="$CXXFLAGS -DTIZEN_HID_DISABLE"
+export FFLAGS="$FFLAGS -DTIZEN_HID_DISABLE"
+%endif
+
+%if %{?model_build_feature_bt_disable_audio_call}
+export CFLAGS="$CFLAGS -DTELEPHONY_DISABLED -DTIZEN_HFP_DISABLE"
+export CXXFLAGS="$CXXFLAGS -DTELEPHONY_DISABLED -DTIZEN_HFP_DISABLE"
+export FFLAGS="$FFLAGS -DTELEPHONY_DISABLED -DTIZEN_HFP_DISABLE"
+%endif
+
+%if %{?model_build_feature_bt_disable_audio_media}
+export CFLAGS="$CFLAGS -DTIZEN_AVRCP_DISABLE -DTIZEN_A2DP_DISABLE"
+export CXXFLAGS="$CXXFLAGS -DTIZEN_AVRCP_DISABLE -DTIZEN_A2DP_DISABLE"
+export FFLAGS="$FFLAGS -DTIZEN_AVRCP_DISABLE -DTIZEN_A2DP_DISABLE"
+%endif
+
+%if %{?model_build_feature_bt_disable_health}
+export CFLAGS="$CFLAGS -DTIZEN_HDP_DISABLE"
+export CXXFLAGS="$CXXFLAGS -DTIZEN_HDP_DISABLE"
+export FFLAGS="$FFLAGS -DTIZEN_HDP_DISABLE"
+%endif
+%endif
+
+%cmake \
+%if "%{?tizen_profile_name}" == "wearable"
+ -DTIZEN_WEARABLE=YES \
+%else
+ -DTIZEN_WEARABLE=NO \
+%endif
+
MAJORVER=`echo %{version} | awk 'BEGIN {FS="."}{print $1}'`
cmake . -DCMAKE_INSTALL_PREFIX=/usr -DFULLVER=%{version} -DMAJORVER=${MAJORVER}
@@ -42,17 +162,77 @@ make %{?jobs:-j%jobs}
%install
rm -rf %{buildroot}
%make_install
+install -D -m 0644 LICENSE %{buildroot}%{_datadir}/license/capi-network-bluetooth
+install -D -m 0644 LICENSE %{buildroot}%{_datadir}/license/capi-network-bluetooth-devel
+install -D -m 0644 test_scripts/bt_on_test_while_infinite.service %{buildroot}%{_libdir}/systemd/system/bt_on_test_while_infinite.service
+install -D -m 0644 test/bt_infinite_spp_test_server.service %{buildroot}%{_libdir}/systemd/system/bt_infinite_spp_test_server.service
+install -D -m 0644 test/bt_infinite_spp_test_client.service %{buildroot}%{_libdir}/systemd/system/bt_infinite_spp_test_client.service
+install -D -m 0755 test_scripts/check_bt_during_infinite_boot.sh %{buildroot}/%{_prefix}/etc/bluetooth/check_bt_during_infinite_boot.sh
%post -p /sbin/ldconfig
%postun -p /sbin/ldconfig
%files
+%manifest bluetooth.manifest
%{_libdir}/libcapi-network-bluetooth.so.*
+%{_datadir}/license/capi-network-bluetooth
+
+%files test
+%manifest bluetooth-test.manifest
+%{_bindir}/bt_unit_test
+%{_bindir}/bt_onoff
+/etc/smack/accesses2.d/capi.network.bluetooth.test.rule
+
+%files gatt-test
+%manifest bluetooth-gatt-test.manifest
+%{_bindir}/bt_unit_test_gatt
+/etc/smack/accesses2.d/capi.network.bluetooth.test.gatt.rule
+
+%files infinite-boot-test
+%{_libdir}/systemd/system/bt_on_test_while_infinite.service
+%attr(755,-,-) %{_prefix}/etc/bluetooth/check_bt_during_infinite_boot.sh
+
+%post infinite-boot-test
+/usr/bin/systemctl daemon-reload
+/usr/bin/systemctl enable bt_on_test_while_infinite.service
+
+%preun infinite-boot-test
+/usr/bin/systemctl disable bt_on_test_while_infinite.service
+
+%files infinite-spp-test-server
+%manifest bluetooth-infinite-spp-test-server.manifest
+%{_bindir}/bt_infinite_spp_test
+%{_libdir}/systemd/system/bt_infinite_spp_test_server.service
+/etc/smack/accesses2.d/capi.network.bluetooth.infinite.spp.test.rule
+
+%post infinite-spp-test-server
+/usr/bin/systemctl daemon-reload
+/usr/bin/systemctl enable bt_infinite_spp_test_server.service
+
+%preun infinite-spp-test-server
+/usr/bin/systemctl disable bt_infinite_spp_test_server.service
+
+%files infinite-spp-test-client
+%manifest bluetooth-infinite-spp-test-client.manifest
+%{_bindir}/bt_infinite_spp_test
+%{_libdir}/systemd/system/bt_infinite_spp_test_client.service
+/etc/smack/accesses2.d/capi.network.bluetooth.infinite.spp.test.rule
+
+%post infinite-spp-test-client
+/usr/bin/systemctl daemon-reload
+/usr/bin/systemctl enable bt_infinite_spp_test_client.service
+
+%preun infinite-spp-test-client
+/usr/bin/systemctl disable bt_infinite_spp_test_client.service
%files devel
%{_includedir}/network/bluetooth.h
+%{_includedir}/network/bluetooth_type.h
+%{_includedir}/network/bluetooth_internal.h
+%{_includedir}/network/bluetooth_type_internal.h
%{_libdir}/pkgconfig/capi-network-bluetooth.pc
%{_libdir}/libcapi-network-bluetooth.so
+%{_datadir}/license/capi-network-bluetooth-devel
diff --git a/src/bluetooth-adapter.c b/src/bluetooth-adapter.c
index da0f9c8..400375e 100644
--- a/src/bluetooth-adapter.c
+++ b/src/bluetooth-adapter.c
@@ -21,25 +21,50 @@
#include <dlog.h>
#include <stdio.h>
#include <stdbool.h>
+#include <arpa/inet.h>
+#ifdef TIZEN_WEARABLE
+#include <privacy_checker_client.h>
+#endif
#include <bluetooth-api.h>
#include "bluetooth.h"
+#include "bluetooth_internal.h"
#include "bluetooth_private.h"
-#ifdef LOG_TAG
-#undef LOG_TAG
+#ifdef TIZEN_LE_DISABLE
+#define BT_CHECK_LE_SUPPORT() \
+ { \
+ BT_CHECK_BT_SUPPORT(); \
+ LOGE("[%s] NOT_SUPPORTED(0x%08x)", __FUNCTION__, BT_ERROR_NOT_SUPPORTED); \
+ return BT_ERROR_NOT_SUPPORTED; \
+ }
+#else
+#define BT_CHECK_LE_SUPPORT()
#endif
-#define LOG_TAG "TIZEN_N_BLUETOOTH"
+static GSList *advertiser_list = NULL;
int bt_adapter_enable(void)
{
int error_code = BT_ERROR_NONE;
+ BT_CHECK_BT_SUPPORT();
+#ifdef TIZEN_WEARABLE
+ static const char* PRIVILEGE_ID_BLUETOOTH_ADMIN = "http://tizen.org/privilege/bluetooth.admin";
+
+ error_code = privacy_checker_check_by_privilege(PRIVILEGE_ID_BLUETOOTH_ADMIN);
+ if (error_code != PRIV_MGR_ERROR_SUCCESS) {
+ privacy_checker_finalize();
+ BT_ERR("PERMISSION_DENIED(0x%08x)", error_code);
+ return BT_ERROR_PERMISSION_DENIED;
+ }
+ privacy_checker_finalize();
+#endif
+
BT_CHECK_INIT_STATUS();
error_code = _bt_get_error_code(bluetooth_enable_adapter());
if (error_code != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__, _bt_convert_error_to_string(error_code), error_code);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code), error_code);
}
return error_code;
}
@@ -48,16 +73,44 @@ int bt_adapter_disable(void)
{
int error_code = BT_ERROR_NONE;
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
error_code = _bt_get_error_code(bluetooth_disable_adapter());
if (error_code != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__, _bt_convert_error_to_string(error_code), error_code);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code), error_code);
+ }
+ return error_code;
+}
+
+int bt_adapter_recover(void)
+{
+ int error_code = BT_ERROR_NONE;
+
+ BT_CHECK_BT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ error_code = _bt_get_error_code(bluetooth_recover_adapter());
+ if (error_code != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code), error_code);
+ }
+ return error_code;
+}
+
+int bt_adapter_reset(void)
+{
+ int error_code = BT_ERROR_NONE;
+
+ BT_CHECK_BT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ error_code = _bt_get_error_code(bluetooth_reset_adapter());
+ if (error_code != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code), error_code);
}
return error_code;
}
int bt_adapter_get_state(bt_adapter_state_e *adapter_state)
{
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(adapter_state);
@@ -65,46 +118,307 @@ int bt_adapter_get_state(bt_adapter_state_e *adapter_state)
return BT_ERROR_NONE;
}
+int bt_adapter_le_enable(void)
+{
+ int error_code = BT_ERROR_NONE;
+
+ BT_CHECK_BT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ error_code = _bt_get_error_code(bluetooth_enable_adapter_le());
+ if (error_code != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code), error_code);
+ }
+ return error_code;
+}
+
+int bt_adapter_le_disable(void)
+{
+ int error_code = BT_ERROR_NONE;
+
+ BT_CHECK_BT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+
+ error_code = _bt_get_error_code(bluetooth_disable_adapter_le());
+ if (error_code != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code), error_code);
+ }
+ return error_code;
+}
+
+int bt_adapter_le_get_state(bt_adapter_le_state_e *adapter_le_state)
+{
+ BT_CHECK_BT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(adapter_le_state);
+
+ *adapter_le_state = bluetooth_check_adapter_le();
+ return BT_ERROR_NONE;
+}
+
int bt_adapter_get_address(char **address)
{
bluetooth_device_address_t loc_address = { {0} };
int error_code = BT_ERROR_NONE;
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(address);
error_code = _bt_get_error_code(bluetooth_get_local_address(&loc_address));
if (error_code != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__, _bt_convert_error_to_string(error_code), error_code);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code), error_code);
return error_code;
}
error_code = _bt_convert_address_to_string(address, &loc_address);
if (error_code != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__, _bt_convert_error_to_string(error_code), error_code);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code), error_code);
return error_code;
}
return BT_ERROR_NONE;
}
+int bt_adapter_get_version(char **version)
+{
+ int ret = BT_ERROR_NONE;
+ bluetooth_version_t loc_ver = { { 0 } };
+
+ BT_CHECK_BT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(version);
+
+ ret = _bt_get_error_code(bluetooth_get_local_version(&loc_ver));
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ return ret;
+ }
+
+ *version = strdup(loc_ver.version);
+ if (*version == NULL) {
+ BT_ERR("OUT_OF_MEMORY(0x%08x)", BT_ERROR_OUT_OF_MEMORY);
+ return BT_ERROR_OUT_OF_MEMORY;
+ }
+
+ return BT_ERROR_NONE;
+}
+
+#define BT_ADAPTER_FIRMWARE_INFO_FILE_PATH "/var/lib/bluetooth/bcmtool_log"
+#define BT_ADAPTER_STACK_INFO_FILE_PATH "/usr/etc/bluetooth/stack_info"
+
+int bt_adapter_get_local_info(char **chipset, char **firmware, char **stack_version, char **profiles)
+{
+ int ret = BT_ERROR_NONE;
+ FILE *fp = NULL;
+ char *buf = NULL;
+ long lsize;
+ size_t result;
+ char *info_start = NULL;
+ char *info_end = NULL;
+ long info_size;
+ char *local_chipset = NULL;
+ char *local_firmware = NULL;
+ char *local_stack_version = NULL;
+ char *local_profiles = NULL;
+
+ BT_CHECK_BT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(chipset);
+ BT_CHECK_INPUT_PARAMETER(firmware);
+ BT_CHECK_INPUT_PARAMETER(stack_version);
+ BT_CHECK_INPUT_PARAMETER(profiles);
+
+ if ((fp = fopen(BT_ADAPTER_FIRMWARE_INFO_FILE_PATH, "r")) == NULL) {
+ BT_ERR("fopen() is failed(%s)", BT_ADAPTER_FIRMWARE_INFO_FILE_PATH);
+
+ local_firmware = (char *)malloc(sizeof(char) * 1);
+ if (local_firmware == NULL) {
+ ret = BT_ERROR_OUT_OF_MEMORY;
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ goto ERROR;
+ }
+ local_firmware[0] = '\0';
+ local_chipset = (char *)malloc(sizeof(char) * 1);
+ if (local_chipset == NULL) {
+ ret = BT_ERROR_OUT_OF_MEMORY;
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ goto ERROR;
+ }
+ local_chipset[0] = '\0';
+ } else {
+ fseek(fp, 0, SEEK_END);
+ lsize = ftell(fp);
+ if (lsize < 0) {
+ BT_ERR("ftell() error(0x%x)", lsize);
+ ret = BT_ERROR_OPERATION_FAILED;
+ goto ERROR;
+ }
+ buf = (char *)malloc(sizeof(char) * (lsize + 1));
+ if (buf == NULL) {
+ ret = BT_ERROR_OUT_OF_MEMORY;
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ goto ERROR;
+ }
+ fseek(fp, 0, SEEK_SET);
+ result = fread(buf, 1, lsize, fp);
+ buf[lsize] = '\0';
+
+ if (result != lsize)
+ BT_ERR("fread() error");
+
+ info_start = strstr(buf, "bluetooth");
+ if (info_start == NULL) {
+ BT_ERR("strstr() error(0x%x)", info_start);
+ ret = BT_ERROR_OPERATION_FAILED;
+ goto ERROR;
+ }
+ info_start += 10;
+ info_end = strstr(buf, "hcd");
+ if (info_end == NULL) {
+ BT_ERR("strstr() error(0x%x)", info_end);
+ ret = BT_ERROR_OPERATION_FAILED;
+ goto ERROR;
+ }
+ info_size = info_end - info_start - 1;
+
+ local_firmware = (char *)malloc(sizeof(char) * (info_size + 1));
+ if (local_firmware == NULL) {
+ ret = BT_ERROR_OUT_OF_MEMORY;
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ goto ERROR;
+ }
+
+ strncpy(local_firmware, info_start, info_size);
+ local_firmware[info_size] = '\0';
+
+ info_end = strchr(buf, '_');
+ if (info_end == NULL) {
+ BT_ERR("strchr() error(0x%x)", info_end);
+ ret = BT_ERROR_OPERATION_FAILED;
+ goto ERROR;
+ }
+ info_size = info_end - info_start;
+
+ local_chipset = (char *)malloc(sizeof(char) * (info_size + 1));
+ if (local_chipset == NULL) {
+ ret = BT_ERROR_OUT_OF_MEMORY;
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ goto ERROR;
+ }
+
+ strncpy(local_chipset, info_start, info_size);
+ local_chipset[info_size] = '\0';
+
+ if (buf)
+ free(buf);
+ buf = NULL;
+ fclose(fp);
+ }
+
+ if ((fp = fopen(BT_ADAPTER_STACK_INFO_FILE_PATH, "r")) == NULL) {
+ BT_ERR("fopen() error");
+ ret = BT_ERROR_OPERATION_FAILED;
+ goto ERROR;
+ }
+
+ fseek(fp, 0, SEEK_END);
+ lsize = ftell(fp);
+ if (lsize < 0) {
+ BT_ERR("ftell() error(0x%x)", lsize);
+ ret = BT_ERROR_OPERATION_FAILED;
+ goto ERROR;
+ }
+ buf = (char *)malloc(sizeof(char) * (lsize + 1));
+ if (buf == NULL) {
+ ret = BT_ERROR_OUT_OF_MEMORY;
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ goto ERROR;
+ }
+ fseek(fp, 0, SEEK_SET);
+ result = fread(buf, 1, lsize, fp);
+ buf[lsize] = '\0';
+
+ if (result != lsize) {
+ BT_ERR("fread() error(0x%x)", result);
+ ret = BT_ERROR_OPERATION_FAILED;
+ goto ERROR;
+ }
+
+ info_start = buf;
+ info_end = strchr(buf, ',');
+ if (info_end == NULL) {
+ BT_ERR("strchr() error(0x%x)", info_end);
+ ret = BT_ERROR_OPERATION_FAILED;
+ goto ERROR;
+ }
+ info_size = info_end - info_start;
+
+ local_stack_version = (char *)malloc(sizeof(char) * (info_size + 1));
+ if (local_stack_version == NULL) {
+ ret = BT_ERROR_OUT_OF_MEMORY;
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ goto ERROR;
+ }
+
+ strncpy(local_stack_version, info_start, info_size);
+ local_stack_version[info_size] = '\0';
+
+ info_start = info_end + 2;
+ info_size = lsize - info_size - 3;
+
+ local_profiles = (char *)malloc(sizeof(char) * (info_size + 1));
+ if (local_profiles == NULL) {
+ ret = BT_ERROR_OUT_OF_MEMORY;
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ goto ERROR;
+ }
+
+ strncpy(local_profiles, info_start, info_size);
+ local_profiles[info_size] = '\0';
+
+ if (buf)
+ free(buf);
+ fclose(fp);
+
+ *chipset = local_chipset;
+ *firmware = local_firmware;
+ *stack_version = local_stack_version;
+ *profiles = local_profiles;
+
+ return BT_ERROR_NONE;
+
+ERROR:
+ if (local_chipset)
+ free(local_chipset);
+ if (local_firmware)
+ free(local_firmware);
+ if (local_stack_version)
+ free(local_stack_version);
+ if (buf)
+ free(buf);
+ if (fp)
+ fclose(fp);
+ return ret;
+}
+
int bt_adapter_get_name(char **name)
{
int ret = BT_ERROR_NONE;
bluetooth_device_name_t loc_name = { {0} };
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(name);
ret = _bt_get_error_code(bluetooth_get_local_name(&loc_name));
if (ret != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__, _bt_convert_error_to_string(ret), ret);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
return ret;
}
*name = strdup(loc_name.name);
if (*name == NULL) {
- LOGE("[%s] OUT_OF_MEMORY(0x%08x)", __FUNCTION__, BT_ERROR_OUT_OF_MEMORY);
+ BT_ERR("OUT_OF_MEMORY(0x%08x)", BT_ERROR_OUT_OF_MEMORY);
return BT_ERROR_OUT_OF_MEMORY;
}
@@ -116,6 +430,7 @@ int bt_adapter_set_name(const char *name)
bluetooth_device_name_t loc_name = { {0} };
int ret = BT_ERROR_NONE;
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(name);
@@ -124,27 +439,41 @@ int bt_adapter_set_name(const char *name)
ret = _bt_get_error_code(bluetooth_set_local_name(&loc_name));
if (ret != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__, _bt_convert_error_to_string(ret), ret);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
}
return ret;
}
-int bt_adapter_get_visibility(bt_adapter_visibility_mode_e *mode)
+int bt_adapter_get_visibility(bt_adapter_visibility_mode_e *mode, int *duration)
{
bluetooth_discoverable_mode_t discoverable_mode = BLUETOOTH_DISCOVERABLE_MODE_CONNECTABLE;
int ret = BT_ERROR_NONE;
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(mode);
ret = _bt_get_error_code(bluetooth_get_discoverable_mode(&discoverable_mode));
if (ret != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__, _bt_convert_error_to_string(ret), ret);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
return ret;
}
*mode = _bt_get_bt_visibility_mode_e(discoverable_mode);
+
+ if (duration)
+ *duration = 0;
+
+ if (discoverable_mode == BLUETOOTH_DISCOVERABLE_MODE_TIME_LIMITED_DISCOVERABLE) {
+ if (duration == NULL)
+ return BT_ERROR_NONE;
+ ret = bluetooth_get_timeout_value(duration);
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ }
+ }
+
return BT_ERROR_NONE;
}
@@ -153,6 +482,7 @@ int bt_adapter_set_visibility(bt_adapter_visibility_mode_e visibility_mode, int
bluetooth_discoverable_mode_t discoverable_mode = BLUETOOTH_DISCOVERABLE_MODE_CONNECTABLE;
int error_code = BT_ERROR_NONE;
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
switch (visibility_mode) {
case BT_ADAPTER_VISIBILITY_MODE_LIMITED_DISCOVERABLE:
@@ -167,13 +497,71 @@ int bt_adapter_set_visibility(bt_adapter_visibility_mode_e visibility_mode, int
timeout_sec = 0;
break;
default:
- LOGE("[%s] INVALID_PARAMETER(0x%08x)", __FUNCTION__, BT_ERROR_INVALID_PARAMETER);
+ BT_ERR("INVALID_PARAMETER(0x%08x)", BT_ERROR_INVALID_PARAMETER);
return BT_ERROR_INVALID_PARAMETER;
}
error_code = _bt_get_error_code(bluetooth_set_discoverable_mode(discoverable_mode, timeout_sec));
if (error_code != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__, _bt_convert_error_to_string(error_code), error_code);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code), error_code);
+ }
+
+ return error_code;
+}
+
+int bt_adapter_set_connectable_changed_cb(bt_adapter_connectable_changed_cb callback, void *user_data)
+{
+ int ret = BT_ERROR_NONE;
+
+ BT_CHECK_BT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(callback);
+ _bt_set_cb(BT_EVENT_CONNECTABLE_CHANGED_EVENT, callback, user_data);
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ }
+
+ return ret;
+}
+
+int bt_adapter_unset_connectable_changed_cb(void)
+{
+ BT_CHECK_BT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ _bt_unset_cb(BT_EVENT_CONNECTABLE_CHANGED_EVENT);
+ return BT_ERROR_NONE;
+}
+
+int bt_adapter_get_connectable(bool *connectable)
+{
+ gboolean is_connectable = FALSE;
+ int ret = BT_ERROR_NONE;
+
+ BT_CHECK_BT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(connectable);
+
+ ret = _bt_get_error_code(bluetooth_is_connectable(&is_connectable));
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ return ret;
+ }
+
+ *connectable = is_connectable ? true : false;
+
+ return BT_ERROR_NONE;
+}
+
+int bt_adapter_set_connectable(bool connectable)
+{
+ int error_code = BT_ERROR_NONE;
+
+ BT_CHECK_BT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+
+ error_code = _bt_get_error_code(bluetooth_set_connectable(connectable));
+ if (error_code != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code), error_code);
}
return error_code;
@@ -187,18 +575,19 @@ int bt_adapter_foreach_bonded_device(bt_adapter_bonded_device_cb foreach_cb, voi
int ret = BT_ERROR_NONE;
int i = 0;
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(foreach_cb);
dev_list = g_ptr_array_new();
if (dev_list == NULL) {
- LOGE("[%s] OUT_OF_MEMORY(0x%08x)", __FUNCTION__, BT_ERROR_OUT_OF_MEMORY);
+ BT_ERR("OUT_OF_MEMORY(0x%08x)", BT_ERROR_OUT_OF_MEMORY);
return BT_ERROR_OUT_OF_MEMORY;
}
ret = _bt_get_error_code(bluetooth_get_bonded_device_list(&dev_list));
if (ret != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x) : Failed to get bonded device list", __FUNCTION__, _bt_convert_error_to_string(ret), ret);
+ BT_ERR("%s(0x%08x) : Failed to get bonded device list", _bt_convert_error_to_string(ret), ret);
return ret;
}
@@ -207,7 +596,7 @@ int bt_adapter_foreach_bonded_device(bt_adapter_bonded_device_cb foreach_cb, voi
if (ptr != NULL) {
ret = _bt_get_bt_device_info_s(&dev_info, (bluetooth_device_info_t *)ptr);
if (ret != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x) : Failed to get device info", __FUNCTION__, _bt_convert_error_to_string(ret), ret);
+ BT_ERR("%s(0x%08x) : Failed to get device info", _bt_convert_error_to_string(ret), ret);
break;
}
@@ -217,15 +606,14 @@ int bt_adapter_foreach_bonded_device(bt_adapter_bonded_device_cb foreach_cb, voi
}
_bt_free_bt_device_info_s(dev_info);
} else {
- LOGE("[%s] OPERATION_FAILED(0x%08x)", __FUNCTION__, BT_ERROR_OPERATION_FAILED);
+ BT_ERR("OPERATION_FAILED(0x%08x)", BT_ERROR_OPERATION_FAILED);
ret = BT_ERROR_OPERATION_FAILED;
break;
}
}
- if (dev_list != NULL) {
- g_ptr_array_free(dev_list, TRUE);
- }
+ g_ptr_array_foreach(dev_list, (GFunc)g_free, NULL);
+ g_ptr_array_free(dev_list, TRUE);
return ret;
}
@@ -236,6 +624,7 @@ int bt_adapter_get_bonded_device_info(const char *remote_address, bt_device_info
bluetooth_device_address_t addr_hex = { {0,} };
bluetooth_device_info_t *info;
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(remote_address);
@@ -247,13 +636,12 @@ int bt_adapter_get_bonded_device_info(const char *remote_address, bt_device_info
ret = _bt_get_error_code(bluetooth_get_bonded_device(&addr_hex, info));
if (ret != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x) : Failed to run function", __FUNCTION__,
+ BT_ERR("%s(0x%08x) : Failed to run function",
_bt_convert_error_to_string(ret), ret);
} else {
ret = _bt_get_bt_device_info_s(device_info, info);
if (ret != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x) : Failed to get device info",
- __FUNCTION__,
+ BT_ERR("%s(0x%08x) : Failed to get device info",
_bt_convert_error_to_string(ret),
ret);
}
@@ -266,6 +654,7 @@ int bt_adapter_get_bonded_device_info(const char *remote_address, bt_device_info
int bt_adapter_free_device_info(bt_device_info_s *device_info)
{
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(device_info);
@@ -277,7 +666,9 @@ int bt_adapter_free_device_info(bt_device_info_s *device_info)
int bt_adapter_is_service_used(const char *service_uuid, bool *used)
{
int ret = BT_ERROR_NONE;
+ gboolean is_used = FALSE;
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(service_uuid);
BT_CHECK_INPUT_PARAMETER(used);
@@ -286,11 +677,12 @@ int bt_adapter_is_service_used(const char *service_uuid, bool *used)
*used = bluetooth_obex_server_is_activated();
} else {
ret = _bt_get_error_code(bluetooth_is_service_used(service_uuid,
- (gboolean *)used));
+ &is_used));
+ *used = is_used ? true : false;
}
if (ret != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x) : Failed to run function", __FUNCTION__, _bt_convert_error_to_string(ret), ret);
+ BT_ERR("%s(0x%08x) : Failed to run function", _bt_convert_error_to_string(ret), ret);
}
return ret;
@@ -298,27 +690,41 @@ int bt_adapter_is_service_used(const char *service_uuid, bool *used)
int bt_adapter_set_state_changed_cb(bt_adapter_state_changed_cb callback, void *user_data)
{
+ BT_DBG("");
int ret = BT_ERROR_NONE;
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(callback);
_bt_set_cb(BT_EVENT_STATE_CHANGED, callback, user_data);
if (ret != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__, _bt_convert_error_to_string(ret), ret);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
}
return ret;
}
+int bt_adapter_le_set_state_changed_cb(bt_adapter_le_state_changed_cb callback, void *user_data)
+{
+ BT_CHECK_BT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(callback);
+
+ _bt_le_adapter_init();
+ _bt_set_cb(BT_EVENT_LE_STATE_CHANGED, callback, user_data);
+ return BT_ERROR_NONE;
+}
+
int bt_adapter_set_name_changed_cb(bt_adapter_name_changed_cb callback, void *user_data)
{
int ret = BT_ERROR_NONE;
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(callback);
_bt_set_cb(BT_EVENT_NAME_CHANGED, callback, user_data);
if (ret != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__, _bt_convert_error_to_string(ret), ret);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
}
return ret;
@@ -328,11 +734,12 @@ int bt_adapter_set_visibility_mode_changed_cb(bt_adapter_visibility_mode_changed
{
int ret = BT_ERROR_NONE;
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(callback);
_bt_set_cb(BT_EVENT_VISIBILITY_MODE_CHANGED, callback, user_data);
if (ret != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__, _bt_convert_error_to_string(ret), ret);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
}
return ret;
@@ -342,25 +749,50 @@ int bt_adapter_set_device_discovery_state_changed_cb(bt_adapter_device_discovery
{
int ret = BT_ERROR_NONE;
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(callback);
_bt_set_cb(BT_EVENT_DEVICE_DISCOVERY_STATE_CHANGED, callback, user_data);
if (ret != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__, _bt_convert_error_to_string(ret), ret);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
}
return ret;
}
+#ifndef TIZEN_WEARABLE
+int bt_adapter_le_set_device_discovery_state_changed_cb(bt_adapter_le_device_discovery_state_changed_cb callback, void *user_data)
+{
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(callback);
+
+ _bt_le_adapter_init();
+ _bt_set_cb(BT_EVENT_LE_DEVICE_DISCOVERY_STATE_CHANGED, callback, user_data);
+ return BT_ERROR_NONE;
+}
+#endif
+
int bt_adapter_unset_state_changed_cb(void)
{
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
_bt_unset_cb(BT_EVENT_STATE_CHANGED);
return BT_ERROR_NONE;
}
+int bt_adapter_le_unset_state_changed_cb(void)
+{
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ _bt_unset_cb(BT_EVENT_LE_STATE_CHANGED);
+ _bt_le_adapter_deinit();
+ return BT_ERROR_NONE;
+}
+
int bt_adapter_unset_name_changed_cb(void)
{
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
_bt_unset_cb(BT_EVENT_NAME_CHANGED);
return BT_ERROR_NONE;
@@ -368,26 +800,63 @@ int bt_adapter_unset_name_changed_cb(void)
int bt_adapter_unset_visibility_mode_changed_cb(void)
{
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
_bt_unset_cb(BT_EVENT_VISIBILITY_MODE_CHANGED);
return BT_ERROR_NONE;
}
+int bt_adapter_set_visibility_duration_changed_cb(bt_adapter_visibility_duration_changed_cb callback, void *user_data)
+{
+ int ret = BT_ERROR_NONE;
+
+ BT_CHECK_BT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(callback);
+ _bt_set_cb(BT_EVENT_VISIBILITY_DURATION_CHANGED, callback, user_data);
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ }
+
+ return ret;
+}
+
+int bt_adapter_unset_visibility_duration_changed_cb(void)
+{
+ BT_CHECK_BT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ _bt_unset_cb(BT_EVENT_VISIBILITY_DURATION_CHANGED);
+ return BT_ERROR_NONE;
+}
+
int bt_adapter_unset_device_discovery_state_changed_cb(void)
{
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
_bt_unset_cb(BT_EVENT_DEVICE_DISCOVERY_STATE_CHANGED);
return BT_ERROR_NONE;
}
+#ifndef TIZEN_WEARABLE
+int bt_adapter_le_unset_device_discovery_state_changed_cb(void)
+{
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ _bt_unset_cb(BT_EVENT_LE_DEVICE_DISCOVERY_STATE_CHANGED);
+ _bt_le_adapter_deinit();
+ return BT_ERROR_NONE;
+}
+#endif
+
int bt_adapter_start_device_discovery(void)
{
int error_code = BT_ERROR_NONE;
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
error_code = _bt_get_error_code(bluetooth_start_discovery(0, 0, BLUETOOTH_DEVICE_MAJOR_MASK_MISC));
if (error_code != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__, _bt_convert_error_to_string(error_code), error_code);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code), error_code);
}
return error_code;
}
@@ -396,10 +865,11 @@ int bt_adapter_stop_device_discovery(void)
{
int error_code = BT_ERROR_NONE;
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
error_code = _bt_get_error_code(bluetooth_cancel_discovery());
if (error_code != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__, _bt_convert_error_to_string(error_code), error_code);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code), error_code);
}
return error_code;
}
@@ -408,6 +878,7 @@ int bt_adapter_is_discovering(bool *is_discovering)
{
int ret = 0;
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(is_discovering);
@@ -417,8 +888,2171 @@ int bt_adapter_is_discovering(bool *is_discovering)
return BT_ERROR_NONE;
} else {
ret = _bt_get_error_code(ret);
- LOGE("[%s] %s(0x%08x)", __FUNCTION__, _bt_convert_error_to_string(ret), ret);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ return ret;
+ }
+}
+
+#ifndef TIZEN_WEARABLE
+int bt_adapter_le_start_device_discovery(void)
+{
+ int error_code = BT_ERROR_NONE;
+
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ error_code = _bt_get_error_code(bluetooth_start_le_discovery());
+ if (error_code != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code), error_code);
+ }
+ return error_code;
+}
+
+int bt_adapter_le_stop_device_discovery(void)
+{
+ int error_code = BT_ERROR_NONE;
+
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ error_code = _bt_get_error_code(bluetooth_stop_le_discovery());
+ if (error_code != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code), error_code);
+ }
+ return error_code;
+}
+
+int bt_adapter_le_is_discovering(bool *is_discovering)
+{
+ int ret = 0;
+
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(is_discovering);
+
+ ret = bluetooth_is_le_discovering();
+ if (ret >= BLUETOOTH_ERROR_BASE) {
+ *is_discovering = (ret == 1) ? true : false;
+ return BT_ERROR_NONE;
+ } else {
+ ret = _bt_get_error_code(ret);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ return ret;
+ }
+}
+#endif
+
+int bt_adapter_get_local_oob_data(unsigned char **hash, unsigned char **randomizer,
+ int *hash_len, int *randomizer_len)
+{
+ int ret = BT_ERROR_NONE;
+
+ BT_CHECK_BT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(hash);
+ BT_CHECK_INPUT_PARAMETER(randomizer);
+ BT_CHECK_INPUT_PARAMETER(hash_len);
+ BT_CHECK_INPUT_PARAMETER(randomizer_len);
+
+ bt_oob_data_t oob_data;
+
+ ret = _bt_get_error_code(bluetooth_oob_read_local_data(&oob_data));
+ if (BT_ERROR_NONE == ret) {
+ *hash = g_memdup(oob_data.hash, BLUETOOTH_OOB_DATA_LENGTH);
+ *randomizer = g_memdup(oob_data.randomizer,
+ BLUETOOTH_OOB_DATA_LENGTH);
+ *hash_len = BLUETOOTH_OOB_DATA_LENGTH;
+ *randomizer_len = BLUETOOTH_OOB_DATA_LENGTH;
+ } else {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ }
+ return ret;
+}
+
+int bt_adapter_set_remote_oob_data(const char *remote_address,
+ unsigned char *hash, unsigned char *randomizer,
+ int hash_len, int randomizer_len)
+{
+ int ret = BT_ERROR_NONE;
+ bluetooth_device_address_t addr_hex = { {0,} };
+ bt_oob_data_t oob_data = { {0},};
+
+ BT_CHECK_BT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(remote_address);
+
+ _bt_convert_address_to_hex(&addr_hex, remote_address);
+
+ if (hash != NULL && randomizer != NULL) {
+ memcpy(oob_data.hash, hash, hash_len);
+ memcpy(oob_data.randomizer, randomizer, randomizer_len);
+ oob_data.hash_len = hash_len;
+ oob_data.randomizer_len = randomizer_len;
+ }
+
+ ret = _bt_get_error_code(bluetooth_oob_add_remote_data(&addr_hex, &oob_data));
+ if (BT_ERROR_NONE != ret) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ }
+ return ret;
+}
+
+int bt_adapter_remove_remote_oob_data(const char *remote_address)
+{
+ int ret = BT_ERROR_NONE;
+ bluetooth_device_address_t addr_hex = { {0,} };
+
+ BT_CHECK_BT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(remote_address);
+
+ _bt_convert_address_to_hex(&addr_hex, remote_address);
+
+ ret = _bt_get_error_code(bluetooth_oob_remove_remote_data(&addr_hex));
+ if (BT_ERROR_NONE != ret) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ }
+ return ret;
+}
+
+int bt_adapter_set_manufacturer_data(char *data, int len)
+{
+
+ int ret;
+ bluetooth_manufacturer_data_t m_data = { 0 };
+
+ BT_CHECK_BT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(data);
+
+ if (len + 2 > sizeof(m_data.data) || len < 0)
+ return BT_ERROR_INVALID_PARAMETER;
+
+ m_data.data_len = len;
+ m_data.data[0] = len + 1;
+ m_data.data[1] = 0xFF;
+
+ memcpy(&m_data.data[2], data, len);
+
+ ret = _bt_get_error_code(bluetooth_set_manufacturer_data(&m_data));
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ }
+
+ return ret;
+}
+
+int bt_adapter_set_manufacturer_data_changed_cb(
+ bt_adapter_manufacturer_data_changed_cb callback,
+ void *user_data)
+{
+ int ret = BT_ERROR_NONE;
+
+ BT_CHECK_BT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(callback);
+ _bt_set_cb(BT_EVENT_MANUFACTURER_DATA_CHANGED,
+ callback, user_data);
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ }
+
+ return ret;
+}
+
+int bt_adapter_unset_manufacturer_data_changed_cb(void)
+{
+ BT_CHECK_BT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ _bt_unset_cb(BT_EVENT_MANUFACTURER_DATA_CHANGED);
+ return BT_ERROR_NONE;
+}
+
+int bt_adapter_le_add_white_list(const char *address, bt_device_address_type_e address_type)
+{
+ int error_code = BT_ERROR_NONE;
+ bluetooth_device_address_t addr_hex = { {0,} };
+
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(address);
+ _bt_convert_address_to_hex(&addr_hex, address);
+
+ error_code = _bt_get_error_code(bluetooth_add_white_list(&addr_hex, address_type));
+ if (error_code != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code), error_code);
+ }
+
+ return error_code;
+}
+
+int bt_adapter_le_remove_white_list(const char *address, bt_device_address_type_e address_type)
+{
+ int error_code = BT_ERROR_NONE;
+ bluetooth_device_address_t addr_hex = { {0,} };
+
+ BT_CHECK_BT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(address);
+ _bt_convert_address_to_hex(&addr_hex, address);
+
+ error_code = _bt_get_error_code(bluetooth_remove_white_list(&addr_hex, address_type));
+ if (error_code != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code), error_code);
+ }
+
+ return error_code;
+}
+
+int bt_adapter_le_clear_white_list(void)
+{
+ int error_code = BT_ERROR_NONE;
+
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+
+ error_code = _bt_get_error_code(bluetooth_clear_white_list());
+ if (error_code != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code), error_code);
+ }
+
+ return error_code;
+}
+
+int bt_adapter_le_set_scan_mode(bt_adapter_le_scan_mode_e scan_mode)
+{
+ int ret = BT_ERROR_NONE;
+ bluetooth_le_scan_params_t scan_params;
+
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+
+ scan_params.type = BT_ADAPTER_LE_ACTIVE_SCAN;
+
+ if (scan_mode == BT_ADAPTER_LE_SCAN_MODE_BALANCED) {
+ scan_params.interval = 5000;
+ scan_params.window = 2000;
+ } else if (scan_mode == BT_ADAPTER_LE_SCAN_MODE_LOW_LATENCY) {
+ scan_params.interval = 5000;
+ scan_params.window = 5000;
+ } else if (scan_mode == BT_ADAPTER_LE_SCAN_MODE_LOW_ENERGY) {
+ scan_params.interval = 5000;
+ scan_params.window = 500;
+ } else
+ return BT_ERROR_INVALID_PARAMETER;
+
+ ret = _bt_get_error_code(bluetooth_set_scan_parameters(&scan_params));
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ }
+ return ret;
+}
+
+
+int bt_adapter_le_create_advertiser(bt_advertiser_h *advertiser)
+{
+ bt_advertiser_s *__adv = NULL;
+
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(advertiser);
+
+ __adv = (bt_advertiser_s*)g_malloc0(sizeof(bt_advertiser_s));
+ if (__adv == NULL) {
+ BT_ERR("OUT_OF_MEMORY(0x%08x)", BT_ERROR_OUT_OF_MEMORY);
+ return BT_ERROR_OUT_OF_MEMORY;
+ }
+ __adv->handle = (int)__adv;
+
+ *advertiser = (bt_advertiser_h)__adv;
+
+ advertiser_list = g_slist_append(advertiser_list, __adv);
+
+ return BT_ERROR_NONE;
+}
+
+int bt_adapter_le_destroy_advertiser(bt_advertiser_h advertiser)
+{
+ int ret = BT_ERROR_NONE;
+ int error_code;
+ bt_advertiser_s *__adv = (bt_advertiser_s *)advertiser;
+
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(advertiser);
+
+ _bt_unset_cb(BT_EVENT_ADVERTISING_STATE_CHANGED);
+
+ error_code = bluetooth_set_advertising(__adv->handle, FALSE);
+ ret = _bt_get_error_code(error_code);
+ if (ret != BT_ERROR_NONE)
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+
+ advertiser_list = g_slist_remove(advertiser_list, __adv);
+
+ /* Free advertising data */
+ g_free(__adv->adv_data);
+ g_free(__adv->scan_rsp_data);
+ g_free(__adv);
+
+ return BT_ERROR_NONE;
+}
+
+static int __bt_remove_ad_data_by_type(char *in_data, unsigned int in_len,
+ char in_type, char **data, unsigned int *data_len)
+{
+ if (in_data == NULL || data == NULL || data_len == NULL)
+ return BT_ERROR_OPERATION_FAILED;
+
+ int i;
+ int len = 0;
+ int type = 0;
+ char *p;
+
+ for (i = 0; i < in_len; i++) {
+ len = in_data[i];
+ if (len <= 0 || i + 1 >= in_len) {
+ BT_ERR("Invalid advertising data");
+ return BT_ERROR_OPERATION_FAILED;
+ }
+
+ type = in_data[i + 1];
+ if (type == in_type) {
+ i = i + 2;
+ len--;
+ break;
+ }
+
+ i += len;
+ len = 0;
+ }
+
+ if (i + len > in_len) {
+ BT_ERR("Invalid advertising data");
+ return BT_ERROR_OPERATION_FAILED;
+ } else if (len == 0 &&
+ in_type != BT_ADAPTER_LE_ADVERTISING_DATA_LOCAL_NAME &&
+ in_type != BT_ADAPTER_LE_ADVERTISING_DATA_TX_POWER_LEVEL) {
+ BT_INFO("AD Type 0x%02x data is not set", in_type);
+ return BT_ERROR_OPERATION_FAILED;
+ }
+
+ p = (char *)malloc(sizeof(char) * (in_len - len));
+ if (p == NULL) {
+ return BT_ERROR_OUT_OF_MEMORY;
+ }
+
+ memcpy(p, in_data, sizeof(char) * i);
+ memcpy(p + i, in_data + i + len, sizeof(char) * (in_len - len - i));
+
+ *data = p;
+ *data_len = in_len - len;
+
+ return BT_ERROR_NONE;
+}
+
+int bt_adapter_le_add_advertising_data(bt_advertiser_h advertiser,
+ bt_adapter_le_packet_type_e pkt_type, bt_adapter_le_packet_data_type_e data_type,
+ void *data, unsigned int data_size)
+{
+ int ret = BT_ERROR_NONE;
+ bt_advertiser_s *__adv = (bt_advertiser_s *)advertiser;
+ char **p;
+ unsigned int *len;
+ unsigned int *system_data_len;
+ char *new_p;
+ bt_adapter_le_advertising_data_type_e adv_type;
+
+ adv_type = (bt_adapter_le_advertising_data_type_e)data_type;
+
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ if ((data == NULL || data_size == 0) &&
+ (adv_type != BT_ADAPTER_LE_ADVERTISING_DATA_LOCAL_NAME &&
+ adv_type != BT_ADAPTER_LE_ADVERTISING_DATA_TX_POWER_LEVEL)) {
+ BT_ERR("empty data for packet type %d", pkt_type);
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ BT_CHECK_INPUT_PARAMETER(advertiser);
+
+ if (pkt_type == BT_ADAPTER_LE_PACKET_ADVERTISING) {
+ p = &__adv->adv_data;
+ len = &__adv->adv_data_len;
+ system_data_len = &__adv->adv_system_data_len;
+ } else if (pkt_type == BT_ADAPTER_LE_PACKET_SCAN_RESPONSE) {
+ p = &__adv->scan_rsp_data;
+ len = &__adv->scan_rsp_data_len;
+ system_data_len = &__adv->scan_rsp_system_data_len;
+ } else
+ return BT_ERROR_INVALID_PARAMETER;
+
+ if (adv_type == BT_ADAPTER_LE_ADVERTISING_DATA_LOCAL_NAME ||
+ adv_type == BT_ADAPTER_LE_ADVERTISING_DATA_TX_POWER_LEVEL)
+ *system_data_len += 1;
+
+ /* 2 bytes are required for Length and AD Type */
+ if (*len + *system_data_len + data_size + 2 > 31) {
+ BT_ERR("Quota exceeded.(0x%08x)", ret);
+ return BT_ERROR_QUOTA_EXCEEDED;
+ }
+
+ if (*len == 0)
+ *p = NULL;
+
+ new_p = realloc(*p, sizeof(char) * (*len + data_size + 2));
+ if (new_p == NULL) {
+ return BT_ERROR_OUT_OF_MEMORY;
+ }
+
+ new_p[*len] = data_size + 1;
+ new_p[*len + 1] = adv_type;
+ if ((data != NULL) && (data_size != 0))
+ memcpy(new_p + (*len + 2), data, data_size);
+
+ *p = new_p;
+ *len += data_size + 2;
+ return ret;
+}
+
+int bt_adapter_le_remove_advertising_data(bt_advertiser_h advertiser,
+ bt_adapter_le_packet_type_e pkt_type, bt_adapter_le_packet_data_type_e data_type)
+{
+ int ret = BT_ERROR_NONE;
+ bt_advertiser_s *__adv = (bt_advertiser_s *)advertiser;
+ char **p;
+ unsigned int *len;
+ unsigned int *system_data_len;
+ char *new_p = NULL;
+ unsigned int new_len = 0;
+ bt_adapter_le_advertising_data_type_e adv_type;
+
+ adv_type = (bt_adapter_le_advertising_data_type_e)data_type;
+
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(advertiser);
+
+ switch (pkt_type) {
+ case BT_ADAPTER_LE_PACKET_ADVERTISING:
+ p = &__adv->adv_data;
+ len = &__adv->adv_data_len;
+ system_data_len = &__adv->adv_system_data_len;
+ break;
+
+ case BT_ADAPTER_LE_PACKET_SCAN_RESPONSE:
+ p = &__adv->scan_rsp_data;
+ len = &__adv->scan_rsp_data_len;
+ system_data_len = &__adv->scan_rsp_system_data_len;
+ break;
+
+ default:
+ BT_ERR("Unknown LE packet type : %d", pkt_type);
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ ret = __bt_remove_ad_data_by_type(*p, *len, adv_type, &new_p, &new_len);
+ if (ret != BT_ERROR_NONE) {
return ret;
}
+
+ free(*p);
+ *p = new_p;
+ *len = new_len;
+
+ if (adv_type == BT_ADAPTER_LE_ADVERTISING_DATA_LOCAL_NAME ||
+ adv_type == BT_ADAPTER_LE_ADVERTISING_DATA_TX_POWER_LEVEL)
+ *system_data_len -= 1;
+
+ return ret;
}
+static int __bt_convert_string_to_uuid(const char *string, char **uuid, int *bit)
+{
+ char *data;
+
+ if (strlen(string) == 4) { // 16 bit uuid
+ unsigned short val;
+ char *stop;
+ data = g_malloc0(sizeof(char) * 2);
+ val = strtol(string, &stop, 16);
+ val = htons(val);
+ memcpy(data, &val, 2);
+ *uuid = data;
+ *bit = 16;
+ } else if (strlen(string) == 36) { // 128 bit uuid
+ if (string[8] != '-' || string[13] != '-' ||
+ string[18] != '-' || string[23] != '-') {
+ BT_ERR("Invalid UUID");
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ int ret;
+ unsigned int val0, val4;
+ unsigned short val1, val2, val3, val5;
+ data = g_malloc0(sizeof(char) * 16);
+ /* Fix : NULL_RETURNS */
+ if (data == NULL)
+ return BT_ERROR_OUT_OF_MEMORY;
+
+ ret = sscanf(string, "%08x-%04hx-%04hx-%04hx-%08x%04hx",
+ &val0, &val1, &val2, &val3, &val4, &val5);
+ if (ret != 6)
+ return BT_ERROR_OPERATION_FAILED;
+
+ val0 = htonl(val0);
+ val1 = htons(val1);
+ val2 = htons(val2);
+ val3 = htons(val3);
+ val4 = htonl(val4);
+ val5 = htons(val5);
+
+ memcpy(data, &val0, 4);
+ memcpy(data + 4, &val1, 2);
+ memcpy(data + 6, &val2, 2);
+ memcpy(data + 8, &val3, 2);
+ memcpy(data + 10, &val4, 4);
+ memcpy(data + 14, &val5, 2);
+
+ *uuid = data;
+ *bit = 128;
+ } else {
+ BT_ERR("Invalid UUID");
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ return BT_ERROR_NONE;
+}
+
+static int __bt_convert_byte_ordering(char *data, int data_len, char **converted_data)
+{
+ char *swp;
+ int i, j;
+
+ /* Convert to little endian */
+ swp = g_malloc0(data_len);
+ /* Fix : NULL_RETURNS */
+ if (swp == NULL)
+ return BT_ERROR_OUT_OF_MEMORY;
+ for (i = 0, j = data_len - 1; i < data_len; i++, j--)
+ swp[i] = data[j];
+
+ *converted_data = swp;
+
+ return BT_ERROR_NONE;
+}
+
+static int __bt_find_adv_data_type(bt_advertiser_h advertiser,
+ bt_adapter_le_packet_type_e pkt_type, bt_adapter_le_advertising_data_type_e data_type,
+ char **data_ptr, int *data_len)
+{
+ int type;
+ int len;
+ int i;
+ char *adv_data = NULL;
+ int adv_len = 0;
+ bt_advertiser_s *__adv = (bt_advertiser_s *)advertiser;
+
+ if (pkt_type == BT_ADAPTER_LE_PACKET_ADVERTISING) {
+ adv_data = __adv->adv_data;
+ adv_len = __adv->adv_data_len;
+ } else if (pkt_type == BT_ADAPTER_LE_PACKET_SCAN_RESPONSE) {
+ adv_data = __adv->scan_rsp_data;
+ adv_len = __adv->scan_rsp_data_len;
+ } else
+ return BT_ERROR_INVALID_PARAMETER;
+
+ if (!adv_data)
+ return BT_ERROR_OPERATION_FAILED;
+
+ for (i = 0; i <adv_len ; i++) {
+ len = adv_data[i];
+ type = adv_data[i + 1];
+
+ if (type == data_type) {
+ *data_ptr = &adv_data[i];
+ *data_len = len;
+ return BT_ERROR_NONE;
+ } else {
+ i = i + adv_data[i];
+ }
+ }
+
+ return BT_ERROR_NONE;
+}
+
+static int __bt_append_adv_type_data(bt_advertiser_h advertiser,
+ bt_adapter_le_packet_type_e pkt_type,
+ char *new_data, int new_data_len,
+ bt_adapter_le_advertising_data_type_e data_type, char *data_ptr, int data_len)
+{
+ int type;
+ int len;
+ int dest_type;
+ int i;
+ char *new_adv = NULL;
+ char *adv_data = NULL;
+ int adv_len = 0;
+ bt_advertiser_s *__adv = (bt_advertiser_s *)advertiser;
+
+ if (pkt_type == BT_ADAPTER_LE_PACKET_ADVERTISING) {
+ adv_data = __adv->adv_data;
+ adv_len = __adv->adv_data_len;
+ } else if (pkt_type == BT_ADAPTER_LE_PACKET_SCAN_RESPONSE) {
+ adv_data = __adv->scan_rsp_data;
+ adv_len = __adv->scan_rsp_data_len;
+ } else
+ return BT_ERROR_INVALID_PARAMETER;
+
+ if (!adv_data)
+ return BT_ERROR_OPERATION_FAILED;
+
+ dest_type = data_ptr[1];
+
+ if (data_type != dest_type) {
+ BT_ERR("Invalid data type");
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ new_adv = g_malloc0(adv_len + new_data_len);
+ if (!new_adv)
+ return BT_ERROR_OUT_OF_MEMORY;
+
+ for (i = 0; i < adv_len; i++) {
+ len = adv_data[i];
+ type = adv_data[i + 1];
+
+ if (type == dest_type) {
+ int rest_data_len;
+
+ memcpy(new_adv + i, &adv_data[i], len + 1);
+ memcpy(new_adv + i + len + 1, new_data, new_data_len);
+ new_adv[i] += new_data_len;
+
+ rest_data_len = adv_len - (i + len + 1);
+ if (rest_data_len > 0)
+ memcpy(new_adv + i + len + 1 + new_data_len,
+ &adv_data[i + len + 1], rest_data_len);
+
+ break;
+ } else {
+ memcpy(new_adv + i, &adv_data[i], len + 1);
+ i = i + len;
+ }
+ }
+
+ if (pkt_type == BT_ADAPTER_LE_PACKET_ADVERTISING) {
+ g_free(__adv->adv_data);
+ __adv->adv_data = new_adv;
+ __adv->adv_data_len += new_data_len;
+ } else if (pkt_type == BT_ADAPTER_LE_PACKET_SCAN_RESPONSE) {
+ g_free(__adv->scan_rsp_data);
+ __adv->scan_rsp_data = new_adv;
+ __adv->scan_rsp_data_len += new_data_len;
+ }
+
+ return BT_ERROR_NONE;
+}
+
+int bt_adapter_le_add_advertising_service_uuid(bt_advertiser_h advertiser,
+ bt_adapter_le_packet_type_e pkt_type, const char *uuid)
+{
+ int ret = BT_ERROR_NONE;
+ bt_adapter_le_advertising_data_type_e data_type = 0;
+ int byte_len = 0;
+ int uuid_bit = 0;
+ char *uuid_ptr = NULL;
+ char *data_ptr = NULL;
+ char *converted_uuid = NULL;
+ int data_len = 0;
+
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(advertiser);
+ BT_CHECK_INPUT_PARAMETER(uuid);
+
+ ret = __bt_convert_string_to_uuid(uuid, &uuid_ptr, &uuid_bit);
+ if (ret != BT_ERROR_NONE)
+ return ret;
+
+ if (uuid_bit == 16) {
+ byte_len = 2;
+ data_type = BT_ADAPTER_LE_ADVERTISING_DATA_INCOMP_LIST_16_BIT_SERVICE_CLASS_UUIDS;
+ } else if (uuid_bit == 128) {
+ byte_len = 16;
+ data_type = BT_ADAPTER_LE_ADVERTISING_DATA_INCOMP_LIST_128_BIT_SERVICE_CLASS_UUIDS;
+ }
+
+ __bt_convert_byte_ordering(uuid_ptr, byte_len, &converted_uuid);
+ g_free(uuid_ptr);
+
+ __bt_find_adv_data_type(advertiser, pkt_type, data_type, &data_ptr, &data_len);
+ if (data_ptr) {
+ ret = __bt_append_adv_type_data(advertiser, pkt_type, converted_uuid, byte_len, data_type, data_ptr, data_len);
+ } else {
+ ret = bt_adapter_le_add_advertising_data(advertiser, pkt_type, data_type, converted_uuid, byte_len);
+ }
+ g_free(converted_uuid);
+
+ return ret;
+}
+
+int bt_adapter_le_add_advertising_service_solicitation_uuid(bt_advertiser_h advertiser,
+ bt_adapter_le_packet_type_e pkt_type, const char *uuid)
+{
+ int ret = BT_ERROR_NONE;
+ bt_adapter_le_advertising_data_type_e data_type = 0;
+ int byte_len = 0;
+ int uuid_bit = 0;
+ char *uuid_ptr = NULL;
+ char *data_ptr = NULL;
+ char *converted_uuid = NULL;
+ int data_len = 0;
+
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(advertiser);
+ BT_CHECK_INPUT_PARAMETER(uuid);
+
+ ret = __bt_convert_string_to_uuid(uuid, &uuid_ptr, &uuid_bit);
+ if (ret != BT_ERROR_NONE)
+ return ret;
+
+ if (uuid_bit == 16) {
+ byte_len = 2;
+ data_type = BT_ADAPTER_LE_ADVERTISING_DATA_16_BIT_SERVICE_SOLICITATION_UUIDS;
+ } else if (uuid_bit == 128) {
+ byte_len = 16;
+ data_type = BT_ADAPTER_LE_ADVERTISING_DATA_128_BIT_SERVICE_SOLICITATION_UUIDS;
+ }
+
+ __bt_convert_byte_ordering(uuid_ptr, byte_len, &converted_uuid);
+ g_free(uuid_ptr);
+
+ __bt_find_adv_data_type(advertiser, pkt_type, data_type, &data_ptr, &data_len);
+ if (data_ptr) {
+ ret = __bt_append_adv_type_data(advertiser, pkt_type, converted_uuid, byte_len, data_type, data_ptr, data_len);
+ } else {
+ ret = bt_adapter_le_add_advertising_data(advertiser, pkt_type, data_type, converted_uuid, byte_len);
+ }
+ g_free(converted_uuid);
+
+ return ret;
+}
+
+int bt_adapter_le_add_advertising_service_data(bt_advertiser_h advertiser,
+ bt_adapter_le_packet_type_e pkt_type, const char *uuid,
+ const char *service_data, int service_data_len)
+{
+ int ret = BT_ERROR_NONE;
+ char *data_ptr = NULL;
+ int data_len;
+ char *adv_data = NULL;
+ int uuid_bit;
+ char *uuid_ptr;
+ int byte_len;
+ char *converted_uuid;
+
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(advertiser);
+ BT_CHECK_INPUT_PARAMETER(service_data);
+
+ __bt_find_adv_data_type(advertiser, pkt_type,
+ BT_ADAPTER_LE_ADVERTISING_DATA_SERVICE_DATA,
+ &data_ptr, &data_len);
+ if (data_ptr) {
+ BT_ERR("Aleady existed");
+ return BT_ERROR_ALREADY_DONE;
+ }
+
+ ret = __bt_convert_string_to_uuid(uuid, &uuid_ptr, &uuid_bit);
+ if (ret != BT_ERROR_NONE)
+ return ret;
+
+ if (uuid_bit == 16) {
+ byte_len = 2;
+ } else if (uuid_bit == 128) {
+ BT_ERR("128 bit UUID is not supported");
+ g_free(uuid_ptr);
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ __bt_convert_byte_ordering(uuid_ptr, byte_len, &converted_uuid);
+ g_free(uuid_ptr);
+
+ adv_data = g_malloc0(sizeof(char) * (service_data_len + 2));
+ if (!adv_data) {
+ g_free(converted_uuid);
+ return BT_ERROR_OUT_OF_MEMORY;
+ }
+
+ memcpy(adv_data, converted_uuid, 2);
+ memcpy(adv_data + 2, service_data, service_data_len);
+
+ ret = bt_adapter_le_add_advertising_data(advertiser,
+ pkt_type, BT_ADAPTER_LE_ADVERTISING_DATA_SERVICE_DATA,
+ adv_data, service_data_len + 2);
+
+ g_free(adv_data);
+ g_free(converted_uuid);
+
+ return ret;
+}
+
+int bt_adapter_le_set_advertising_appearance(bt_advertiser_h advertiser,
+ bt_adapter_le_packet_type_e pkt_type, int appearance)
+{
+ int ret = BT_ERROR_NONE;
+ char *data_ptr = NULL;
+ int data_len;
+
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(advertiser);
+
+ __bt_find_adv_data_type(advertiser, pkt_type, BT_ADAPTER_LE_ADVERTISING_DATA_APPEARANCE,
+ &data_ptr, &data_len);
+ if (data_ptr) {
+ BT_ERR("Aleady existed");
+ return BT_ERROR_ALREADY_DONE;
+ }
+
+ ret = bt_adapter_le_add_advertising_data(advertiser,
+ pkt_type, BT_ADAPTER_LE_ADVERTISING_DATA_APPEARANCE, &appearance, 2);
+
+ return ret;
+}
+
+int bt_adapter_le_add_advertising_manufacturer_data(bt_advertiser_h advertiser,
+ bt_adapter_le_packet_type_e pkt_type, int manufacturer_id,
+ const char *manufacturer_data, int manufacturer_data_len)
+{
+ int ret = BT_ERROR_NONE;
+ char *data_ptr = NULL;
+ int data_len;
+ char *adv_data = NULL;
+
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(advertiser);
+ BT_CHECK_INPUT_PARAMETER(manufacturer_data);
+
+ __bt_find_adv_data_type(advertiser, pkt_type,
+ BT_ADAPTER_LE_ADVERTISING_DATA_MANUFACTURER_SPECIFIC_DATA,
+ &data_ptr, &data_len);
+ if (data_ptr) {
+ BT_ERR("Aleady existed");
+ return BT_ERROR_ALREADY_DONE;
+ }
+
+ adv_data = g_malloc0(sizeof(char) * (manufacturer_data_len + 2));
+ if (!adv_data)
+ return BT_ERROR_OUT_OF_MEMORY;
+
+ adv_data[0] = manufacturer_id & 0xffffffff;
+ adv_data[1] = (manufacturer_id & 0xff00) >> 8;
+ memcpy(adv_data + 2, manufacturer_data, manufacturer_data_len);
+
+ ret = bt_adapter_le_add_advertising_data(advertiser,
+ pkt_type, BT_ADAPTER_LE_ADVERTISING_DATA_MANUFACTURER_SPECIFIC_DATA,
+ adv_data, manufacturer_data_len + 2);
+
+ g_free(adv_data);
+
+ return ret;
+}
+
+int bt_adapter_le_set_advertising_device_name(bt_advertiser_h advertiser,
+ bt_adapter_le_packet_type_e pkt_type, bool include_name)
+{
+ int ret = BT_ERROR_NONE;
+ char *data_ptr = NULL;
+ int data_len;
+
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(advertiser);
+
+ if (!include_name) {
+ ret = bt_adapter_le_remove_advertising_data(advertiser, pkt_type,
+ BT_ADAPTER_LE_ADVERTISING_DATA_LOCAL_NAME);
+ return ret;
+ }
+
+ __bt_find_adv_data_type(advertiser, pkt_type,
+ BT_ADAPTER_LE_ADVERTISING_DATA_LOCAL_NAME,
+ &data_ptr, &data_len);
+ if (data_ptr) {
+ BT_ERR("Aleady existed");
+ return BT_ERROR_ALREADY_DONE;
+ }
+
+ ret = bt_adapter_le_add_advertising_data(advertiser,
+ pkt_type, BT_ADAPTER_LE_ADVERTISING_DATA_LOCAL_NAME,
+ NULL, 0);
+
+ return ret;
+}
+
+int bt_adapter_le_set_advertising_tx_power_level(bt_advertiser_h advertiser,
+ bt_adapter_le_packet_type_e pkt_type, bool include_tx_power)
+{
+ int ret = BT_ERROR_NONE;
+ char *data_ptr = NULL;
+ int data_len;
+
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(advertiser);
+
+ if (!include_tx_power) {
+ ret = bt_adapter_le_remove_advertising_data(advertiser, pkt_type,
+ BT_ADAPTER_LE_ADVERTISING_DATA_TX_POWER_LEVEL);
+ return ret;
+ }
+
+ __bt_find_adv_data_type(advertiser, pkt_type,
+ BT_ADAPTER_LE_ADVERTISING_DATA_TX_POWER_LEVEL,
+ &data_ptr, &data_len);
+ if (data_ptr) {
+ BT_ERR("Aleady existed");
+ return BT_ERROR_ALREADY_DONE;
+ }
+
+ ret = bt_adapter_le_add_advertising_data(advertiser,
+ pkt_type, BT_ADAPTER_LE_ADVERTISING_DATA_TX_POWER_LEVEL,
+ NULL, 0);
+
+ return ret;
+}
+
+int bt_adapter_le_clear_advertising_data(bt_advertiser_h advertiser,
+ bt_adapter_le_packet_type_e pkt_type)
+{
+ int ret = BT_ERROR_NONE;
+ bt_advertiser_s *__adv = (bt_advertiser_s *)advertiser;
+ char **p;
+ unsigned int *len;
+ unsigned int *system_data_len;
+
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(advertiser);
+
+ switch (pkt_type) {
+ case BT_ADAPTER_LE_PACKET_ADVERTISING:
+ p = &__adv->adv_data;
+ len = &__adv->adv_data_len;
+ system_data_len = &__adv->adv_system_data_len;
+ break;
+
+ case BT_ADAPTER_LE_PACKET_SCAN_RESPONSE:
+ p = &__adv->scan_rsp_data;
+ len = &__adv->scan_rsp_data_len;
+ system_data_len = &__adv->scan_rsp_system_data_len;
+ break;
+
+ default:
+ BT_ERR("Unknown LE packet type : %d", pkt_type);
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ if (*p) {
+ free(*p);
+ *p = NULL;
+ }
+ *len = 0;
+ *system_data_len = 0;
+
+ return ret;
+}
+
+#ifndef TIZEN_WEARABLE
+int bt_adapter_le_start_advertising(bt_advertiser_h advertiser,
+ bt_adapter_le_advertising_params_s *adv_params,
+ bt_adapter_le_advertising_state_changed_cb cb, void *user_data)
+{
+ int ret = BT_ERROR_NONE;
+ int error_code;
+ bt_advertiser_s *__adv = (bt_advertiser_s *)advertiser;
+ bluetooth_advertising_data_t adv = { {0} };
+ bluetooth_scan_resp_data_t resp = { {0} };
+ bluetooth_advertising_params_t param;
+
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(advertiser);
+
+ if (__adv->adv_data_len > 0 && __adv->adv_data) {
+ memcpy(adv.data, __adv->adv_data, __adv->adv_data_len);
+ error_code = bluetooth_set_advertising_data(__adv->handle, &adv, __adv->adv_data_len);
+ ret = _bt_get_error_code(error_code);
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ return ret;
+ }
+ }
+
+ if (__adv->scan_rsp_data_len > 0 && __adv->scan_rsp_data) {
+ memcpy(resp.data, __adv->scan_rsp_data, __adv->scan_rsp_data_len);
+ error_code = bluetooth_set_scan_response_data(__adv->handle, &resp, __adv->scan_rsp_data_len);
+ ret = _bt_get_error_code(error_code);
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ return ret;
+ }
+ }
+
+ if (adv_params == NULL) {
+ error_code = bluetooth_set_advertising(__adv->handle, TRUE);
+ } else {
+ param.interval_min = adv_params->interval_min;
+ param.interval_max = adv_params->interval_max;
+ param.filter_policy = BT_ADAPTER_LE_ADVERTISING_FILTER_DEFAULT;
+ param.type = BT_ADAPTER_LE_ADVERTISING_CONNECTABLE;
+ error_code = bluetooth_set_custom_advertising(__adv->handle, TRUE, &param);
+ }
+
+ ret = _bt_get_error_code(error_code);
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ return ret;
+ }
+
+ _bt_set_cb(BT_EVENT_ADVERTISING_STATE_CHANGED, cb, user_data);
+
+ return ret;
+}
+#endif
+
+int bt_adapter_le_stop_advertising(bt_advertiser_h advertiser)
+{
+ int ret = BT_ERROR_NONE;
+ bt_advertiser_s *__adv = (bt_advertiser_s *)advertiser;
+
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(advertiser);
+
+ ret = _bt_get_error_code(bluetooth_set_advertising(__adv->handle, FALSE));
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ }
+
+ return ret;
+}
+
+int bt_adapter_le_start_advertising_new(bt_advertiser_h advertiser,
+ bt_adapter_le_advertising_state_changed_cb cb, void *user_data)
+{
+ int ret = BT_ERROR_NONE;
+ int error_code;
+ bt_advertiser_s *__adv = (bt_advertiser_s *)advertiser;
+ bluetooth_advertising_data_t adv = { {0} };
+ bluetooth_scan_resp_data_t resp = { {0} };
+ bluetooth_advertising_params_t param;
+ float interval = 500;
+
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(advertiser);
+
+ if (__adv->adv_data_len > 0 && __adv->adv_data) {
+ memcpy(adv.data, __adv->adv_data, __adv->adv_data_len);
+ error_code = bluetooth_set_advertising_data(__adv->handle, &adv, __adv->adv_data_len);
+ ret = _bt_get_error_code(error_code);
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ return ret;
+ }
+ }
+
+ if (__adv->scan_rsp_data_len > 0 && __adv->scan_rsp_data) {
+ memcpy(resp.data, __adv->scan_rsp_data, __adv->scan_rsp_data_len);
+ error_code = bluetooth_set_scan_response_data(__adv->handle, &resp, __adv->scan_rsp_data_len);
+ ret = _bt_get_error_code(error_code);
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ return ret;
+ }
+ }
+
+ if (__adv->adv_params.mode == BT_ADAPTER_LE_ADVERTISING_MODE_BALANCED)
+ interval = 500;
+ else if (__adv->adv_params.mode == BT_ADAPTER_LE_ADVERTISING_MODE_LOW_LATENCY)
+ interval = 150;
+ else if (__adv->adv_params.mode == BT_ADAPTER_LE_ADVERTISING_MODE_LOW_ENERGY)
+ interval = 1000;
+
+ param.interval_min = interval;
+ param.interval_max = interval;
+ param.filter_policy = __adv->adv_params.filter_policy;
+ param.type = __adv->adv_params.type;
+ error_code = bluetooth_set_custom_advertising(__adv->handle, TRUE, &param);
+
+ ret = _bt_get_error_code(error_code);
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ return ret;
+ }
+
+ __adv->cb = cb;
+ __adv->user_data = user_data;
+
+ return ret;
+}
+
+void _bt_adapter_le_invoke_advertising_state_cb(int handle, int result, bt_adapter_le_advertising_state_e adv_state)
+{
+ const GSList *l = NULL;
+
+ for (l = advertiser_list; l; l = g_slist_next(l)) {
+ bt_advertiser_s *__adv = (bt_advertiser_s *)l->data;
+ if (__adv->handle == handle) {
+ if (__adv->cb == NULL) {
+ BT_ERR("advertiser cb is NULL");
+ return;
+ }
+
+ __adv->cb(result, (bt_advertiser_h)__adv, adv_state, __adv->user_data);
+ return;
+ }
+ }
+
+ BT_ERR("No available advertiser");
+}
+
+int bt_adapter_le_set_advertising_mode(bt_advertiser_h advertiser,
+ bt_adapter_le_advertising_mode_e mode)
+{
+ int error_code = BT_ERROR_NONE;
+ bt_advertiser_s *__adv = (bt_advertiser_s *)advertiser;
+
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(advertiser);
+
+ if (mode < BT_ADAPTER_LE_ADVERTISING_MODE_BALANCED ||
+ mode > BT_ADAPTER_LE_ADVERTISING_MODE_LOW_ENERGY)
+ return BT_ERROR_INVALID_PARAMETER;
+
+ error_code = _bt_get_error_code(bluetooth_check_privilege_advertising_parameter());
+ if (error_code != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code), error_code);
+ return BT_ERROR_PERMISSION_DENIED;
+ }
+
+ // TODO : Before set the mode, check the inprogress status
+ __adv->adv_params.mode = mode;
+
+ return error_code;
+}
+
+int bt_adapter_le_set_advertising_filter_policy(bt_advertiser_h advertiser,
+ bt_adapter_le_advertising_filter_policy_e filter_policy)
+{
+ int error_code = BT_ERROR_NONE;
+ bt_advertiser_s *__adv = (bt_advertiser_s *)advertiser;
+
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(advertiser);
+
+ if (filter_policy < BT_ADAPTER_LE_ADVERTISING_FILTER_DEFAULT ||
+ filter_policy > BT_ADAPTER_LE_ADVERTISING_FILTER_ALLOW_SCAN_CONN_WL)
+ return BT_ERROR_INVALID_PARAMETER;
+
+ error_code = _bt_get_error_code(bluetooth_check_privilege_advertising_parameter());
+ if (error_code != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code), error_code);
+ return BT_ERROR_PERMISSION_DENIED;
+ }
+
+ // TODO : Before set the filter policy, check the inprogress status
+ __adv->adv_params.filter_policy = filter_policy;
+
+ return error_code;
+}
+
+int bt_adapter_le_set_advertising_connectable(bt_advertiser_h advertiser, bool connectable)
+{
+ int error_code = BT_ERROR_NONE;
+ bt_advertiser_s *__adv = (bt_advertiser_s *)advertiser;
+
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(advertiser);
+
+ error_code = _bt_get_error_code(bluetooth_check_privilege_advertising_parameter());
+ if (error_code != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code), error_code);
+ return BT_ERROR_PERMISSION_DENIED;
+ }
+
+ if (connectable)
+ __adv->adv_params.type = BT_ADAPTER_LE_ADVERTISING_CONNECTABLE;
+ else
+ __adv->adv_params.type = BT_ADAPTER_LE_ADVERTISING_SCANNABLE;
+
+ // TODO : Before set the type, check the inprogress status
+
+ return error_code;
+}
+
+int bt_adapter_le_enable_privacy(bool enable_privacy)
+{
+ int error_code = BT_ERROR_NONE;
+
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+
+ error_code = _bt_get_error_code(bluetooth_enable_le_privacy(enable_privacy));
+
+ if (error_code != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code), error_code);
+ }
+ return error_code;
+}
+
+static void __bt_adapter_le_convert_scan_filter(bluetooth_le_scan_filter_t *dest, bt_le_scan_filter_s *src)
+{
+ int bit;
+ char *data;
+
+ memset(dest, 0x00, sizeof(bluetooth_le_scan_filter_t));
+
+ if (src->device_address) {
+ dest->added_features |= BLUETOOTH_LE_SCAN_FILTER_FEATURE_DEVICE_ADDRESS;
+ _bt_convert_address_to_hex(&dest->device_address, src->device_address);
+ }
+
+ if (src->device_name) {
+ dest->added_features |= BLUETOOTH_LE_SCAN_FILTER_FEATURE_DEVICE_NAME;
+ strncpy(dest->device_name, src->device_name, BLUETOOTH_ADVERTISING_DATA_LENGTH_MAX);
+ dest->device_name[BLUETOOTH_ADVERTISING_DATA_LENGTH_MAX - 1] = '\0';
+ }
+
+ if (src->service_uuid) {
+ if (__bt_convert_string_to_uuid(src->service_uuid, &data, &bit) == BT_ERROR_NONE) {
+ dest->added_features |= BLUETOOTH_LE_SCAN_FILTER_FEATURE_SERVICE_UUID;
+ if (bit == 16)
+ dest->service_uuid.data_len = 2;
+ else
+ dest->service_uuid.data_len = 16;
+ memcpy(dest->service_uuid.data.data, data, dest->service_uuid.data_len);
+ g_free(data);
+
+ dest->service_uuid_mask.data_len = dest->service_uuid.data_len;
+ if (src->service_uuid_mask) {
+ __bt_convert_string_to_uuid(src->service_uuid_mask, &data, &bit);
+ memcpy(dest->service_uuid_mask.data.data, data, dest->service_uuid_mask.data_len);
+ g_free(data);
+ } else {
+ memset(dest->service_uuid_mask.data.data, 0xFF, dest->service_uuid_mask.data_len);
+ }
+ }
+ }
+
+ if (src->service_solicitation_uuid) {
+ if (__bt_convert_string_to_uuid(src->service_solicitation_uuid, &data, &bit) == BT_ERROR_NONE) {
+ dest->added_features |= BLUETOOTH_LE_SCAN_FILTER_FEATURE_SERVICE_SOLICITATION_UUID;
+
+ if (bit == 16)
+ dest->service_solicitation_uuid.data_len = 2;
+ else
+ dest->service_solicitation_uuid.data_len = 16;
+ memcpy(dest->service_solicitation_uuid.data.data, data, dest->service_solicitation_uuid.data_len);
+ g_free(data);
+
+ dest->service_solicitation_uuid_mask.data_len = dest->service_solicitation_uuid.data_len;
+ if (src->service_solicitation_uuid_mask) {
+ __bt_convert_string_to_uuid(src->service_solicitation_uuid_mask, &data, &bit);
+ memcpy(dest->service_solicitation_uuid_mask.data.data, data, dest->service_solicitation_uuid_mask.data_len);
+ g_free(data);
+ } else {
+ memset(dest->service_solicitation_uuid_mask.data.data, 0xFF, dest->service_solicitation_uuid_mask.data_len);
+ }
+ }
+ }
+
+ if (src->service_data_uuid) {
+ char *service_uuid;
+ int uuid_len;
+ if (__bt_convert_string_to_uuid(src->service_data_uuid, &service_uuid, &bit) == BT_ERROR_NONE) {
+ dest->added_features |= BLUETOOTH_LE_SCAN_FILTER_FEATURE_SERVICE_DATA;
+ if (bit == 16)
+ uuid_len = 2;
+ else
+ uuid_len = 16;
+
+ memcpy(dest->service_data.data.data, service_uuid, uuid_len);
+ g_free(service_uuid);
+ memcpy(dest->service_data.data.data + uuid_len, src->service_data, src->service_data_len);
+ dest->service_data.data_len = uuid_len + src->service_data_len;
+
+ dest->service_data_mask.data_len = uuid_len + src->service_data_len;
+ memset(dest->service_data_mask.data.data, 0xFF, uuid_len);
+ if (src->service_data_mask)
+ memcpy(dest->service_data_mask.data.data + uuid_len, src->service_data_mask, src->service_data_len);
+ else
+ memset(dest->service_data_mask.data.data + uuid_len, 0xFF, src->service_data_len);
+ }
+ }
+
+ if (src->manufacturer_id > -1) {
+ dest->added_features |= BLUETOOTH_LE_SCAN_FILTER_FEATURE_MANUFACTURER_DATA;
+ dest->manufacturer_id = src->manufacturer_id;
+
+ if (src->manufacturer_data) {
+ memcpy(dest->manufacturer_data.data.data, src->manufacturer_data, src->manufacturer_data_len);
+ dest->manufacturer_data.data_len = src->manufacturer_data_len;
+
+ dest->manufacturer_data_mask.data_len = src->manufacturer_data_len;
+ if (src->manufacturer_data_mask)
+ memcpy(dest->manufacturer_data_mask.data.data, src->manufacturer_data_mask, src->manufacturer_data_len);
+ else
+ memset(dest->manufacturer_data_mask.data.data, 0xFF, src->manufacturer_data_len);
+ }
+ }
+}
+
+int bt_adapter_le_start_scan(bt_adapter_le_scan_result_cb cb, void *user_data)
+{
+ int error_code = BT_ERROR_NONE;
+
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(cb);
+
+ _bt_le_adapter_init();
+ _bt_set_cb(BT_EVENT_LE_SCAN_RESULT_UPDATED, cb, user_data);
+
+ error_code = _bt_get_error_code(bluetooth_start_le_discovery());
+ if (error_code != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code), error_code);
+ }
+ return error_code;
+}
+
+int bt_adapter_le_stop_scan(void)
+{
+ int error_code = BT_ERROR_NONE;
+
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ error_code = _bt_get_error_code(bluetooth_stop_le_discovery());
+ if (error_code != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code), error_code);
+ }
+ return error_code;
+}
+
+int bt_adapter_le_get_scan_result_service_uuids(const bt_adapter_le_device_scan_result_info_s *info,
+ bt_adapter_le_packet_type_e pkt_type, char ***uuids, int *count)
+{
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(info);
+ BT_CHECK_INPUT_PARAMETER(uuids);
+ BT_CHECK_INPUT_PARAMETER(count);
+
+ int adv_length = 0;
+ char *adv_data = NULL;
+ char *remain_data = NULL;
+ int remain_len = 0;
+ int field_len = 0;
+ int uuid_size = 0;
+ int uuid_count = 0;
+ int uuid_index = 0;
+ int i;
+
+ if (pkt_type == BT_ADAPTER_LE_PACKET_ADVERTISING) {
+ adv_data = info->adv_data;
+ adv_length = info->adv_data_len;
+ } else if (pkt_type == BT_ADAPTER_LE_PACKET_SCAN_RESPONSE) {
+ adv_data = info->scan_data;
+ adv_length = info->scan_data_len;
+ } else
+ return BT_ERROR_INVALID_PARAMETER;
+
+ if (!adv_data || adv_length < 3)
+ return BT_ERROR_NO_DATA;
+
+ remain_data = adv_data;
+ remain_len = adv_length;
+ field_len = 0;
+ while (remain_len > 0) {
+ field_len = remain_data[0];
+ if (remain_data[1] == BT_ADAPTER_LE_ADVERTISING_DATA_INCOMP_LIST_16_BIT_SERVICE_CLASS_UUIDS ||
+ remain_data[1] == BT_ADAPTER_LE_ADVERTISING_DATA_COMP_LIST_16_BIT_SERVICE_CLASS_UUIDS)
+ uuid_count += (field_len - 1) / 2;
+ else if (remain_data[1] == BT_ADAPTER_LE_ADVERTISING_DATA_INCOMP_LIST_128_BIT_SERVICE_CLASS_UUIDS ||
+ remain_data[1] == BT_ADAPTER_LE_ADVERTISING_DATA_COMP_LIST_128_BIT_SERVICE_CLASS_UUIDS)
+ uuid_count += (field_len - 1) / 16;
+
+ remain_len = remain_len - field_len - 1;
+ remain_data += field_len + 1;
+ }
+
+ if (uuid_count == 0)
+ return BT_ERROR_NO_DATA;
+
+ *uuids = g_malloc0(sizeof(char*) * uuid_count);
+ /* Fix : NULL_RETURNS */
+ if (*uuids == NULL)
+ return BT_ERROR_OUT_OF_MEMORY;
+
+ *count = uuid_count;
+
+ remain_data = adv_data;
+ remain_len = adv_length;
+ field_len = 0;
+ while (remain_len) {
+ field_len = remain_data[0];
+ if (remain_data[1] == BT_ADAPTER_LE_ADVERTISING_DATA_INCOMP_LIST_16_BIT_SERVICE_CLASS_UUIDS ||
+ remain_data[1] == BT_ADAPTER_LE_ADVERTISING_DATA_COMP_LIST_16_BIT_SERVICE_CLASS_UUIDS)
+ uuid_size = 2;
+ else if (remain_data[1] == BT_ADAPTER_LE_ADVERTISING_DATA_INCOMP_LIST_128_BIT_SERVICE_CLASS_UUIDS ||
+ remain_data[1] == BT_ADAPTER_LE_ADVERTISING_DATA_COMP_LIST_128_BIT_SERVICE_CLASS_UUIDS)
+ uuid_size = 16;
+ else
+ uuid_size = 0;
+
+ if (uuid_size != 0) {
+ for (i = 0; i < (field_len - 1); i += uuid_size) {
+ if (uuid_size == 2) {
+ (*uuids)[uuid_index] = g_malloc0(sizeof(char) * 4 + 1);
+ /* Fix : NULL_RETURNS */
+ if ((*uuids)[uuid_index] == NULL)
+ return BT_ERROR_OUT_OF_MEMORY;
+ snprintf((*uuids)[uuid_index], 5, "%2.2X%2.2X", remain_data[i+3], remain_data[i+2]);
+ } else {
+ (*uuids)[uuid_index] = g_malloc0(sizeof(char) * 36 + 1);
+ /* Fix : NULL_RETURNS */
+ if ((*uuids)[uuid_index] == NULL)
+ return BT_ERROR_OUT_OF_MEMORY;
+ snprintf((*uuids)[uuid_index], 37, "%2.2X%2.2X%2.2X%2.2X-%2.2X%2.2X-%2.2X%2.2X-%2.2X%2.2X-%2.2X%2.2X%2.2X%2.2X%2.2X%2.2X",
+ remain_data[i+17], remain_data[i+16], remain_data[i+15], remain_data[i+14],
+ remain_data[i+13], remain_data[i+12], remain_data[i+11], remain_data[i+10], remain_data[i+9], remain_data[i+8],
+ remain_data[i+7], remain_data[i+6], remain_data[i+5], remain_data[i+4], remain_data[i+3], remain_data[i+2]);
+ }
+ uuid_index++;
+ }
+ }
+
+ remain_len = remain_len - field_len - 1;
+ remain_data += field_len + 1;
+ }
+
+ return BT_ERROR_NONE;
+}
+
+int bt_adapter_le_get_scan_result_device_name(const bt_adapter_le_device_scan_result_info_s *info,
+ bt_adapter_le_packet_type_e pkt_type, char **name)
+{
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(info);
+ BT_CHECK_INPUT_PARAMETER(name);
+
+ int adv_length = 0;
+ char *adv_data = NULL;
+ int field_len = 0;
+
+ if (pkt_type == BT_ADAPTER_LE_PACKET_ADVERTISING) {
+ adv_data = info->adv_data;
+ adv_length = info->adv_data_len;
+ } else if (pkt_type == BT_ADAPTER_LE_PACKET_SCAN_RESPONSE) {
+ adv_data = info->scan_data;
+ adv_length = info->scan_data_len;
+ } else
+ return BT_ERROR_INVALID_PARAMETER;
+
+ if (!adv_data || adv_length < 3)
+ return BT_ERROR_NO_DATA;
+
+ while (adv_length > 0) {
+ field_len = adv_data[0];
+ if (adv_data[1] == BT_ADAPTER_LE_ADVERTISING_DATA_LOCAL_NAME) {
+ *name = g_malloc0(sizeof(char) * field_len);
+ /* Fix : NULL_RETURNS */
+ if (*name == NULL)
+ return BT_ERROR_OUT_OF_MEMORY;
+ memcpy(*name, &adv_data[2], field_len - 1);
+
+ return BT_ERROR_NONE;
+ }
+
+ adv_length = adv_length - field_len - 1;
+ adv_data += field_len + 1;
+ }
+
+ return BT_ERROR_NO_DATA;
+}
+
+int bt_adapter_le_get_scan_result_tx_power_level(const bt_adapter_le_device_scan_result_info_s *info,
+ bt_adapter_le_packet_type_e pkt_type, int *power_level)
+{
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(info);
+ BT_CHECK_INPUT_PARAMETER(power_level);
+
+ int adv_length = 0;
+ char *adv_data = NULL;
+ int field_len = 0;
+
+ if (pkt_type == BT_ADAPTER_LE_PACKET_ADVERTISING) {
+ adv_data = info->adv_data;
+ adv_length = info->adv_data_len;
+ } else if (pkt_type == BT_ADAPTER_LE_PACKET_SCAN_RESPONSE) {
+ adv_data = info->scan_data;
+ adv_length = info->scan_data_len;
+ } else
+ return BT_ERROR_INVALID_PARAMETER;
+
+ if (!adv_data || adv_length < 3)
+ return BT_ERROR_NO_DATA;
+
+ while (adv_length > 0) {
+ field_len = adv_data[0];
+ if (adv_data[1] == BT_ADAPTER_LE_ADVERTISING_DATA_TX_POWER_LEVEL) {
+ *power_level = (int)adv_data[2];
+
+ return BT_ERROR_NONE;
+ }
+
+ adv_length = adv_length - field_len - 1;
+ adv_data += field_len + 1;
+ }
+
+ return BT_ERROR_NO_DATA;
+}
+
+int bt_adapter_le_get_scan_result_service_solicitation_uuids(const bt_adapter_le_device_scan_result_info_s *info,
+ bt_adapter_le_packet_type_e pkt_type, char ***uuids, int *count)
+{
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(info);
+ BT_CHECK_INPUT_PARAMETER(uuids);
+ BT_CHECK_INPUT_PARAMETER(count);
+
+ int adv_length = 0;
+ char *adv_data = NULL;
+ char *remain_data = NULL;
+ int remain_len = 0;
+ int field_len = 0;
+ int uuid_size = 0;
+ int uuid_count = 0;
+ int uuid_index = 0;
+ int i;
+
+ if (pkt_type == BT_ADAPTER_LE_PACKET_ADVERTISING) {
+ adv_data = info->adv_data;
+ adv_length = info->adv_data_len;
+ } else if (pkt_type == BT_ADAPTER_LE_PACKET_SCAN_RESPONSE) {
+ adv_data = info->scan_data;
+ adv_length = info->scan_data_len;
+ } else
+ return BT_ERROR_INVALID_PARAMETER;
+
+ if (!adv_data || adv_length < 3)
+ return BT_ERROR_NO_DATA;
+
+ remain_data = adv_data;
+ remain_len = adv_length;
+ field_len = 0;
+ while (remain_len > 0) {
+ field_len = remain_data[0];
+ if (remain_data[1] == BT_ADAPTER_LE_ADVERTISING_DATA_16_BIT_SERVICE_SOLICITATION_UUIDS)
+ uuid_count += (field_len - 1) / 2;
+ else if (remain_data[1] == BT_ADAPTER_LE_ADVERTISING_DATA_128_BIT_SERVICE_SOLICITATION_UUIDS)
+ uuid_count += (field_len - 1) / 16;
+
+ remain_len = remain_len - field_len - 1;
+ remain_data += field_len + 1;
+ }
+
+ if (uuid_count == 0)
+ return BT_ERROR_NO_DATA;
+
+ *uuids = g_malloc0(sizeof(char*) * uuid_count);
+ /* Fix : NULL_RETURNS */
+ if (*uuids == NULL)
+ return BT_ERROR_OUT_OF_MEMORY;
+ *count = uuid_count;
+
+ remain_data = adv_data;
+ remain_len = adv_length;
+ field_len = 0;
+ while (remain_len > 0) {
+ field_len = remain_data[0];
+ if (remain_data[1] == BT_ADAPTER_LE_ADVERTISING_DATA_16_BIT_SERVICE_SOLICITATION_UUIDS)
+ uuid_size = 2;
+ else if (remain_data[1] == BT_ADAPTER_LE_ADVERTISING_DATA_128_BIT_SERVICE_SOLICITATION_UUIDS)
+ uuid_size = 16;
+ else
+ uuid_size = 0;
+
+ if (uuid_size != 0) {
+ for (i = 0; i < (field_len - 1); i += uuid_size) {
+ if (uuid_size == 2) {
+ (*uuids)[uuid_index] = g_malloc0(sizeof(char) * 4 + 1);
+ /* Fix : NULL_RETURNS */
+ if ((*uuids)[uuid_index] == NULL)
+ return BT_ERROR_OUT_OF_MEMORY;
+ snprintf((*uuids)[uuid_index], 5, "%2.2X%2.2X", remain_data[i+3], remain_data[i+2]);
+ } else {
+ (*uuids)[uuid_index] = g_malloc0(sizeof(char) * 36 + 1);
+ /* Fix : NULL_RETURNS */
+ if ((*uuids)[uuid_index] == NULL)
+ return BT_ERROR_OUT_OF_MEMORY;
+ snprintf((*uuids)[uuid_index], 37, "%2.2X%2.2X%2.2X%2.2X-%2.2X%2.2X-%2.2X%2.2X-%2.2X%2.2X-%2.2X%2.2X%2.2X%2.2X%2.2X%2.2X",
+ remain_data[i+17], remain_data[i+16], remain_data[i+15], remain_data[i+14],
+ remain_data[i+13], remain_data[i+12], remain_data[i+11], remain_data[i+10], remain_data[i+9], remain_data[i+8],
+ remain_data[i+7], remain_data[i+6], remain_data[i+5], remain_data[i+4], remain_data[i+3], remain_data[i+2]);
+ }
+ uuid_index++;
+ }
+ }
+
+ remain_len = remain_len - field_len - 1;
+ remain_data += field_len + 1;
+ }
+
+ return BT_ERROR_NONE;
+}
+
+int bt_adapter_le_get_scan_result_service_data_list(const bt_adapter_le_device_scan_result_info_s *info,
+ bt_adapter_le_packet_type_e pkt_type, bt_adapter_le_service_data_s **data_list, int *count)
+{
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(info);
+ BT_CHECK_INPUT_PARAMETER(count);
+
+ int adv_length = 0;
+ char *adv_data = NULL;
+ char *remain_data = NULL;
+ int remain_len = 0;
+ int field_len = 0;
+ int data_count = 0;
+ int data_index = 0;
+
+ if (pkt_type == BT_ADAPTER_LE_PACKET_ADVERTISING) {
+ adv_data = info->adv_data;
+ adv_length = info->adv_data_len;
+ } else if (pkt_type == BT_ADAPTER_LE_PACKET_SCAN_RESPONSE) {
+ adv_data = info->scan_data;
+ adv_length = info->scan_data_len;
+ } else
+ return BT_ERROR_INVALID_PARAMETER;
+
+ if (!adv_data || adv_length < 3)
+ return BT_ERROR_NO_DATA;
+
+ remain_data = adv_data;
+ remain_len = adv_length;
+ field_len = 0;
+ while (remain_len > 0) {
+ field_len = remain_data[0];
+ if (remain_data[1] == BT_ADAPTER_LE_ADVERTISING_DATA_SERVICE_DATA)
+ data_count++;
+
+ remain_len = remain_len - field_len - 1;
+ remain_data += field_len + 1;
+ }
+
+ if (data_count == 0)
+ return BT_ERROR_NO_DATA;
+
+ *data_list = g_malloc0(sizeof(bt_adapter_le_service_data_s) * data_count);
+ /* Fix : NULL_RETURNS */
+ if (*data_list == NULL)
+ return BT_ERROR_OUT_OF_MEMORY;
+ *count = data_count;
+
+ remain_data = adv_data;
+ remain_len = adv_length;
+ field_len = 0;
+ while (remain_len > 0) {
+ field_len = remain_data[0];
+ if (remain_data[1] == BT_ADAPTER_LE_ADVERTISING_DATA_SERVICE_DATA) {
+ (*data_list)[data_index].service_uuid = g_malloc0(sizeof(char) * 4 + 1);
+ snprintf((*data_list)[data_index].service_uuid, 5, "%2.2X%2.2X", remain_data[3], remain_data[2]);
+
+ (*data_list)[data_index].service_data = g_memdup(&remain_data[4], field_len - 3);
+ (*data_list)[data_index].service_data_len = field_len - 3;
+
+ data_index++;
+ }
+
+ remain_len = remain_len - field_len - 1;
+ remain_data += field_len + 1;
+ }
+
+ return BT_ERROR_NONE;
+}
+
+int bt_adapter_le_free_service_data_list(bt_adapter_le_service_data_s *data_list, int count)
+{
+ int i;
+
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(data_list);
+
+ for (i = 0; i < count; i++) {
+ g_free(data_list[i].service_uuid);
+ g_free(data_list[i].service_data);
+ }
+ g_free(data_list);
+
+ return BT_ERROR_NONE;
+}
+
+int bt_adapter_le_get_scan_result_appearance(const bt_adapter_le_device_scan_result_info_s *info,
+ bt_adapter_le_packet_type_e pkt_type, int *appearance)
+{
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(info);
+ BT_CHECK_INPUT_PARAMETER(appearance);
+
+ int adv_length = 0;
+ char *adv_data = NULL;
+ int field_len = 0;
+
+ if (pkt_type == BT_ADAPTER_LE_PACKET_ADVERTISING) {
+ adv_data = info->adv_data;
+ adv_length = info->adv_data_len;
+ } else if (pkt_type == BT_ADAPTER_LE_PACKET_SCAN_RESPONSE) {
+ adv_data = info->scan_data;
+ adv_length = info->scan_data_len;
+ } else
+ return BT_ERROR_INVALID_PARAMETER;
+
+ if (!adv_data || adv_length < 3)
+ return BT_ERROR_NO_DATA;
+
+ while (adv_length > 0) {
+ field_len = adv_data[0];
+ if (adv_data[1] == BT_ADAPTER_LE_ADVERTISING_DATA_APPEARANCE) {
+ *appearance = (int)adv_data[2];
+ *appearance |= (int)adv_data[3] << 8;
+
+ return BT_ERROR_NONE;
+ }
+
+ adv_length = adv_length - field_len - 1;
+ adv_data += field_len + 1;
+ }
+
+ return BT_ERROR_NO_DATA;
+}
+
+
+int bt_adapter_le_get_scan_result_manufacturer_data(const bt_adapter_le_device_scan_result_info_s *info,
+ bt_adapter_le_packet_type_e pkt_type, int *manufacturer_id, char **manufacturer_data, int *manufacturer_data_len)
+{
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(info);
+ BT_CHECK_INPUT_PARAMETER(manufacturer_id);
+ BT_CHECK_INPUT_PARAMETER(manufacturer_data);
+ BT_CHECK_INPUT_PARAMETER(manufacturer_data_len);
+
+ int adv_length = 0;
+ char *adv_data = NULL;
+ char *remain_data = NULL;
+ int remain_len = 0;
+ int field_len = 0;
+
+ if (pkt_type == BT_ADAPTER_LE_PACKET_ADVERTISING) {
+ adv_data = info->adv_data;
+ adv_length = info->adv_data_len;
+ } else if (pkt_type == BT_ADAPTER_LE_PACKET_SCAN_RESPONSE) {
+ adv_data = info->scan_data;
+ adv_length = info->scan_data_len;
+ } else
+ return BT_ERROR_INVALID_PARAMETER;
+
+ if (!adv_data || adv_length < 3)
+ return BT_ERROR_NO_DATA;
+
+ remain_data = adv_data;
+ remain_len = adv_length;
+ field_len = 0;
+ while (remain_len > 0) {
+ field_len = remain_data[0];
+ if (remain_data[1] == BT_ADAPTER_LE_ADVERTISING_DATA_MANUFACTURER_SPECIFIC_DATA) {
+ *manufacturer_id = remain_data[3] << 8;
+ *manufacturer_id += remain_data[2];
+
+ *manufacturer_data = g_memdup(&adv_data[4], field_len - 3);
+ *manufacturer_data_len = field_len - 3;
+
+ return BT_ERROR_NONE;
+ }
+
+ remain_len = remain_len - field_len - 1;
+ remain_data += field_len + 1;
+ }
+
+ return BT_ERROR_NO_DATA;
+}
+
+int bt_adapter_le_create_scan_filter(bt_scan_filter_h *scan_filter)
+{
+ bt_le_scan_filter_s *__filter = NULL;
+
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(scan_filter);
+
+ __filter = (bt_le_scan_filter_s*)g_malloc0(sizeof(bt_le_scan_filter_s));
+ if (__filter == NULL) {
+ BT_ERR("OUT_OF_MEMORY(0x%08x)", BT_ERROR_OUT_OF_MEMORY);
+ return BT_ERROR_OUT_OF_MEMORY;
+ }
+
+ __filter->manufacturer_id = -1;
+ *scan_filter = (bt_scan_filter_h)__filter;
+
+ return BT_ERROR_NONE;
+}
+
+int bt_adapter_le_destroy_scan_filter(bt_scan_filter_h scan_filter)
+{
+ bt_le_scan_filter_s *__filter = (bt_le_scan_filter_s *)scan_filter;
+
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(scan_filter);
+
+ g_free(__filter->device_address);
+ g_free(__filter->device_name);
+ g_free(__filter->service_uuid);
+ g_free(__filter->service_uuid_mask);
+ g_free(__filter->service_solicitation_uuid);
+ g_free(__filter->service_solicitation_uuid_mask);
+ g_free(__filter->service_data_uuid);
+ g_free(__filter->service_data);
+ g_free(__filter->service_data_mask);
+ g_free(__filter->manufacturer_data);
+ g_free(__filter->manufacturer_data_mask);
+ g_free(__filter);
+
+ return BT_ERROR_NONE;
+}
+
+int bt_adapter_le_scan_filter_set_device_address(bt_scan_filter_h scan_filter, const char *address)
+{
+ bt_le_scan_filter_s *__filter = (bt_le_scan_filter_s *)scan_filter;
+
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(scan_filter);
+ BT_CHECK_INPUT_PARAMETER(address);
+
+ g_free(__filter->device_address);
+
+ __filter->device_address = strdup(address);
+
+ return BT_ERROR_NONE;
+}
+
+int bt_adapter_le_scan_filter_set_device_name(bt_scan_filter_h scan_filter, const char *name)
+{
+ bt_le_scan_filter_s *__filter = (bt_le_scan_filter_s *)scan_filter;
+
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(scan_filter);
+ BT_CHECK_INPUT_PARAMETER(name);
+
+ if (strlen(name) > 29) {
+ BT_ERR("INVALID_PARAMETER(0x%08x)", BT_ERROR_INVALID_PARAMETER);
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ g_free(__filter->device_name);
+
+ __filter->device_name = strdup(name);
+
+ return BT_ERROR_NONE;
+}
+
+int bt_adapter_le_scan_filter_set_service_uuid(bt_scan_filter_h scan_filter, const char *uuid)
+{
+ bt_le_scan_filter_s *__filter = (bt_le_scan_filter_s *)scan_filter;
+
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(scan_filter);
+ BT_CHECK_INPUT_PARAMETER(uuid);
+
+ g_free(__filter->service_uuid);
+ g_free(__filter->service_uuid_mask);
+
+ __filter->service_uuid = strdup(uuid);
+ __filter->service_uuid_mask = NULL;
+
+ return BT_ERROR_NONE;
+}
+
+int bt_adapter_le_scan_filter_set_service_uuid_with_mask(bt_scan_filter_h scan_filter,
+ const char *uuid, const char *mask)
+{
+ bt_le_scan_filter_s *__filter = (bt_le_scan_filter_s *)scan_filter;
+
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(scan_filter);
+ BT_CHECK_INPUT_PARAMETER(uuid);
+ BT_CHECK_INPUT_PARAMETER(mask);
+
+ if (strlen(uuid) != strlen(mask)) {
+ BT_ERR("INVALID_PARAMETER(0x%08x)", BT_ERROR_INVALID_PARAMETER);
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ g_free(__filter->service_uuid);
+ g_free(__filter->service_uuid_mask);
+
+ __filter->service_uuid = strdup(uuid);
+ __filter->service_uuid_mask = strdup(mask);
+
+ return BT_ERROR_NONE;
+}
+
+int bt_adapter_le_scan_filter_set_service_solicitation_uuid(bt_scan_filter_h scan_filter, const char *uuid)
+{
+ bt_le_scan_filter_s *__filter = (bt_le_scan_filter_s *)scan_filter;
+
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(scan_filter);
+ BT_CHECK_INPUT_PARAMETER(uuid);
+
+ g_free(__filter->service_solicitation_uuid);
+ g_free(__filter->service_solicitation_uuid_mask);
+
+ __filter->service_solicitation_uuid = strdup(uuid);
+ __filter->service_solicitation_uuid_mask = NULL;
+
+ return BT_ERROR_NONE;
+}
+
+int bt_adapter_le_scan_filter_set_service_solicitation_uuid_with_mask(bt_scan_filter_h scan_filter,
+ const char *uuid, const char *mask)
+{
+ bt_le_scan_filter_s *__filter = (bt_le_scan_filter_s *)scan_filter;
+
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(scan_filter);
+ BT_CHECK_INPUT_PARAMETER(uuid);
+ BT_CHECK_INPUT_PARAMETER(mask);
+
+ if (strlen(uuid) != strlen(mask)) {
+ BT_ERR("INVALID_PARAMETER(0x%08x)", BT_ERROR_INVALID_PARAMETER);
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ g_free(__filter->service_solicitation_uuid);
+ g_free(__filter->service_solicitation_uuid_mask);
+
+ __filter->service_solicitation_uuid = strdup(uuid);
+ __filter->service_solicitation_uuid_mask = strdup(mask);
+
+ return BT_ERROR_NONE;
+}
+
+int bt_adapter_le_scan_filter_set_service_data(bt_scan_filter_h scan_filter,
+ const char *uuid, const char *data, unsigned int data_len)
+{
+ bt_le_scan_filter_s *__filter = (bt_le_scan_filter_s *)scan_filter;
+
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(scan_filter);
+ BT_CHECK_INPUT_PARAMETER(uuid);
+ BT_CHECK_INPUT_PARAMETER(data);
+
+ if (data_len > 27) {
+ BT_ERR("INVALID_PARAMETER(0x%08x)", BT_ERROR_INVALID_PARAMETER);
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ g_free(__filter->service_data_uuid);
+ g_free(__filter->service_data);
+ g_free(__filter->service_data_mask);
+
+ __filter->service_data_uuid = strdup(uuid);
+ __filter->service_data = g_memdup(data, data_len);
+ __filter->service_data_len = data_len;
+ __filter->service_data_mask = NULL;
+
+ return BT_ERROR_NONE;
+}
+
+int bt_adapter_le_scan_filter_set_service_data_with_mask(bt_scan_filter_h scan_filter,
+ const char *uuid, const char *data, unsigned int data_len, const char *mask, unsigned int mask_len)
+{
+ bt_le_scan_filter_s *__filter = (bt_le_scan_filter_s *)scan_filter;
+
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(scan_filter);
+ BT_CHECK_INPUT_PARAMETER(uuid);
+ BT_CHECK_INPUT_PARAMETER(data);
+ BT_CHECK_INPUT_PARAMETER(mask);
+
+ if (data_len != mask_len || data_len > 27) {
+ BT_ERR("INVALID_PARAMETER(0x%08x)", BT_ERROR_INVALID_PARAMETER);
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ g_free(__filter->service_data_uuid);
+ g_free(__filter->service_data);
+ g_free(__filter->service_data_mask);
+
+ __filter->service_data_uuid = strdup(uuid);
+ __filter->service_data = g_memdup(data, data_len);
+ __filter->service_data_len = data_len;
+ __filter->service_data_mask = g_memdup(mask, data_len);
+
+ return BT_ERROR_NONE;
+}
+
+int bt_adapter_le_scan_filter_set_manufacturer_data(bt_scan_filter_h scan_filter,
+ int manufacturer_id, const char *data, unsigned int data_len)
+{
+ bt_le_scan_filter_s *__filter = (bt_le_scan_filter_s *)scan_filter;
+
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(scan_filter);
+
+ if (manufacturer_id < 0 || manufacturer_id > 0xFFFF) {
+ BT_ERR("manufacturer_id is %.8x(0x%08x)", manufacturer_id, BT_ERROR_INVALID_PARAMETER);
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ if (data_len > 27) {
+ BT_ERR("INVALID_PARAMETER(0x%08x)", BT_ERROR_INVALID_PARAMETER);
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ g_free(__filter->manufacturer_data);
+ g_free(__filter->manufacturer_data_mask);
+
+ __filter->manufacturer_id = manufacturer_id;
+ if (data != NULL) {
+ __filter->manufacturer_data = g_memdup(data, data_len);
+ __filter->manufacturer_data_len = data_len;
+ } else {
+ __filter->manufacturer_data = NULL;
+ __filter->manufacturer_data_len = 0;
+ }
+ __filter->manufacturer_data_mask = NULL;
+
+ return BT_ERROR_NONE;
+}
+
+int bt_adapter_le_scan_filter_set_manufacturer_data_with_mask(bt_scan_filter_h scan_filter,
+ int manufacturer_id, const char *data, unsigned int data_len, const char *mask, unsigned int mask_len)
+{
+ bt_le_scan_filter_s *__filter = (bt_le_scan_filter_s *)scan_filter;
+
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(scan_filter);
+ BT_CHECK_INPUT_PARAMETER(data);
+ BT_CHECK_INPUT_PARAMETER(mask);
+
+ if (manufacturer_id < 0 || manufacturer_id > 0xFFFF) {
+ BT_ERR("manufacturer_id is %.8x(0x%08x)", manufacturer_id, BT_ERROR_INVALID_PARAMETER);
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ if (data_len != mask_len || data_len > 27) {
+ BT_ERR("INVALID_PARAMETER(0x%08x)", BT_ERROR_INVALID_PARAMETER);
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ g_free(__filter->manufacturer_data);
+ g_free(__filter->manufacturer_data_mask);
+
+ __filter->manufacturer_id = manufacturer_id;
+ __filter->manufacturer_data = g_memdup(data, data_len);
+ __filter->manufacturer_data_len = data_len;
+ __filter->manufacturer_data_mask = g_memdup(mask, data_len);
+
+ return BT_ERROR_NONE;
+}
+
+int bt_adapter_le_register_scan_filter(bt_scan_filter_h scan_filter)
+{
+ int error_code = BT_ERROR_NONE;
+ bt_le_scan_filter_s *__filter = (bt_le_scan_filter_s*)scan_filter;
+ bluetooth_le_scan_filter_t filter;
+
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(scan_filter);
+ if (bluetooth_is_le_scanning() == TRUE) {
+ BT_ERR("NOW_IN_PROGRESS(0x%08x)", BT_ERROR_NOW_IN_PROGRESS);
+ return BT_ERROR_NOW_IN_PROGRESS;
+ }
+
+ __bt_adapter_le_convert_scan_filter(&filter, __filter);
+
+ error_code = _bt_get_error_code(bluetooth_register_scan_filter(&filter, &__filter->slot_id));
+ if (error_code != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code), error_code);
+ }
+
+ return error_code;
+}
+
+int bt_adapter_le_unregister_scan_filter(bt_scan_filter_h scan_filter)
+{
+ int error_code = BT_ERROR_NONE;
+ bt_le_scan_filter_s *__filter = (bt_le_scan_filter_s*)scan_filter;
+
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(scan_filter);
+ if (bluetooth_is_le_scanning() == TRUE) {
+ BT_ERR("NOW_IN_PROGRESS(0x%08x)", BT_ERROR_NOW_IN_PROGRESS);
+ return BT_ERROR_NOW_IN_PROGRESS;
+ }
+
+ error_code = _bt_get_error_code(bluetooth_unregister_scan_filter(__filter->slot_id));
+ if (error_code != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code), error_code);
+ }
+
+ return BT_ERROR_NONE;
+}
+
+int bt_adapter_le_unregister_all_scan_filters(void)
+{
+ int error_code = BT_ERROR_NONE;
+
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ if (bluetooth_is_le_scanning() == TRUE) {
+ BT_ERR("NOW_IN_PROGRESS(0x%08x)", BT_ERROR_NOW_IN_PROGRESS);
+ return BT_ERROR_NOW_IN_PROGRESS;
+ }
+
+ error_code = _bt_get_error_code(bluetooth_unregister_all_scan_filters());
+ if (error_code != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code), error_code);
+ }
+
+ return BT_ERROR_NONE;
+}
diff --git a/src/bluetooth-audio.c b/src/bluetooth-audio.c
index 6ce6abd..369c727 100644
--- a/src/bluetooth-audio.c
+++ b/src/bluetooth-audio.c
@@ -19,124 +19,284 @@
#include <bluetooth-api.h>
#include <string.h>
#include "bluetooth.h"
+#include "bluetooth_internal.h"
#include "bluetooth_private.h"
#include "bluetooth-audio-api.h"
+#include "bluetooth-telephony-api.h"
+#include "bluetooth-scmst-api.h"
-#ifdef LOG_TAG
-#undef LOG_TAG
+typedef struct _call_list_s {
+ GList *list;
+} call_list_s;
+
+static bool is_audio_initialized = false;
+
+#if defined (TIZEN_HFP_DISABLE) && defined (TIZEN_A2DP_DISABLE)
+#define BT_CHECK_AUDIO_SUPPORT() \
+ { \
+ BT_CHECK_BT_SUPPORT(); \
+ LOGE("[%s] NOT_SUPPORTED(0x%08x)", __FUNCTION__, BT_ERROR_NOT_SUPPORTED); \
+ return BT_ERROR_NOT_SUPPORTED; \
+ }
+#else
+#define BT_CHECK_AUDIO_SUPPORT()
+#endif
+
+#ifdef TIZEN_HFP_DISABLE
+#define BT_CHECK_HFP_SUPPORT() \
+ { \
+ BT_CHECK_BT_SUPPORT(); \
+ LOGE("[%s] NOT_SUPPORTED(0x%08x)", __FUNCTION__, BT_ERROR_NOT_SUPPORTED); \
+ return BT_ERROR_NOT_SUPPORTED; \
+ }
+#else
+#define BT_CHECK_HFP_SUPPORT()
#endif
-#define LOG_TAG "TIZEN_N_BLUETOOTH"
-/*The below API is just to convert the error from Audio API's to CAPI error codes,
+#ifdef TIZEN_A2DP_DISABLE
+#define BT_CHECK_A2DP_SUPPORT() \
+ { \
+ BT_CHECK_BT_SUPPORT(); \
+ LOGE("[%s] NOT_SUPPORTED(0x%08x)", __FUNCTION__, BT_ERROR_NOT_SUPPORTED); \
+ return BT_ERROR_NOT_SUPPORTED; \
+ }
+#else
+#define BT_CHECK_A2DP_SUPPORT()
+#endif
+
+#define BT_CHECK_AUDIO_INIT_STATUS() \
+ if (__bt_check_audio_init_status() == BT_ERROR_NOT_INITIALIZED) \
+ { \
+ LOGE("[%s] NOT_INITIALIZED(0x%08x)", __FUNCTION__, BT_ERROR_NOT_INITIALIZED); \
+ return BT_ERROR_NOT_INITIALIZED; \
+ }
+
+int __bt_check_audio_init_status(void)
+{
+ if (is_audio_initialized != true) {
+ BT_ERR("NOT_INITIALIZED(0x%08x)", BT_ERROR_NOT_INITIALIZED);
+ return BT_ERROR_NOT_INITIALIZED;
+ }
+
+ return BT_ERROR_NONE;
+}
+
+/*The below API is just to convert the error from Telephony API's to CAPI error codes,
* this is temporary change and changes to proper error code will be done in
* subsequent check ins.*/
-int _bt_convert_media_error_code(int error)
+int _bt_convert_telephony_error_code(int error)
{
switch(error) {
- case BLUETOOTH_AUDIO_ERROR_NONE:
+ case BLUETOOTH_TELEPHONY_ERROR_NONE:
return BT_ERROR_NONE;
- case BLUETOOTH_AUDIO_ERROR_INTERNAL:
- return BT_ERROR_INVALID_PARAMETER;
- case BLUETOOTH_AUDIO_ERROR_INVALID_PARAM:
+ case BLUETOOTH_TELEPHONY_ERROR_INVALID_PARAM:
return BT_ERROR_INVALID_PARAMETER;
- case BLUETOOTH_AG_ERROR_CONNECTION_ERROR:
- return BT_ERROR_OPERATION_FAILED;
- case BLUETOOTH_AV_ERROR_CONNECTION_ERROR:
+ case BLUETOOTH_TELEPHONY_ERROR_NOT_INITIALIZED:
+ return BT_ERROR_NOT_INITIALIZED;
+ case BLUETOOTH_TELEPHONY_ERROR_NOT_ENABLED:
+ return BT_ERROR_NOT_ENABLED;
+ case BLUETOOTH_TELEPHONY_ERROR_AUDIO_NOT_CONNECTED:
+ case BLUETOOTH_TELEPHONY_ERROR_NOT_CONNECTED:
+ return BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED;
+ case BLUETOOTH_TELEPHONY_ERROR_BUSY:
+ return BT_ERROR_RESOURCE_BUSY;
+ case BLUETOOTH_TELEPHONY_ERROR_NO_MEMORY:
+ return BT_ERROR_OUT_OF_MEMORY;
+ case BLUETOOTH_TELEPHONY_ERROR_ALREADY_INITIALIZED:
+ case BLUETOOTH_TELEPHONY_ERROR_ALREADY_EXSIST:
+ case BLUETOOTH_TELEPHONY_ERROR_ALREADY_CONNECTED:
+ return BT_ERROR_ALREADY_DONE;
+ case BLUETOOTH_TELEPHONY_ERROR_INTERNAL:
+ case BLUETOOTH_TELEPHONY_ERROR_NOT_AVAILABLE:
+ case BLUETOOTH_TELEPHONY_ERROR_I_O_ERROR:
+ case BLUETOOTH_TELEPHONY_ERROR_OPERATION_NOT_AVAILABLE:
return BT_ERROR_OPERATION_FAILED;
+ case BLUETOOTH_TELEPHONY_ERROR_PERMISSION_DENIED:
+ return BT_ERROR_PERMISSION_DENIED;
default:
return BT_ERROR_NONE;
}
}
+
int bt_audio_initialize(void)
{
- int error = BT_ERROR_NONE;
+ int error;
+ BT_CHECK_AUDIO_SUPPORT();
BT_CHECK_INIT_STATUS();
error = bluetooth_audio_init(_bt_audio_event_proxy, NULL);
- error = _bt_convert_media_error_code(error);
error = _bt_get_error_code(error);
if (BT_ERROR_NONE != error) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__,
- _bt_convert_error_to_string(error), error);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
+ return error;
}
- return error;
+
+#ifdef TIZEN_WEARABLE
+ error = bluetooth_hf_init(_bt_hf_event_proxy, NULL);
+ error = _bt_get_error_code(error);
+ if (BT_ERROR_NONE != error) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
+ return error;
+ }
+#endif
+
+#ifndef TELEPHONY_DISABLED /* B2_3G */
+ error = bluetooth_telephony_init((void *)_bt_telephony_event_proxy, NULL);
+ error = _bt_convert_telephony_error_code(error);
+ if (BT_ERROR_NONE != error) {
+ BT_ERR("[%s] (0x%08x)", _bt_convert_error_to_string(error), error);
+ return error;
+ }
+#endif
+
+ is_audio_initialized = true;
+ return BT_ERROR_NONE;
}
int bt_audio_deinitialize(void)
{
- int error = BT_ERROR_NONE;
+ int error;
+ BT_CHECK_AUDIO_SUPPORT();
BT_CHECK_INIT_STATUS();
+ BT_CHECK_AUDIO_INIT_STATUS();
+
+#ifdef TIZEN_WEARABLE
+ error = bluetooth_hf_deinit();
+ error = _bt_get_error_code(error);
+ if (BT_ERROR_NONE != error) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
+ return error;
+ }
+#endif
error = bluetooth_audio_deinit();
- error = _bt_convert_media_error_code(error);
error = _bt_get_error_code(error);
if (BT_ERROR_NONE != error) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__,
- _bt_convert_error_to_string(error), error);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
+ return error;
}
- return error;
+
+#ifndef TELEPHONY_DISABLED /* B2_3G */
+ error = bluetooth_telephony_deinit();
+ error = _bt_convert_telephony_error_code(error);
+ if (BT_ERROR_NONE != error) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
+ return error;
+ }
+#endif
+
+ is_audio_initialized = false;
+ return BT_ERROR_NONE;
}
int bt_audio_connect(const char *remote_address, bt_audio_profile_type_e type)
{
- int error = BT_ERROR_NONE;
+ int error;
bluetooth_device_address_t addr_hex = { {0,} };
+
+ BT_CHECK_AUDIO_SUPPORT();
BT_CHECK_INIT_STATUS();
+ BT_CHECK_AUDIO_INIT_STATUS();
+
+ if (type == BT_AUDIO_PROFILE_TYPE_HSP_HFP) {
+ BT_CHECK_HFP_SUPPORT();
+#ifdef TELEPHONY_DISABLED
+ BT_ERR("NOT SUPPORTED(0x%08x)", BT_ERROR_NOT_SUPPORTED);
+ return BT_ERROR_NOT_SUPPORTED;
+#endif
+ } else if (type == BT_AUDIO_PROFILE_TYPE_A2DP) {
+ BT_CHECK_A2DP_SUPPORT();
+ } else if (type == BT_AUDIO_PROFILE_TYPE_ALL) {
+#if defined (TIZEN_HFP_DISABLE) || defined (TELEPHONY_DISABLED)
+ BT_ERR("HSP NOT SUPPORTED(0x%08x)", BT_ERROR_NOT_SUPPORTED);
+ type = BT_AUDIO_PROFILE_TYPE_A2DP;
+#else
+ BT_ERR("ALL SUPPORTED");
+ type = BT_AUDIO_PROFILE_TYPE_ALL;
+#endif
+ }
+
BT_CHECK_INPUT_PARAMETER(remote_address);
_bt_convert_address_to_hex(&addr_hex, remote_address);
switch(type) {
+#ifndef TELEPHONY_DISABLED
case BT_AUDIO_PROFILE_TYPE_HSP_HFP:
error = bluetooth_ag_connect(&addr_hex);
break;
+#endif
case BT_AUDIO_PROFILE_TYPE_A2DP:
error = bluetooth_av_connect(&addr_hex);
break;
+#ifdef TIZEN_WEARABLE
+ case BT_AUDIO_PROFILE_TYPE_AG:
+ error = bluetooth_hf_connect(&addr_hex);
+ break;
+#endif
case BT_AUDIO_PROFILE_TYPE_ALL:
default:
error = bluetooth_audio_connect(&addr_hex);
break;
}
- error = _bt_convert_media_error_code(error);
error = _bt_get_error_code(error);
if (error != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__,
- _bt_convert_error_to_string(error), error);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
}
return error;
}
int bt_audio_disconnect(const char *remote_address, bt_audio_profile_type_e type)
{
- int error = BT_ERROR_NONE;
+ int error;
bluetooth_device_address_t addr_hex = { {0,} };
+
+ BT_CHECK_AUDIO_SUPPORT();
BT_CHECK_INIT_STATUS();
+ BT_CHECK_AUDIO_INIT_STATUS();
+
+ if (type == BT_AUDIO_PROFILE_TYPE_HSP_HFP) {
+ BT_CHECK_HFP_SUPPORT();
+#ifdef TELEPHONY_DISABLED
+ BT_ERR("NOT SUPPORTED(0x%08x)", BT_ERROR_NOT_SUPPORTED);
+ return BT_ERROR_NOT_SUPPORTED;
+#endif
+ } else if (type == BT_AUDIO_PROFILE_TYPE_A2DP) {
+ BT_CHECK_A2DP_SUPPORT();
+ }
+
BT_CHECK_INPUT_PARAMETER(remote_address);
_bt_convert_address_to_hex(&addr_hex, remote_address);
switch(type) {
+#ifndef TELEPHONY_DISABLED
case BT_AUDIO_PROFILE_TYPE_HSP_HFP:
error = bluetooth_ag_disconnect(&addr_hex);
break;
+#endif
case BT_AUDIO_PROFILE_TYPE_A2DP:
error = bluetooth_av_disconnect(&addr_hex);
break;
+#ifdef TIZEN_WEARABLE
+ case BT_AUDIO_PROFILE_TYPE_AG:
+ error = bluetooth_hf_disconnect(&addr_hex);
+ break;
+#endif
case BT_AUDIO_PROFILE_TYPE_ALL:
default:
error = bluetooth_audio_disconnect(&addr_hex);
break;
}
- error = _bt_convert_media_error_code(error);
error = _bt_get_error_code(error);
if (error != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__,
- _bt_convert_error_to_string(error), error);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
}
return error;
}
int bt_audio_set_connection_state_changed_cb(bt_audio_connection_state_changed_cb callback, void *user_data)
{
+ BT_CHECK_AUDIO_SUPPORT();
BT_CHECK_INIT_STATUS();
+ BT_CHECK_AUDIO_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(callback);
_bt_set_cb(BT_EVENT_AUDIO_CONNECTION_STATUS, callback, user_data);
return BT_ERROR_NONE;
@@ -144,57 +304,128 @@ int bt_audio_set_connection_state_changed_cb(bt_audio_connection_state_changed_c
}
int bt_audio_unset_connection_state_changed_cb(void)
{
+ BT_CHECK_AUDIO_SUPPORT();
BT_CHECK_INIT_STATUS();
+ BT_CHECK_AUDIO_INIT_STATUS();
if (_bt_check_cb(BT_EVENT_AUDIO_CONNECTION_STATUS) == true)
_bt_unset_cb(BT_EVENT_AUDIO_CONNECTION_STATUS);
return BT_ERROR_NONE;
}
-int bt_ag_notify_speaker_gain(const char *remote_address, int gain)
+int bt_a2dp_source_audio_set_connection_state_changed_cb(bt_audio_connection_state_changed_cb callback, void *user_data)
{
- int error = BT_ERROR_NONE;
+ BT_CHECK_AUDIO_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_AUDIO_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(callback);
+ _bt_set_cb(BT_EVENT_A2DP_SOURCE_CONNECTION_STATUS, callback, user_data);
+ return BT_ERROR_NONE;
+}
+
+int bt_a2dp_source_audio_unset_connection_state_changed_cb(void)
+{
+ BT_CHECK_AUDIO_SUPPORT();
BT_CHECK_INIT_STATUS();
- BT_CHECK_INPUT_PARAMETER(remote_address);
- error = bluetooth_ag_set_speaker_gain((unsigned short)gain);
- error = _bt_convert_media_error_code(error);
- error = _bt_get_error_code(error);
+ BT_CHECK_AUDIO_INIT_STATUS();
+ if (_bt_check_cb(BT_EVENT_A2DP_SOURCE_CONNECTION_STATUS) == true)
+ _bt_unset_cb(BT_EVENT_A2DP_SOURCE_CONNECTION_STATUS);
+ return BT_ERROR_NONE;
+}
+
+int bt_ag_notify_speaker_gain(int gain)
+{
+ int error;
+
+ BT_CHECK_HFP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_AUDIO_INIT_STATUS();
+ error = bluetooth_telephony_set_speaker_gain((unsigned short)gain);
+ error = _bt_convert_telephony_error_code(error);
if (BT_ERROR_NONE != error) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__,
- _bt_convert_error_to_string(error), error);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
}
return error;
}
-int bt_ag_get_speaker_gain(const char *remote_address, int *gain)
+int bt_ag_get_speaker_gain(int *gain)
{
- int error = BT_ERROR_NONE;
+ int error;
+ BT_CHECK_HFP_SUPPORT();
BT_CHECK_INIT_STATUS();
+ BT_CHECK_AUDIO_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(gain);
- BT_CHECK_INPUT_PARAMETER(remote_address);
- error = bluetooth_ag_get_headset_volume((unsigned int *)gain);
- error = _bt_convert_media_error_code(error);
- error = _bt_get_error_code(error);
+ error = bluetooth_telephony_get_headset_volume((unsigned int *)gain);
+ error = _bt_convert_telephony_error_code(error);
if (BT_ERROR_NONE != error) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__,
- _bt_convert_error_to_string(error), error);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
}
return error;
}
+int bt_ag_is_nrec_enabled(bool *enabled)
+{
+ int error;
+ gboolean is_enabled = FALSE;
+
+ BT_CHECK_HFP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_AUDIO_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(enabled);
+
+ error = bluetooth_telephony_is_nrec_enabled(&is_enabled);
+ error = _bt_convert_telephony_error_code(error);
+ if (BT_ERROR_NONE != error) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
+ }
+ if (is_enabled)
+ *enabled = true;
+ else
+ *enabled = false;
+
+ return error;
+}
+
+int bt_ag_is_wbs_mode(bool *wbs_mode)
+{
+ int error;
+ gboolean is_wbs_mode = FALSE;
+
+ BT_CHECK_HFP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_AUDIO_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(wbs_mode);
+
+ error = bluetooth_telephony_is_wbs_mode(&is_wbs_mode);
+ error = _bt_convert_telephony_error_code(error);
+ if (BT_ERROR_NONE != error) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
+ }
+ if (is_wbs_mode)
+ *wbs_mode = true;
+ else
+ *wbs_mode = false;
+
+ return error;
+}
+
int bt_ag_set_microphone_gain_changed_cb(bt_ag_microphone_gain_changed_cb callback, void *user_data)
{
+ BT_CHECK_HFP_SUPPORT();
+
BT_CHECK_INIT_STATUS();
+ BT_CHECK_AUDIO_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(callback);
_bt_set_cb(BT_EVENT_AG_MICROPHONE_GAIN_CHANGE, callback, user_data);
return BT_ERROR_NONE;
-
}
int bt_ag_unset_microphone_gain_changed_cb(void)
{
+ BT_CHECK_HFP_SUPPORT();
BT_CHECK_INIT_STATUS();
+ BT_CHECK_AUDIO_INIT_STATUS();
if (_bt_check_cb(BT_EVENT_AG_MICROPHONE_GAIN_CHANGE) == true)
_bt_unset_cb(BT_EVENT_AG_MICROPHONE_GAIN_CHANGE);
return BT_ERROR_NONE;
@@ -203,7 +434,9 @@ int bt_ag_unset_microphone_gain_changed_cb(void)
int bt_ag_set_speaker_gain_changed_cb(bt_ag_speaker_gain_changed_cb callback,
void *user_data)
{
+ BT_CHECK_HFP_SUPPORT();
BT_CHECK_INIT_STATUS();
+ BT_CHECK_AUDIO_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(callback);
_bt_set_cb(BT_EVENT_AG_SPEAKER_GAIN_CHANGE, callback, user_data);
return BT_ERROR_NONE;
@@ -211,8 +444,765 @@ int bt_ag_set_speaker_gain_changed_cb(bt_ag_speaker_gain_changed_cb callback,
int bt_ag_unset_speaker_gain_changed_cb(void)
{
+ BT_CHECK_HFP_SUPPORT();
+
BT_CHECK_INIT_STATUS();
+ BT_CHECK_AUDIO_INIT_STATUS();
if (_bt_check_cb(BT_EVENT_AG_SPEAKER_GAIN_CHANGE) == true)
_bt_unset_cb(BT_EVENT_AG_SPEAKER_GAIN_CHANGE);
return BT_ERROR_NONE;
}
+
+int bt_ag_open_sco(void)
+{
+ int error;
+
+ BT_CHECK_HFP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_AUDIO_INIT_STATUS();
+ error = bluetooth_telephony_audio_open();
+ error = _bt_convert_telephony_error_code(error);
+ if (error != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
+ }
+ return error;
+}
+
+int bt_ag_close_sco(void)
+{
+ int error;
+
+ BT_CHECK_HFP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_AUDIO_INIT_STATUS();
+ error = bluetooth_telephony_audio_close();
+ error = _bt_convert_telephony_error_code(error);
+ if (error != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
+ }
+ return error;
+}
+
+int bt_ag_is_sco_opened(bool *opened)
+{
+ BT_CHECK_HFP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_AUDIO_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(opened);
+ if (bluetooth_telephony_is_sco_connected())
+ *opened = true;
+ else
+ *opened = false;
+ return BT_ERROR_NONE;
+}
+
+int bt_ag_set_sco_state_changed_cb(bt_ag_sco_state_changed_cb callback,
+ void *user_data)
+{
+ BT_CHECK_HFP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_AUDIO_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(callback);
+ _bt_set_cb(BT_EVENT_AG_SCO_CONNECTION_STATUS, callback, user_data);
+ return BT_ERROR_NONE;
+}
+
+int bt_ag_unset_sco_state_changed_cb(void)
+{
+ BT_CHECK_HFP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_AUDIO_INIT_STATUS();
+ if (_bt_check_cb(BT_EVENT_AG_SCO_CONNECTION_STATUS) == true)
+ _bt_unset_cb(BT_EVENT_AG_SCO_CONNECTION_STATUS);
+ return BT_ERROR_NONE;
+}
+
+int bt_ag_notify_call_event(bt_ag_call_event_e event, unsigned int call_id, const char *phone_number)
+{
+ int error;
+
+ BT_CHECK_HFP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_AUDIO_INIT_STATUS();
+ BT_INFO("call_id [%d] / event [%d]", call_id, event);
+
+ switch(event) {
+ case BT_AG_CALL_EVENT_IDLE:
+ error = bluetooth_telephony_call_end(call_id);
+ break;
+ case BT_AG_CALL_EVENT_ANSWERED:
+ error = bluetooth_telephony_call_answered(call_id, FALSE);
+ break;
+ case BT_AG_CALL_EVENT_HELD:
+ error = bluetooth_telephony_call_held(call_id);
+ break;
+ case BT_AG_CALL_EVENT_RETRIEVED:
+ error = bluetooth_telephony_call_retrieved(call_id);
+ break;
+ case BT_AG_CALL_EVENT_DIALING:
+ BT_CHECK_INPUT_PARAMETER(phone_number);
+ error = bluetooth_telephony_indicate_outgoing_call(
+ phone_number, call_id, FALSE);
+ break;
+ case BT_AG_CALL_EVENT_ALERTING:
+ error = bluetooth_telephony_call_remote_ringing(call_id);
+ break;
+ case BT_AG_CALL_EVENT_INCOMING:
+ BT_CHECK_INPUT_PARAMETER(phone_number);
+ error = bluetooth_telephony_indicate_incoming_call(phone_number,
+ call_id);
+ break;
+ default:
+ error = BLUETOOTH_TELEPHONY_ERROR_INVALID_PARAM;
+ }
+ error = _bt_convert_telephony_error_code(error);
+ if (error != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
+ }
+ return error;
+}
+
+int bt_ag_notify_call_list(bt_call_list_h list)
+{
+ int error;
+ unsigned int call_count;
+ call_list_s *handle;
+
+ BT_CHECK_HFP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_AUDIO_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(list);
+ handle = (call_list_s *)list;
+ call_count = g_list_length(handle->list);
+ error = bluetooth_telephony_set_call_status((void *)handle->list, call_count);
+ error = _bt_convert_telephony_error_code(error);
+ if (error != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
+ }
+ return error;
+}
+
+int bt_ag_notify_voice_recognition_state(bool state)
+{
+ int error;
+
+ BT_CHECK_HFP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_AUDIO_INIT_STATUS();
+ if (state)
+ error = bluetooth_telephony_start_voice_recognition();
+ else
+ error = bluetooth_telephony_stop_voice_recognition();
+ error = _bt_convert_telephony_error_code(error);
+ if (error != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
+ }
+ return error;
+}
+
+int bt_ag_set_call_handling_event_cb(bt_ag_call_handling_event_cb callback,
+ void *user_data)
+{
+ BT_CHECK_HFP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_AUDIO_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(callback);
+ _bt_set_cb(BT_EVENT_AG_CALL_HANDLING_EVENT, callback, user_data);
+ return BT_ERROR_NONE;
+}
+
+int bt_ag_unset_call_handling_event_cb(void)
+{
+ BT_CHECK_HFP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_AUDIO_INIT_STATUS();
+ if (_bt_check_cb(BT_EVENT_AG_CALL_HANDLING_EVENT) == true)
+ _bt_unset_cb(BT_EVENT_AG_CALL_HANDLING_EVENT);
+ return BT_ERROR_NONE;
+}
+
+int bt_ag_set_multi_call_handling_event_cb(
+ bt_ag_multi_call_handling_event_cb callback,
+ void *user_data)
+{
+ BT_CHECK_HFP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_AUDIO_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(callback);
+ _bt_set_cb(BT_EVENT_AG_MULTI_CALL_HANDLING_EVENT, callback, user_data);
+ return BT_ERROR_NONE;
+}
+
+int bt_ag_unset_multi_call_handling_event_cb(void)
+{
+ BT_CHECK_HFP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_AUDIO_INIT_STATUS();
+ if (_bt_check_cb(BT_EVENT_AG_MULTI_CALL_HANDLING_EVENT) == true)
+ _bt_unset_cb(BT_EVENT_AG_MULTI_CALL_HANDLING_EVENT);
+ return BT_ERROR_NONE;
+}
+
+int bt_ag_set_dtmf_transmitted_cb(bt_ag_dtmf_transmitted_cb callback,
+ void *user_data)
+{
+ BT_CHECK_HFP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_AUDIO_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(callback);
+ _bt_set_cb(BT_EVENT_AG_DTMF_TRANSMITTED, callback, user_data);
+ return BT_ERROR_NONE;
+}
+
+int bt_ag_unset_dtmf_transmitted_cb(void)
+{
+ BT_CHECK_HFP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_AUDIO_INIT_STATUS();
+ if (_bt_check_cb(BT_EVENT_AG_DTMF_TRANSMITTED) == true)
+ _bt_unset_cb(BT_EVENT_AG_DTMF_TRANSMITTED);
+ return BT_ERROR_NONE;
+}
+
+int bt_ag_is_connected(bool *connected)
+{
+ int error;
+ gboolean is_connected = false;
+
+ BT_CHECK_HFP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(connected);
+
+ error = bluetooth_telephony_is_connected(&is_connected);
+ error = _bt_get_error_code(error);
+ if (error != BT_ERROR_NONE)
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
+
+ if (is_connected)
+ *connected = true;
+ else
+ *connected = false;
+
+ return error;
+}
+
+int bt_call_list_create(bt_call_list_h *list)
+{
+ call_list_s *handle;
+
+ BT_CHECK_HFP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_AUDIO_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(list);
+ if (*list != NULL) {
+ BT_ERR("BT_ERROR_ALREADY_DONE(0x%08x)", BT_ERROR_ALREADY_DONE);
+ return BT_ERROR_ALREADY_DONE;
+ }
+ handle = g_malloc0(sizeof(call_list_s));
+ if (handle == NULL) {
+ BT_ERR("BT_ERROR_OUT_OF_MEMORY(0x%08x)", BT_ERROR_OUT_OF_MEMORY);
+ return BT_ERROR_OUT_OF_MEMORY;
+ }
+
+ *list = handle;
+ return BT_ERROR_NONE;
+}
+
+int bt_call_list_destroy(bt_call_list_h list)
+{
+ int result;
+ call_list_s *handle;
+
+ BT_CHECK_HFP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_AUDIO_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(list);
+ handle = (call_list_s *)list;
+ result = bt_call_list_reset(list);
+ g_free(handle);
+ return result;
+}
+
+int bt_call_list_reset(bt_call_list_h list)
+{
+ call_list_s *handle;
+ bt_telephony_call_status_info_t *call_status;
+
+ BT_CHECK_HFP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_AUDIO_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(list);
+ handle = (call_list_s *)list;
+ do {
+ call_status = (bt_telephony_call_status_info_t *)g_list_nth_data(handle->list, 0);
+ if (call_status == NULL)
+ break;
+ handle->list = g_list_remove(handle->list, call_status);
+
+ if (NULL != call_status->phone_number)
+ g_free(call_status->phone_number);
+
+ g_free(call_status);
+ } while (1);
+ return BT_ERROR_NONE;
+}
+
+int bt_call_list_add(bt_call_list_h list, unsigned int call_id, bt_ag_call_state_e state, const char *phone_number)
+{
+ call_list_s *handle;
+ bt_telephony_call_status_info_t *call_status;
+
+ BT_CHECK_HFP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_AUDIO_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(list);
+ BT_CHECK_INPUT_PARAMETER(phone_number);
+
+ handle = (call_list_s *)list;
+ call_status = g_malloc0(sizeof(bt_telephony_call_status_info_t));
+
+ /* Fix : NULL_RETURNS */
+ if (call_status == NULL)
+ return BT_ERROR_OUT_OF_MEMORY;
+ call_status->call_id = call_id;
+ call_status->call_status = state;
+ call_status->phone_number = g_strdup(phone_number);
+
+ handle->list = g_list_append(handle->list, (gpointer)call_status);
+ return BT_ERROR_NONE;
+}
+
+#ifdef TIZEN_WEARABLE
+int bt_hf_initialize(void)
+{
+#ifdef TIZEN_AUDIO_HF_SUPPORT
+ int error;
+
+ BT_CHECK_INIT_STATUS();
+ error = bluetooth_hf_init(_bt_hf_event_proxy, NULL);
+ error = _bt_get_error_code(error);
+ if (BT_ERROR_NONE != error) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
+ return error;
+ }
+ return error;
+#else
+ BT_ERR("NOT_SUPPORTED(0x%08x)", BT_ERROR_NOT_SUPPORTED);
+ return BT_ERROR_NOT_SUPPORTED;
+#endif
+}
+
+int bt_hf_deinitialize(void)
+{
+#ifdef TIZEN_AUDIO_HF_SUPPORT
+ int error;
+
+ BT_CHECK_INIT_STATUS();
+ error = bluetooth_hf_deinit();
+ error = _bt_get_error_code(error);
+ if (BT_ERROR_NONE != error) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
+ return error;
+ }
+ return error;
+#else
+ BT_ERR("NOT_SUPPORTED(0x%08x)", BT_ERROR_NOT_SUPPORTED);
+ return BT_ERROR_NOT_SUPPORTED;
+#endif
+}
+
+int bt_hf_notify_call_event(bt_hf_call_event_e event, char *phone_number)
+{
+#ifdef TIZEN_AUDIO_HF_SUPPORT
+ int error = BT_ERROR_NONE;
+
+ BT_CHECK_INIT_STATUS();
+ BT_INFO("event [%d]", event);
+
+ switch(event) {
+ case BT_HF_CALL_EVENT_IDLE:
+ error = bluetooth_hf_terminate_call();
+ break;
+ case BT_HF_CALL_EVENT_ANSWER:
+ error = bluetooth_hf_answer_call();
+ break;
+ case BT_HF_CALL_EVENT_HOLD:
+ break;
+ case BT_HF_CALL_EVENT_RETRIEVE:
+ break;
+ case BT_HF_CALL_EVENT_DIAL:
+ BT_CHECK_INPUT_PARAMETER(phone_number);
+ error = bluetooth_hf_initiate_call(phone_number);
+ break;
+ case BT_HF_CALL_EVENT_REDIAL:
+ break;
+ case BT_HF_CALL_EVENT_RELEASE_ALL_NONACTIVE_CALLS:
+ error = bluetooth_hf_release_all_call();
+ break;
+ case BT_HF_CALL_EVENT_ACCEPT_AND_RELEASE:
+ error = bluetooth_hf_release_and_accept();
+ break;
+ case BT_HF_CALL_EVENT_ACCEPT_AND_HOLD:
+ error = bluetooth_hf_swap_call();
+ break;
+ case BT_HF_CALL_EVENT_ADD_TO_CONVERSATION:
+ error = bluetooth_hf_join_call();
+ break;
+ default:
+ error = BLUETOOTH_ERROR_INVALID_PARAM;
+ break;
+ }
+
+ error = _bt_get_error_code(error);
+ if (error != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
+ }
+ return error;
+#else
+ BT_ERR("NOT_SUPPORTED(0x%08x)", BT_ERROR_NOT_SUPPORTED);
+ return BT_ERROR_NOT_SUPPORTED;
+#endif
+}
+
+int bt_hf_notify_speaker_gain(int gain)
+{
+#ifdef TIZEN_AUDIO_HF_SUPPORT
+ int error;
+
+ BT_CHECK_INIT_STATUS();
+ error = bluetooth_hf_set_speaker_gain((unsigned int)gain);
+ error = _bt_get_error_code(error);
+ if (BT_ERROR_NONE != error)
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
+
+ return error;
+#else
+ BT_ERR("NOT_SUPPORTED(0x%08x)", BT_ERROR_NOT_SUPPORTED);
+ return BT_ERROR_NOT_SUPPORTED;
+#endif
+}
+
+int bt_hf_set_speaker_gain_changed_cb(bt_hf_speaker_gain_changed_cb callback, void *user_data)
+{
+#ifdef TIZEN_AUDIO_HF_SUPPORT
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(callback);
+ _bt_set_cb(BT_EVENT_HF_SPEAKER_GAIN_CHANGE, callback, user_data);
+ return BT_ERROR_NONE;
+#else
+ BT_ERR("NOT_SUPPORTED(0x%08x)", BT_ERROR_NOT_SUPPORTED);
+ return BT_ERROR_NOT_SUPPORTED;
+#endif
+}
+
+int bt_hf_unset_speaker_gain_changed_cb(void)
+{
+#ifdef TIZEN_AUDIO_HF_SUPPORT
+ BT_CHECK_INIT_STATUS();
+ if (_bt_check_cb(BT_EVENT_HF_SPEAKER_GAIN_CHANGE) == true)
+ _bt_unset_cb(BT_EVENT_HF_SPEAKER_GAIN_CHANGE);
+ return BT_ERROR_NONE;
+#else
+ BT_ERR("NOT_SUPPORTED(0x%08x)", BT_ERROR_NOT_SUPPORTED);
+ return BT_ERROR_NOT_SUPPORTED;
+#endif
+}
+
+int bt_hf_notify_voice_recognition_state(bool state)
+{
+#ifdef TIZEN_AUDIO_HF_SUPPORT
+ int error;
+
+ BT_CHECK_INIT_STATUS();
+ error = bluetooth_hf_voice_recognition(state);
+ error = _bt_get_error_code(error);
+ if (error != BT_ERROR_NONE)
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
+
+ return error;
+#else
+ BT_ERR("NOT_SUPPORTED(0x%08x)", BT_ERROR_NOT_SUPPORTED);
+ return BT_ERROR_NOT_SUPPORTED;
+#endif
+}
+
+int bt_hf_set_call_status_updated_event_cb(bt_hf_call_status_updated_event_cb callback, void *user_data)
+{
+#ifdef TIZEN_AUDIO_HF_SUPPORT
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(callback);
+ _bt_set_cb(BT_EVENT_HF_CALL_STATUS_UPDATED_EVENT, callback, user_data);
+ return BT_ERROR_NONE;
+#else
+ BT_ERR("NOT_SUPPORTED(0x%08x)", BT_ERROR_NOT_SUPPORTED);
+ return BT_ERROR_NOT_SUPPORTED;
+#endif
+}
+
+int bt_hf_unset_call_status_updated_event_cb(void)
+{
+#ifdef TIZEN_AUDIO_HF_SUPPORT
+ BT_CHECK_INIT_STATUS();
+ if (_bt_check_cb(BT_EVENT_HF_CALL_STATUS_UPDATED_EVENT) == true)
+ _bt_unset_cb(BT_EVENT_HF_CALL_STATUS_UPDATED_EVENT);
+ return BT_ERROR_NONE;
+#else
+ BT_ERR("NOT_SUPPORTED(0x%08x)", BT_ERROR_NOT_SUPPORTED);
+ return BT_ERROR_NOT_SUPPORTED;
+#endif
+}
+
+int bt_hf_close_sco(void)
+{
+#ifdef TIZEN_AUDIO_HF_SUPPORT
+ int error;
+
+ BT_CHECK_INIT_STATUS();
+ error = bluetooth_hf_audio_disconnect();
+ error = _bt_get_error_code(error);
+ if (error != BT_ERROR_NONE)
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
+
+ return error;
+#else
+ BT_ERR("NOT_SUPPORTED(0x%08x)", BT_ERROR_NOT_SUPPORTED);
+ return BT_ERROR_NOT_SUPPORTED;
+#endif
+}
+
+int bt_hf_send_dtmf(char *dtmf)
+{
+#ifdef TIZEN_AUDIO_HF_SUPPORT
+ int error;
+
+ BT_CHECK_INIT_STATUS();
+ error = bluetooth_hf_send_dtmf(dtmf);
+ error = _bt_get_error_code(error);
+ if (error != BT_ERROR_NONE)
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
+
+ return error;
+#else
+ BT_ERR("NOT_SUPPORTED(0x%08x)", BT_ERROR_NOT_SUPPORTED);
+ return BT_ERROR_NOT_SUPPORTED;
+#endif
+}
+
+int bt_hf_is_connected(bool *connected)
+{
+#ifdef TIZEN_AUDIO_HF_SUPPORT
+ int error;
+ gboolean is_connected = false;
+
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(connected);
+
+ error = bluetooth_hf_is_connected(&is_connected);
+ error = _bt_get_error_code(error);
+ if (error != BT_ERROR_NONE)
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
+
+ if (is_connected)
+ *connected = true;
+ else
+ *connected = false;
+
+ return error;
+#else
+ BT_ERR("NOT_SUPPORTED(0x%08x)", BT_ERROR_NOT_SUPPORTED);
+ return BT_ERROR_NOT_SUPPORTED;
+#endif
+}
+
+int bt_hf_is_sco_opened(bool *opened)
+{
+#ifdef TIZEN_AUDIO_HF_SUPPORT
+ int error;
+ unsigned int audio_connected = BLUETOOTH_HF_AUDIO_DISCONNECTED;
+
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(opened);
+
+ error = bluetooth_hf_get_audio_connected(&audio_connected);
+ error = _bt_get_error_code(error);
+ if (error != BT_ERROR_NONE)
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
+
+ if (audio_connected == BLUETOOTH_HF_AUDIO_CONNECTED)
+ *opened = true;
+ else
+ *opened = false;
+
+ return error;
+#else
+ BT_ERR("NOT_SUPPORTED(0x%08x)", BT_ERROR_NOT_SUPPORTED);
+ return BT_ERROR_NOT_SUPPORTED;
+#endif
+}
+
+int bt_hf_get_codec_id(unsigned int *codec_id)
+{
+#ifdef TIZEN_AUDIO_HF_SUPPORT
+ int error;
+
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(codec_id);
+
+ error = bluetooth_hf_get_codec(codec_id);
+ error = _bt_get_error_code(error);
+ if (error != BT_ERROR_NONE)
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
+
+ return error;
+#else
+ BT_ERR("NOT_SUPPORTED(0x%08x)", BT_ERROR_NOT_SUPPORTED);
+ return BT_ERROR_NOT_SUPPORTED;
+#endif
+}
+
+int bt_hf_get_call_status_info_list(GSList **call_list)
+{
+#ifdef TIZEN_AUDIO_HF_SUPPORT
+ int error;
+ bt_hf_call_list_s *hf_call_list = NULL;
+ GList *l;
+
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(call_list);
+
+ error = bluetooth_hf_request_call_list(&hf_call_list);
+ error = _bt_get_error_code(error);
+ if (error != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
+ return error;
+ }
+
+ *call_list = NULL;
+ for (l = g_list_first(hf_call_list->list); l; l = g_list_next(l)) {
+ bt_hf_call_status_info_t *hf_call_info = l->data;
+ bt_hf_call_status_info_s *call_info = NULL;
+
+ call_info = g_malloc0(sizeof(bt_hf_call_status_info_s));
+ call_info->number = strdup(hf_call_info->number);
+ call_info->direction = hf_call_info->direction;
+ call_info->status = hf_call_info->status;
+ call_info->multi_party = hf_call_info->mpart;
+ call_info->index = hf_call_info->idx;
+ *call_list = g_slist_append(*call_list, call_info);
+ }
+
+ bluetooth_hf_free_call_list(hf_call_list);
+
+ return error;
+#else
+ BT_ERR("NOT_SUPPORTED(0x%08x)", BT_ERROR_NOT_SUPPORTED);
+ return BT_ERROR_NOT_SUPPORTED;
+#endif
+}
+
+#ifdef TIZEN_AUDIO_HF_SUPPORT
+static void __bt_hf_free_call_status_info(void *data)
+{
+ bt_hf_call_status_info_s *call_info = (bt_hf_call_status_info_s*)data;
+ g_free(call_info->number);
+ g_free(call_info);
+}
+#endif
+
+int bt_hf_free_call_status_info_list(GSList *call_list)
+{
+#ifdef TIZEN_AUDIO_HF_SUPPORT
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(call_list);
+
+ g_slist_free_full(call_list, __bt_hf_free_call_status_info);
+
+ return BT_ERROR_NONE;
+#else
+ BT_ERR("NOT_SUPPORTED(0x%08x)", BT_ERROR_NOT_SUPPORTED);
+ return BT_ERROR_NOT_SUPPORTED;
+#endif
+}
+
+int bt_hf_set_sco_state_changed_cb(bt_hf_sco_state_changed_cb callback,
+ void *user_data)
+{
+#ifdef TIZEN_AUDIO_HF_SUPPORT
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(callback);
+ _bt_set_cb(BT_EVENT_HF_SCO_CONNECTION_STATUS, callback, user_data);
+ return BT_ERROR_NONE;
+#else
+ BT_ERR("NOT_SUPPORTED(0x%08x)", BT_ERROR_NOT_SUPPORTED);
+ return BT_ERROR_NOT_SUPPORTED;
+#endif
+}
+
+int bt_hf_unset_sco_state_changed_cb(void)
+{
+#ifdef TIZEN_AUDIO_HF_SUPPORT
+ BT_CHECK_INIT_STATUS();
+ if (_bt_check_cb(BT_EVENT_HF_SCO_CONNECTION_STATUS) == true)
+ _bt_unset_cb(BT_EVENT_HF_SCO_CONNECTION_STATUS);
+ return BT_ERROR_NONE;
+#else
+ BT_ERR("NOT_SUPPORTED(0x%08x)", BT_ERROR_NOT_SUPPORTED);
+ return BT_ERROR_NOT_SUPPORTED;
+#endif
+}
+
+int bt_hf_set_call_handling_event_cb(bt_hf_call_handling_event_cb callback,
+ void *user_data)
+{
+#ifdef TIZEN_AUDIO_HF_SUPPORT
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(callback);
+ _bt_set_cb(BT_EVENT_HF_CALL_HANDLING_EVENT, callback, user_data);
+ return BT_ERROR_NONE;
+#else
+ BT_ERR("NOT_SUPPORTED(0x%08x)", BT_ERROR_NOT_SUPPORTED);
+ return BT_ERROR_NOT_SUPPORTED;
+#endif
+}
+
+int bt_hf_unset_call_handling_event_cb(void)
+{
+#ifdef TIZEN_AUDIO_HF_SUPPORT
+ BT_CHECK_INIT_STATUS();
+ if (_bt_check_cb(BT_EVENT_HF_CALL_HANDLING_EVENT) == true)
+ _bt_unset_cb(BT_EVENT_HF_CALL_HANDLING_EVENT);
+ return BT_ERROR_NONE;
+#else
+ BT_ERR("NOT_SUPPORTED(0x%08x)", BT_ERROR_NOT_SUPPORTED);
+ return BT_ERROR_NOT_SUPPORTED;
+#endif
+}
+
+int bt_hf_set_multi_call_handling_event_cb(
+ bt_hf_multi_call_handling_event_cb callback,
+ void *user_data)
+{
+#ifdef TIZEN_AUDIO_HF_SUPPORT
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(callback);
+ _bt_set_cb(BT_EVENT_HF_MULTI_CALL_HANDLING_EVENT, callback, user_data);
+ return BT_ERROR_NONE;
+#else
+ BT_ERR("NOT_SUPPORTED(0x%08x)", BT_ERROR_NOT_SUPPORTED);
+ return BT_ERROR_NOT_SUPPORTED;
+#endif
+}
+
+int bt_hf_unset_multi_call_handling_event_cb(void)
+{
+#ifdef TIZEN_AUDIO_HF_SUPPORT
+ BT_CHECK_INIT_STATUS();
+ if (_bt_check_cb(BT_EVENT_HF_MULTI_CALL_HANDLING_EVENT) == true)
+ _bt_unset_cb(BT_EVENT_HF_MULTI_CALL_HANDLING_EVENT);
+ return BT_ERROR_NONE;
+#else
+ BT_ERR("NOT_SUPPORTED(0x%08x)", BT_ERROR_NOT_SUPPORTED);
+ return BT_ERROR_NOT_SUPPORTED;
+#endif
+}
+#endif
diff --git a/src/bluetooth-avrcp.c b/src/bluetooth-avrcp.c
index b20a5c5..d737a10 100644
--- a/src/bluetooth-avrcp.c
+++ b/src/bluetooth-avrcp.c
@@ -21,10 +21,54 @@
#include "bluetooth_private.h"
#include "bluetooth-audio-api.h"
#include "bluetooth-media-control.h"
-#ifdef LOG_TAG
-#undef LOG_TAG
+
+static bool is_avrcp_target_initialized = false;
+static bool is_avrcp_control_initialized = false;
+
+#ifdef TIZEN_AVRCP_DISABLE
+#define BT_CHECK_AVRCP_SUPPORT() \
+ { \
+ BT_CHECK_BT_SUPPORT(); \
+ LOGE("[%s] NOT_SUPPORTED(0x%08x)", __FUNCTION__, BT_ERROR_NOT_SUPPORTED); \
+ return BT_ERROR_NOT_SUPPORTED; \
+ }
+#else
+#define BT_CHECK_AVRCP_SUPPORT()
#endif
-#define LOG_TAG "TIZEN_N_BLUETOOTH"
+
+#define BT_CHECK_AVRCP_TARGET_INIT_STATUS() \
+ if (__bt_check_avrcp_target_init_status() == BT_ERROR_NOT_INITIALIZED) \
+ { \
+ LOGE("[%s] NOT_INITIALIZED(0x%08x)", __FUNCTION__, BT_ERROR_NOT_INITIALIZED); \
+ return BT_ERROR_NOT_INITIALIZED; \
+ }
+
+int __bt_check_avrcp_target_init_status(void)
+{
+ if (is_avrcp_target_initialized != true) {
+ BT_ERR("NOT_INITIALIZED(0x%08x)", BT_ERROR_NOT_INITIALIZED);
+ return BT_ERROR_NOT_INITIALIZED;
+ }
+
+ return BT_ERROR_NONE;
+}
+
+#define BT_CHECK_AVRCP_CONTROL_INIT_STATUS() \
+ if (__bt_check_avrcp_control_init_status() == BT_ERROR_NOT_INITIALIZED) \
+ { \
+ LOGE("[%s] NOT_INITIALIZED(0x%08x)", __FUNCTION__, BT_ERROR_NOT_INITIALIZED); \
+ return BT_ERROR_NOT_INITIALIZED; \
+ }
+
+int __bt_check_avrcp_control_init_status(void)
+{
+ if (is_avrcp_control_initialized != true) {
+ BT_ERR("NOT_INITIALIZED(0x%08x)", BT_ERROR_NOT_INITIALIZED);
+ return BT_ERROR_NOT_INITIALIZED;
+ }
+
+ return BT_ERROR_NONE;
+}
/*The below API is just to conver the error from Audio API's to CAPI error codes,
* this is temporary change and changes to proper error code will be done in
@@ -38,6 +82,8 @@ int _bt_convert_avrcp_error_code(int error)
return BT_ERROR_INVALID_PARAMETER;
case BT_MEDIA_ERROR_ALREADY_INITIALIZED:
return BT_ERROR_OPERATION_FAILED;
+ case BT_MEDIA_ERROR_NOT_CONNECTED:
+ return BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED;
default:
return BT_ERROR_NONE;
}
@@ -47,6 +93,7 @@ int bt_avrcp_target_initialize(bt_avrcp_target_connection_state_changed_cb callb
{
int error;
+ BT_CHECK_AVRCP_SUPPORT();
BT_CHECK_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(callback);
_bt_set_cb(BT_EVENT_AVRCP_CONNECTION_STATUS, callback, user_data);
@@ -54,17 +101,21 @@ int bt_avrcp_target_initialize(bt_avrcp_target_connection_state_changed_cb callb
error = _bt_convert_avrcp_error_code(error);
error = _bt_get_error_code(error);
if (BT_ERROR_NONE != error) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__,
- _bt_convert_error_to_string(error), error);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
+ return error;
}
- return error;
+
+ is_avrcp_target_initialized = true;
+ return BT_ERROR_NONE;
}
int bt_avrcp_target_deinitialize(void)
{
int error;
+ BT_CHECK_AVRCP_SUPPORT();
BT_CHECK_INIT_STATUS();
+ BT_CHECK_AVRCP_TARGET_INIT_STATUS();
if (_bt_check_cb(BT_EVENT_AVRCP_CONNECTION_STATUS) == true)
_bt_unset_cb(BT_EVENT_AVRCP_CONNECTION_STATUS);
@@ -73,35 +124,41 @@ int bt_avrcp_target_deinitialize(void)
error = _bt_get_error_code(error);
if (BT_ERROR_NONE != error) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__,
- _bt_convert_error_to_string(error), error);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
+ return error;
}
- return error;
+
+ is_avrcp_target_initialized = false;
+ return BT_ERROR_NONE;
}
int bt_avrcp_target_notify_equalizer_state(bt_avrcp_equalizer_state_e state)
{
int error;
+
+ BT_CHECK_AVRCP_SUPPORT();
BT_CHECK_INIT_STATUS();
- error = bluetooth_media_player_change_property(EQUILIZER, state);
+ BT_CHECK_AVRCP_TARGET_INIT_STATUS();
+ error = bluetooth_media_player_change_property(EQUALIZER, state);
error = _bt_convert_avrcp_error_code(error);
error = _bt_get_error_code(error);
if (BT_ERROR_NONE != error) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__,
- _bt_convert_error_to_string(error), error);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
}
return error;
}
int bt_avrcp_target_notify_repeat_mode(bt_avrcp_repeat_mode_e mode)
{
int error;
+
+ BT_CHECK_AVRCP_SUPPORT();
BT_CHECK_INIT_STATUS();
+ BT_CHECK_AVRCP_TARGET_INIT_STATUS();
error = bluetooth_media_player_change_property(REPEAT, mode);
error = _bt_convert_avrcp_error_code(error);
error = _bt_get_error_code(error);
if (BT_ERROR_NONE != error) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__,
- _bt_convert_error_to_string(error), error);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
}
return error;
}
@@ -109,26 +166,30 @@ int bt_avrcp_target_notify_repeat_mode(bt_avrcp_repeat_mode_e mode)
int bt_avrcp_target_notify_shuffle_mode(bt_avrcp_shuffle_mode_e mode)
{
int error;
+
+ BT_CHECK_AVRCP_SUPPORT();
BT_CHECK_INIT_STATUS();
+ BT_CHECK_AVRCP_TARGET_INIT_STATUS();
error = bluetooth_media_player_change_property(SHUFFLE, mode);
error = _bt_convert_avrcp_error_code(error);
error = _bt_get_error_code(error);
if (BT_ERROR_NONE != error) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__,
- _bt_convert_error_to_string(error), error);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
}
return error;
}
int bt_avrcp_target_notify_scan_mode(bt_avrcp_scan_mode_e mode)
{
int error;
+
+ BT_CHECK_AVRCP_SUPPORT();
BT_CHECK_INIT_STATUS();
+ BT_CHECK_AVRCP_TARGET_INIT_STATUS();
error = bluetooth_media_player_change_property(SCAN, mode);
error = _bt_convert_avrcp_error_code(error);
error = _bt_get_error_code(error);
if (BT_ERROR_NONE != error) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__,
- _bt_convert_error_to_string(error), error);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
}
return error;
}
@@ -136,13 +197,15 @@ int bt_avrcp_target_notify_scan_mode(bt_avrcp_scan_mode_e mode)
int bt_avrcp_target_notify_player_state(bt_avrcp_player_state_e state)
{
int error;
+
+ BT_CHECK_AVRCP_SUPPORT();
BT_CHECK_INIT_STATUS();
+ BT_CHECK_AVRCP_TARGET_INIT_STATUS();
error = bluetooth_media_player_change_property(STATUS, state);
error = _bt_convert_avrcp_error_code(error);
error = _bt_get_error_code(error);
if (BT_ERROR_NONE != error) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__,
- _bt_convert_error_to_string(error), error);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
}
return error;
}
@@ -150,13 +213,15 @@ int bt_avrcp_target_notify_player_state(bt_avrcp_player_state_e state)
int bt_avrcp_target_notify_position(unsigned int position)
{
int error;
+
+ BT_CHECK_AVRCP_SUPPORT();
BT_CHECK_INIT_STATUS();
+ BT_CHECK_AVRCP_TARGET_INIT_STATUS();
error = bluetooth_media_player_change_property(POSITION, position);
error = _bt_convert_avrcp_error_code(error);
error = _bt_get_error_code(error);
if (BT_ERROR_NONE != error) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__,
- _bt_convert_error_to_string(error), error);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
}
return error;
}
@@ -165,7 +230,10 @@ int bt_avrcp_target_notify_track(const char *title, const char *artist, const ch
const char *genre, unsigned int track_num, unsigned int total_tracks, unsigned int duration)
{
int error;
+
+ BT_CHECK_AVRCP_SUPPORT();
BT_CHECK_INIT_STATUS();
+ BT_CHECK_AVRCP_TARGET_INIT_STATUS();
media_metadata_attributes_t metadata;
metadata.title = title;
metadata.artist = artist;
@@ -178,8 +246,426 @@ int bt_avrcp_target_notify_track(const char *title, const char *artist, const ch
error = _bt_convert_avrcp_error_code(error);
error = _bt_get_error_code(error);
if (BT_ERROR_NONE != error) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__,
- _bt_convert_error_to_string(error), error);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
+ }
+ return error;
+}
+
+int bt_avrcp_control_initialize(bt_avrcp_control_connection_state_changed_cb callback,
+ void *user_data)
+{
+ int error;
+
+ BT_CHECK_AVRCP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(callback);
+ _bt_set_cb(BT_EVENT_AVRCP_CONNECTION_STATUS, callback, user_data);
+ error = bluetooth_media_control_init(_bt_avrcp_event_proxy, NULL);
+ error = _bt_convert_avrcp_error_code(error);
+ error = _bt_get_error_code(error);
+ if (BT_ERROR_NONE != error) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
+ return error;
+ }
+
+ is_avrcp_control_initialized = true;
+ return BT_ERROR_NONE;
+}
+
+int bt_avrcp_control_deinitialize(void)
+{
+ int error;
+
+ BT_CHECK_AVRCP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_AVRCP_CONTROL_INIT_STATUS();
+ if (_bt_check_cb(BT_EVENT_AVRCP_CONNECTION_STATUS) == true)
+ _bt_unset_cb(BT_EVENT_AVRCP_CONNECTION_STATUS);
+
+ error = bluetooth_media_control_deinit();
+ error = _bt_convert_avrcp_error_code(error);
+
+ error = _bt_get_error_code(error);
+ if (BT_ERROR_NONE != error) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
+ return error;
+ }
+
+ is_avrcp_control_initialized = false;
+ return BT_ERROR_NONE;
+}
+
+int bt_avrcp_control_connect(const char *remote_address)
+{
+ int error;
+ bluetooth_device_address_t addr_hex = { {0,} };
+
+ BT_CHECK_AVRCP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_AVRCP_CONTROL_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(remote_address);
+ _bt_convert_address_to_hex(&addr_hex, remote_address);
+
+ error = bluetooth_media_control_connect(&addr_hex);
+ error = _bt_get_error_code(error);
+ if (error != BT_ERROR_NONE)
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
+
+ return error;
+}
+
+int bt_avrcp_control_disconnect(const char *remote_address)
+{
+ int error;
+ bluetooth_device_address_t addr_hex = { {0,} };
+
+ BT_CHECK_AVRCP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_AVRCP_CONTROL_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(remote_address);
+ _bt_convert_address_to_hex(&addr_hex, remote_address);
+
+ error = bluetooth_media_control_disconnect(&addr_hex);
+ error = _bt_get_error_code(error);
+ if (error != BT_ERROR_NONE)
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
+
+ return error;
+}
+
+int bt_avrcp_control_send_player_command(bt_avrcp_player_command_e cmd)
+{
+ int error;
+
+ BT_CHECK_AVRCP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_AVRCP_CONTROL_INIT_STATUS();
+ error = bluetooth_media_control_command(cmd);
+ error = _bt_convert_avrcp_error_code(error);
+ error = _bt_get_error_code(error);
+ if (BT_ERROR_NONE != error)
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
+
+ return error;
+}
+
+int bt_avrcp_control_set_equalizer_state(bt_avrcp_equalizer_state_e state)
+{
+ int error;
+
+ BT_CHECK_AVRCP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_AVRCP_CONTROL_INIT_STATUS();
+ error = bluetooth_media_control_set_property(EQUALIZER, state);
+ error = _bt_convert_avrcp_error_code(error);
+ error = _bt_get_error_code(error);
+ if (BT_ERROR_NONE != error)
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
+
+ return error;
+}
+
+int bt_avrcp_control_get_equalizer_state(bt_avrcp_equalizer_state_e *state)
+{
+ int error;
+
+ BT_CHECK_AVRCP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_AVRCP_CONTROL_INIT_STATUS();
+ error = bluetooth_media_control_get_property(EQUALIZER, state);
+ error = _bt_convert_avrcp_error_code(error);
+ error = _bt_get_error_code(error);
+ if (BT_ERROR_NONE != error)
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
+
+ return error;
+}
+
+int bt_avrcp_control_set_repeat_mode(bt_avrcp_repeat_mode_e mode)
+{
+ int error;
+
+ BT_CHECK_AVRCP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_AVRCP_CONTROL_INIT_STATUS();
+ error = bluetooth_media_control_set_property(REPEAT, mode);
+ error = _bt_convert_avrcp_error_code(error);
+ error = _bt_get_error_code(error);
+ if (BT_ERROR_NONE != error)
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
+
+ return error;
+}
+
+int bt_avrcp_control_get_repeat_mode(bt_avrcp_repeat_mode_e *mode)
+{
+ int error;
+
+ BT_CHECK_AVRCP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_AVRCP_CONTROL_INIT_STATUS();
+ error = bluetooth_media_control_get_property(REPEAT, mode);
+ error = _bt_convert_avrcp_error_code(error);
+ error = _bt_get_error_code(error);
+ if (BT_ERROR_NONE != error)
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
+
+ return error;
+}
+
+int bt_avrcp_control_set_shuffle_mode(bt_avrcp_shuffle_mode_e mode)
+{
+ int error;
+
+ BT_CHECK_AVRCP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_AVRCP_CONTROL_INIT_STATUS();
+ error = bluetooth_media_control_set_property(SHUFFLE, mode);
+ error = _bt_convert_avrcp_error_code(error);
+ error = _bt_get_error_code(error);
+ if (BT_ERROR_NONE != error)
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
+
+ return error;
+}
+
+int bt_avrcp_control_get_shuffle_mode(bt_avrcp_shuffle_mode_e *mode)
+{
+ int error;
+
+ BT_CHECK_AVRCP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_AVRCP_CONTROL_INIT_STATUS();
+ error = bluetooth_media_control_get_property(SHUFFLE, mode);
+ error = _bt_convert_avrcp_error_code(error);
+ error = _bt_get_error_code(error);
+ if (BT_ERROR_NONE != error)
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
+
+ return error;
+}
+int bt_avrcp_control_set_scan_mode(bt_avrcp_scan_mode_e mode)
+{
+ int error;
+
+ BT_CHECK_AVRCP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_AVRCP_CONTROL_INIT_STATUS();
+ error = bluetooth_media_control_set_property(SCAN, mode);
+ error = _bt_convert_avrcp_error_code(error);
+ error = _bt_get_error_code(error);
+ if (BT_ERROR_NONE != error)
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
+
+ return error;
+}
+
+int bt_avrcp_control_get_scan_mode(bt_avrcp_scan_mode_e *mode)
+{
+ int error;
+
+ BT_CHECK_AVRCP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_AVRCP_CONTROL_INIT_STATUS();
+ error = bluetooth_media_control_get_property(SCAN, mode);
+ error = _bt_convert_avrcp_error_code(error);
+ error = _bt_get_error_code(error);
+ if (BT_ERROR_NONE != error)
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
+
+ return error;
+}
+
+int bt_avrcp_control_get_position(unsigned int *position)
+{
+ int error;
+
+ BT_CHECK_AVRCP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_AVRCP_CONTROL_INIT_STATUS();
+ error = bluetooth_media_control_get_property(POSITION, position);
+ error = _bt_convert_avrcp_error_code(error);
+ error = _bt_get_error_code(error);
+ if (BT_ERROR_NONE != error)
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
+
+ return error;
+}
+
+int bt_avrcp_control_get_play_status(bt_avrcp_player_state_e *status)
+{
+ int error;
+
+ BT_CHECK_AVRCP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_AVRCP_CONTROL_INIT_STATUS();
+ error = bluetooth_media_control_get_property(STATUS, status);
+ error = _bt_convert_avrcp_error_code(error);
+ error = _bt_get_error_code(error);
+ if (BT_ERROR_NONE != error)
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
+
+ return error;
+}
+
+int bt_avrcp_control_get_track_info(bt_avrcp_metadata_attributes_info_s **track)
+{
+ int error;
+ media_metadata_attributes_t metadata = {0,};
+ bt_avrcp_metadata_attributes_info_s *tr_info;
+
+ BT_CHECK_AVRCP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_AVRCP_CONTROL_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(track);
+ error = bluetooth_media_control_get_track_info(&metadata);
+ error = _bt_convert_avrcp_error_code(error);
+ error = _bt_get_error_code(error);
+ if (BT_ERROR_NONE != error) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
+ } else {
+ tr_info = (bt_avrcp_metadata_attributes_info_s *)g_malloc0(
+ sizeof(bt_avrcp_metadata_attributes_info_s));
+ tr_info->title = metadata.title;
+ tr_info->artist = metadata.artist;
+ tr_info->album = metadata.album;
+ tr_info->genre = metadata.genre;
+ tr_info->total_tracks = metadata.total_tracks;
+ tr_info->number = metadata.number;
+ tr_info->duration = metadata.duration;
+ *track = tr_info;
}
return error;
}
+
+int bt_avrcp_control_free_track_info(bt_avrcp_metadata_attributes_info_s *track)
+{
+ BT_CHECK_AVRCP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(track);
+ g_free((gpointer)track->title);
+ g_free((gpointer)track->artist);
+ g_free((gpointer)track->album);
+ g_free((gpointer)track->genre);
+ g_free((gpointer)track);
+ return BT_ERROR_NONE;
+}
+
+int bt_avrcp_set_equalizer_state_changed_cb(bt_avrcp_equalizer_state_changed_cb callback, void *user_data)
+{
+ BT_CHECK_AVRCP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(callback);
+ _bt_set_cb(BT_EVENT_AVRCP_EQUALIZER_STATE_CHANGED, callback, user_data);
+ return BT_ERROR_NONE;
+}
+
+int bt_avrcp_unset_equalizer_state_changed_cb(void)
+{
+ BT_CHECK_AVRCP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ _bt_unset_cb(BT_EVENT_AVRCP_EQUALIZER_STATE_CHANGED);
+ return BT_ERROR_NONE;
+}
+
+int bt_avrcp_set_repeat_mode_changed_cb(bt_avrcp_repeat_mode_changed_cb callback, void *user_data)
+{
+ BT_CHECK_AVRCP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(callback);
+ _bt_set_cb(BT_EVENT_AVRCP_REPEAT_MODE_CHANGED, callback, user_data);
+ return BT_ERROR_NONE;
+}
+
+int bt_avrcp_unset_repeat_mode_changed_cb(void)
+{
+ BT_CHECK_AVRCP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ _bt_unset_cb(BT_EVENT_AVRCP_REPEAT_MODE_CHANGED);
+ return BT_ERROR_NONE;
+}
+
+int bt_avrcp_set_shuffle_mode_changed_cb(bt_avrcp_shuffle_mode_changed_cb callback, void *user_data)
+{
+ BT_CHECK_AVRCP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(callback);
+ _bt_set_cb(BT_EVENT_AVRCP_SHUFFLE_MODE_CHANGED, callback, user_data);
+ return BT_ERROR_NONE;
+}
+
+int bt_avrcp_unset_shuffle_mode_changed_cb(void)
+{
+ BT_CHECK_AVRCP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ _bt_unset_cb(BT_EVENT_AVRCP_SHUFFLE_MODE_CHANGED);
+ return BT_ERROR_NONE;
+}
+
+int bt_avrcp_set_scan_mode_changed_cb(bt_avrcp_scan_mode_changed_cb callback, void *user_data)
+{
+ BT_CHECK_AVRCP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(callback);
+ _bt_set_cb(BT_EVENT_AVRCP_SCAN_MODE_CHANGED, callback, user_data);
+ return BT_ERROR_NONE;
+}
+
+int bt_avrcp_unset_scan_mode_changed_cb(void)
+{
+ BT_CHECK_AVRCP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ _bt_unset_cb(BT_EVENT_AVRCP_SCAN_MODE_CHANGED);
+ return BT_ERROR_NONE;
+}
+
+int bt_avrcp_set_song_position_changed_cb(bt_avrcp_song_position_changed_cb callback, void *user_data)
+{
+ BT_CHECK_AVRCP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(callback);
+ _bt_set_cb(BT_EVENT_AVRCP_SONG_POSITION_CHANGED, callback, user_data);
+ return BT_ERROR_NONE;
+}
+
+int bt_avrcp_unset_song_position_changed_cb(void)
+{
+ BT_CHECK_AVRCP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ _bt_unset_cb(BT_EVENT_AVRCP_SONG_POSITION_CHANGED);
+ return BT_ERROR_NONE;
+}
+
+int bt_avrcp_set_play_status_changed_cb(bt_avrcp_play_status_changed_cb callback, void *user_data)
+{
+ BT_CHECK_AVRCP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(callback);
+ _bt_set_cb(BT_EVENT_AVRCP_PLAY_STATUS_CHANGED, callback, user_data);
+ return BT_ERROR_NONE;
+}
+
+int bt_avrcp_unset_play_status_changed_cb(void)
+{
+ BT_CHECK_AVRCP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ _bt_unset_cb(BT_EVENT_AVRCP_PLAY_STATUS_CHANGED);
+ return BT_ERROR_NONE;
+}
+
+int bt_avrcp_set_track_info_changed_cb(bt_avrcp_track_info_changed_cb callback, void *user_data)
+{
+ BT_CHECK_AVRCP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(callback);
+ _bt_set_cb(BT_EVENT_AVRCP_TRACK_INFO_CHANGED, callback, user_data);
+ return BT_ERROR_NONE;
+}
+
+int bt_avrcp_unset_track_info_changed_cb(void)
+{
+ BT_CHECK_AVRCP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ _bt_unset_cb(BT_EVENT_AVRCP_TRACK_INFO_CHANGED);
+ return BT_ERROR_NONE;
+}
diff --git a/src/bluetooth-common.c b/src/bluetooth-common.c
index c531dd1..81e6778 100644
--- a/src/bluetooth-common.c
+++ b/src/bluetooth-common.c
@@ -24,56 +24,37 @@
#include <bluetooth-api.h>
#include "bluetooth.h"
+#include "bluetooth_internal.h"
#include "bluetooth_private.h"
#include "bluetooth-media-control.h"
-#ifdef LOG_TAG
-#undef LOG_TAG
-#endif
-#define LOG_TAG "TIZEN_N_BLUETOOTH"
+#include "bluetooth-telephony-api.h"
static bool is_initialized = false;
-static bt_event_sig_event_slot_s bt_event_slot_container[] = {
- {BT_EVENT_STATE_CHANGED, NULL, NULL},
- {BT_EVENT_NAME_CHANGED, NULL, NULL},
- {BT_EVENT_VISIBILITY_MODE_CHANGED, NULL, NULL},
- {BT_EVENT_DEVICE_DISCOVERY_STATE_CHANGED, NULL, NULL},
- {BT_EVENT_BOND_CREATED, NULL, NULL},
- {BT_EVENT_BOND_DESTROYED, NULL, NULL},
- {BT_EVENT_AUTHORIZATION_CHANGED, NULL, NULL},
- {BT_EVENT_SERVICE_SEARCHED, NULL, NULL},
- {BT_EVENT_DATA_RECEIVED, NULL, NULL},
- {BT_EVENT_CONNECTION_STATE_CHANGED, NULL, NULL},
- {BT_EVENT_RFCOMM_CONNECTION_REQUESTED, NULL, NULL},
- {BT_EVENT_OPP_CONNECTION_REQUESTED, NULL, NULL},
- {BT_EVENT_OPP_PUSH_REQUESTED, NULL, NULL},
- {BT_EVENT_OPP_SERVER_TRANSFER_PROGRESS, NULL, NULL},
- {BT_EVENT_OPP_SERVER_TRANSFER_FINISHED, NULL, NULL},
- {BT_EVENT_OPP_CLIENT_PUSH_RESPONSED, NULL, NULL},
- {BT_EVENT_OPP_CLIENT_PUSH_PROGRESS, NULL, NULL},
- {BT_EVENT_OPP_CLIENT_PUSH_FINISHED, NULL, NULL},
- {BT_EVENT_PAN_CONNECTION_STATE_CHANGED, NULL, NULL},
- {BT_EVENT_NAP_CONNECTION_STATE_CHANGED, NULL, NULL},
- {BT_EVENT_HDP_CONNECTED, NULL, NULL},
- {BT_EVENT_HDP_DISCONNECTED, NULL, NULL},
- {BT_EVENT_HDP_DATA_RECIEVED, NULL, NULL},
- {BT_EVENT_AUDIO_CONNECTION_STATUS, NULL, NULL},
- {BT_EVENT_AG_MICROPHONE_GAIN_CHANGE, NULL, NULL},
- {BT_EVENT_AG_MICROPHONE_GAIN_CHANGE, NULL, NULL},
- {BT_EVENT_AVRCP_CONNECTION_STATUS, NULL, NULL},
- {BT_EVENT_HID_CONNECTION_STATUS, NULL, NULL}
-};
+static bool is_le_initialized = false;
+
+static bt_event_sig_event_slot_s bt_event_slot_container[BT_EVENT_MAX] = { {NULL, NULL}, };
/*
* Internal Functions
*/
static void __bt_event_proxy(int event, bluetooth_event_param_t * param, void *user_data);
+static void __bt_le_event_proxy(int event, bluetooth_event_param_t *param, void *user_data);
static int __bt_get_cb_index(int event);
static void __bt_convert_lower_to_upper(char *origin);
static int __bt_get_bt_device_sdp_info_s(bt_device_sdp_info_s **dest, bt_sdp_info_t *source);
static void __bt_free_bt_device_sdp_info_s(bt_device_sdp_info_s *sdp_info);
+static int __bt_get_bt_device_connection_info_s(bt_device_connection_info_s **dest, bt_connection_info_t *source);
+static void __bt_free_bt_device_connection_info_s(bt_device_connection_info_s *conn_info);
static int __bt_get_bt_adapter_device_discovery_info_s(bt_adapter_device_discovery_info_s **discovery_info, bluetooth_device_info_t *source_info);
static void __bt_free_bt_adapter_device_discovery_info_s(bt_adapter_device_discovery_info_s *discovery_info);
-
+static int __bt_get_bt_adapter_le_device_scan_info_s(bt_adapter_le_device_scan_result_info_s **scan_info, bluetooth_le_device_info_t *source_info);
+static void __bt_free_bt_adapter_le_device_scan_info_s(bt_adapter_le_device_scan_result_info_s *scan_info);
+#ifndef TIZEN_WEARABLE
+static int __bt_get_bt_adapter_le_device_discovery_info_s(bt_adapter_le_device_discovery_info_s **le_discovery_info, bluetooth_le_device_info_t *source_info);
+static void __bt_free_bt_adapter_le_device_discovery_info_s(bt_adapter_le_device_discovery_info_s *discovery_info);
+#endif
+static int __bt_gatt_client_update_characteristics(bt_gatt_handle_info_t char_handles, bt_gatt_service_s *service);
+static int __bt_gatt_client_update_descriptors(bt_gatt_handle_info_t desc_handles, bt_gatt_characteristic_s *characteristic);
/*
* Public Functions
@@ -81,9 +62,10 @@ static void __bt_free_bt_adapter_device_discovery_info_s(bt_adapter_device_disco
int bt_initialize(void)
{
+ BT_CHECK_BT_SUPPORT();
if (is_initialized != true) {
if (bluetooth_register_callback(&__bt_event_proxy, NULL) != BLUETOOTH_ERROR_NONE) {
- LOGE("[%s] OPERATION_FAILED(0x%08x)", __FUNCTION__, BT_ERROR_OPERATION_FAILED);
+ BT_ERR("OPERATION_FAILED(0x%08x)", BT_ERROR_OPERATION_FAILED);
return BT_ERROR_OPERATION_FAILED;
}
is_initialized = true;
@@ -94,9 +76,10 @@ int bt_initialize(void)
int bt_deinitialize(void)
{
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
if (bluetooth_unregister_callback() != BLUETOOTH_ERROR_NONE) {
- LOGE("[%s] OPERATION_FAILED(0x%08x)", __FUNCTION__, BT_ERROR_OPERATION_FAILED);
+ BT_ERR("OPERATION_FAILED(0x%08x)", BT_ERROR_OPERATION_FAILED);
return BT_ERROR_OPERATION_FAILED;
}
is_initialized = false;
@@ -104,15 +87,13 @@ int bt_deinitialize(void)
return BT_ERROR_NONE;
}
-
/*
* Common Functions
*/
int _bt_check_init_status(void)
{
- if (is_initialized != true)
- {
- LOGE("[%s] NOT_INITIALIZED(0x%08x)", __FUNCTION__, BT_ERROR_NOT_INITIALIZED);
+ if (is_initialized != true) {
+ BT_ERR("NOT_INITIALIZED(0x%08x)", BT_ERROR_NOT_INITIALIZED);
return BT_ERROR_NOT_INITIALIZED;
}
@@ -138,6 +119,39 @@ bool _bt_check_cb(int events)
return (bt_event_slot_container[events].callback != NULL) ? true : false;
}
+int _bt_le_adapter_init(void)
+{
+ if (is_le_initialized)
+ return BT_ERROR_NONE;
+
+ if (bluetooth_le_register_callback(&__bt_le_event_proxy, NULL) != BLUETOOTH_ERROR_NONE) {
+ BT_ERR("OPERATION_FAILED(0x%08x)", BT_ERROR_OPERATION_FAILED);
+ return BT_ERROR_OPERATION_FAILED;
+ }
+ is_le_initialized = true;
+
+ return BT_ERROR_NONE;
+}
+
+int _bt_le_adapter_deinit(void)
+{
+ if (!is_le_initialized) {
+ BT_ERR("NOT_INITIALIZED(0x%08x)", BT_ERROR_NOT_INITIALIZED);
+ return BT_ERROR_NOT_INITIALIZED;
+ }
+
+ if (!_bt_check_cb(BT_EVENT_LE_STATE_CHANGED) &&
+ !_bt_check_cb(BT_EVENT_LE_DEVICE_DISCOVERY_STATE_CHANGED)) {
+ if (bluetooth_le_unregister_callback() != BLUETOOTH_ERROR_NONE) {
+ BT_ERR("OPERATION_FAILED(0x%08x)", BT_ERROR_OPERATION_FAILED);
+ return BT_ERROR_OPERATION_FAILED;
+ }
+ is_le_initialized = false;
+ }
+
+ return BT_ERROR_NONE;
+}
+
int _bt_get_error_code(int origin_error)
{
switch (origin_error) {
@@ -146,8 +160,9 @@ int _bt_get_error_code(int origin_error)
case BLUETOOTH_ERROR_INVALID_DATA:
case BLUETOOTH_ERROR_INVALID_PARAM:
case BLUETOOTH_ERROR_NOT_CONNECTED:
- case BLUETOOTH_ERROR_NOT_SUPPORT:
return BT_ERROR_INVALID_PARAMETER;
+ case BLUETOOTH_ERROR_NOT_SUPPORT:
+ return BT_ERROR_NOT_SUPPORTED;
case BLUETOOTH_ERROR_MEMORY_ALLOCATION:
case BLUETOOTH_ERROR_OUT_OF_MEMORY:
return BT_ERROR_OUT_OF_MEMORY;
@@ -156,6 +171,9 @@ int _bt_get_error_code(int origin_error)
case BLUETOOTH_ERROR_DEVICE_NOT_ENABLED:
return BT_ERROR_NOT_ENABLED;
case BLUETOOTH_ERROR_DEVICE_ALREADY_ENABLED:
+ case BLUETOOTH_ERROR_ALREADY_INITIALIZED:
+ case BLUETOOTH_ERROR_AGENT_DOES_NOT_EXIST:
+ case BLUETOOTH_ERROR_ALREADY_DEACTIVATED:
return BT_ERROR_ALREADY_DONE;
case BLUETOOTH_ERROR_NOT_PAIRED:
return BT_ERROR_REMOTE_DEVICE_NOT_BONDED;
@@ -174,7 +192,12 @@ int _bt_get_error_code(int origin_error)
return BT_ERROR_REMOTE_DEVICE_NOT_FOUND;
case BLUETOOTH_ERROR_SERVICE_SEARCH_ERROR:
return BT_ERROR_SERVICE_SEARCH_FAILED;
+ case BLUETOOTH_ERROR_PERMISSION_DEINED :
+ return BT_ERROR_PERMISSION_DENIED;
case BLUETOOTH_ERROR_SERVICE_NOT_FOUND:
+ return BT_ERROR_SERVICE_NOT_FOUND;
+ case BLUETOOTH_ERROR_NOT_INITIALIZED:
+ return BT_ERROR_NOT_INITIALIZED;
case BLUETOOTH_ERROR_PARING_FAILED:
case BLUETOOTH_ERROR_MAX_CONNECTION:
case BLUETOOTH_ERROR_ALREADY_CONNECT:
@@ -219,7 +242,9 @@ int _bt_get_bt_device_info_s(bt_device_info_s **dest_dev, bluetooth_device_info_
(*dest_dev)->service_uuid = (char **)malloc(sizeof(char *) * source_dev->service_index);
if ((*dest_dev)->service_uuid != NULL) {
for (i = 0; i < source_dev->service_index; i++) {
- (*dest_dev)->service_uuid[i] = strdup(source_dev->uuids[i]);
+ (*dest_dev)->service_uuid[i] =
+ g_strndup(source_dev->uuids[i],
+ BLUETOOTH_UUID_STRING_MAX - 1);
if ((*dest_dev)->service_uuid[i] != NULL) {
__bt_convert_lower_to_upper((*dest_dev)->service_uuid[i]);
}
@@ -230,9 +255,18 @@ int _bt_get_bt_device_info_s(bt_device_info_s **dest_dev, bluetooth_device_info_
}
(*dest_dev)->service_count = source_dev->service_index;
(*dest_dev)->is_bonded = (bool)source_dev->paired;
- (*dest_dev)->is_connected = (bool)source_dev->connected;
+ (*dest_dev)->is_connected = source_dev->connected != BLUETOOTH_CONNECTED_LINK_NONE ? TRUE : FALSE;
(*dest_dev)->is_authorized = (bool)source_dev->trust;
+ (*dest_dev)->manufacturer_data_len = source_dev->manufacturer_data.data_len;
+ if (source_dev->manufacturer_data.data_len > 0) {
+ (*dest_dev)->manufacturer_data = (char *)malloc(source_dev->manufacturer_data.data_len);
+ memcpy((*dest_dev)->manufacturer_data, source_dev->manufacturer_data.data, source_dev->manufacturer_data.data_len);
+ } else {
+ (*dest_dev)->manufacturer_data = (char *)malloc(1);
+ (*dest_dev)->manufacturer_data[0] = 0;
+ }
+
return BT_ERROR_NONE;
}
@@ -252,11 +286,14 @@ void _bt_free_bt_device_info_s(bt_device_info_s *device_info)
if (device_info->service_uuid != NULL) {
for (i = 0; i < device_info->service_count; i++) {
if (device_info->service_uuid[i] != NULL)
- free(device_info->service_uuid[i]);
+ g_free(device_info->service_uuid[i]);
}
free(device_info->service_uuid);
}
+ if (device_info->manufacturer_data != NULL)
+ free(device_info->manufacturer_data);
+
free(device_info);
device_info = NULL;
}
@@ -265,6 +302,8 @@ int _bt_convert_address_to_string(char **addr_str, bluetooth_device_address_t *a
{
char address[18] = { 0, };
+ BT_CHECK_INPUT_PARAMETER(addr_hex);
+
snprintf(address, 18, "%2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X", addr_hex->addr[0], addr_hex->addr[1], addr_hex->addr[2], addr_hex->addr[3], addr_hex->addr[4], addr_hex->addr[5]);
*addr_str = strdup(address);
@@ -280,9 +319,12 @@ void _bt_convert_address_to_hex(bluetooth_device_address_t *addr_hex, const char
int i = 0;
unsigned int addr[BLUETOOTH_ADDRESS_LENGTH] = { 0, };
+ if (addr_str == NULL || addr_str[0] == '\0')
+ return;
+
i = sscanf(addr_str, "%X:%X:%X:%X:%X:%X", &addr[0], &addr[1], &addr[2], &addr[3], &addr[4], &addr[5]);
if (i != BLUETOOTH_ADDRESS_LENGTH) {
- LOGI("[%s] Invalid format string - %s", __FUNCTION__, addr_str);
+ BT_ERR("Invalid format string - [%s]", addr_str);
}
for (i = 0; i < BLUETOOTH_ADDRESS_LENGTH; i++) {
@@ -325,6 +367,14 @@ char *_bt_convert_error_to_string(int error)
return "REMOTE_DEVICE_NOT_FOUND";
case BT_ERROR_SERVICE_SEARCH_FAILED:
return "SERVICE_SEARCH_FAILED";
+ case BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED:
+ return "REMOTE_DEVICE_NOT_CONNECTED";
+ case BT_ERROR_PERMISSION_DENIED:
+ return "PERMISSION_DENIED";
+ case BT_ERROR_SERVICE_NOT_FOUND:
+ return "SERVICE_NOT_FOUND";
+ case BT_ERROR_NOT_SUPPORTED:
+ return "NOT_SUPPORTD";
default:
return "UNKNOWN";
}
@@ -350,10 +400,11 @@ static int __bt_get_bt_device_sdp_info_s(bt_device_sdp_info_s **dest, bt_sdp_inf
{
int i = 0;
- *dest = (bt_device_sdp_info_s *)malloc(sizeof(bt_device_sdp_info_s));
- if (*dest == NULL) {
+ *dest = (bt_device_sdp_info_s *)g_malloc0(sizeof(bt_device_sdp_info_s));
+
+ /* Fix : NULL_RETURNS */
+ if (*dest == NULL)
return BT_ERROR_OUT_OF_MEMORY;
- }
if (_bt_convert_address_to_string(&((*dest)->remote_address), &(source->device_addr)) != BT_ERROR_NONE) {
__bt_free_bt_device_sdp_info_s(*dest);
@@ -401,10 +452,90 @@ static void __bt_free_bt_device_sdp_info_s(bt_device_sdp_info_s *sdp_info)
free(sdp_info->service_uuid);
}
- free(sdp_info);
+ g_free(sdp_info);
sdp_info = NULL;
}
+static int __bt_get_bt_device_connection_info_s(bt_device_connection_info_s **dest, bt_connection_info_t *source)
+{
+ *dest = (bt_device_connection_info_s *)g_malloc0(sizeof(bt_device_connection_info_s));
+
+ /* Fix : NULL_RETURNS */
+ if (*dest == NULL)
+ return BT_ERROR_OUT_OF_MEMORY;
+
+ if (_bt_convert_address_to_string(&((*dest)->remote_address), &(source->device_addr)) != BT_ERROR_NONE) {
+ __bt_free_bt_device_connection_info_s(*dest);
+ return BT_ERROR_OUT_OF_MEMORY;
+ }
+
+ switch (source->addr_type) {
+ case 0:
+ (*dest)->link = BT_DEVICE_CONNECTION_LINK_BREDR;
+ break;
+ case 1:
+ case 2:
+ (*dest)->link = BT_DEVICE_CONNECTION_LINK_LE;
+ break;
+ default:
+ (*dest)->link = BT_DEVICE_CONNECTION_LINK_BREDR;
+ break;
+ }
+
+ (*dest)->disconn_reason = source->disc_reason;
+
+ return BT_ERROR_NONE;
+}
+
+static bt_gatt_server_read_value_requested_cb __bt_gatt_attribute_get_read_cb(
+ bt_gatt_h service, bt_gatt_h characteristic, void **user_data)
+{
+ gchar *svc_path = (gchar *)service;
+ gchar *chr_path = (gchar *)characteristic;
+ const GSList *gatt_server_list = NULL;
+ const GSList *l1, *l2, *l3;
+
+ gatt_server_list = _bt_gatt_get_server_list();
+
+ for (l1 = gatt_server_list; l1 != NULL; l1 = l1->next) {
+ bt_gatt_server_s *serv = l1->data;
+
+ if (!serv)
+ return NULL;
+
+ for (l2 = serv->services; l2 != NULL; l2 = l2->next) {
+ bt_gatt_service_s *svc = l2->data;
+
+ if (g_strcmp0(svc->path, svc_path) == 0) {
+ for (l3 = svc->characteristics; l3 != NULL; l3 = l3->next) {
+ bt_gatt_characteristic_s *chr = l3->data;
+
+ if (chr && g_strcmp0(chr->path, chr_path) == 0) {
+ if (chr->read_requested_cb) {
+ *user_data = chr->read_requested_user_data;
+ return chr->read_requested_cb;
+ } else
+ return NULL;
+ }
+ }
+ }
+ }
+ }
+ return NULL;
+}
+
+static void __bt_free_bt_device_connection_info_s(bt_device_connection_info_s *conn_info)
+{
+ if (conn_info == NULL)
+ return;
+
+ if (conn_info->remote_address != NULL)
+ free(conn_info->remote_address);
+
+ g_free(conn_info);
+ conn_info = NULL;
+}
+
void _bt_audio_event_proxy(int event, bt_audio_event_param_t *param, void *user_data)
{
bluetooth_event_param_t new_param;
@@ -415,6 +546,28 @@ void _bt_audio_event_proxy(int event, bt_audio_event_param_t *param, void *user_
__bt_event_proxy(event, &new_param, user_data);
}
+#ifdef TIZEN_WEARABLE
+void _bt_hf_event_proxy(int event, bt_hf_event_param_t *param, void *user_data)
+{
+ bluetooth_event_param_t new_param;
+ new_param.event = param->event;
+ new_param.param_data = param->param_data;
+ new_param.result = param->result;
+ new_param.user_data = NULL;
+ __bt_event_proxy(event, &new_param, user_data);
+}
+#endif
+
+void _bt_telephony_event_proxy(int event, telephony_event_param_t *param, void *user_data)
+{
+ bluetooth_event_param_t new_param;
+ new_param.event = param->event;
+ new_param.param_data = param->param_data;
+ new_param.result = param->result;
+ new_param.user_data = NULL;
+ __bt_event_proxy(event, &new_param, user_data);
+}
+
void _bt_avrcp_event_proxy(int event, media_event_param_t *param, void *user_data)
{
bluetooth_event_param_t new_param;
@@ -437,10 +590,15 @@ void _bt_hid_event_proxy(int event, hid_event_param_t *param, void *user_data)
static void __bt_event_proxy(int event, bluetooth_event_param_t *param, void *user_data)
{
+ int call_id;
+ int *avrcp_mode;
+ int *discoverable_timeout;
+ int *adv_handle;
bluetooth_rfcomm_connection_t *connection_ind = NULL;
bluetooth_rfcomm_disconnection_t *disconnection_ind = NULL;
bt_socket_connection_s rfcomm_connection;
bt_device_sdp_info_s *sdp_info = NULL;
+ bt_device_connection_info_s *conn_info = NULL;
bt_adapter_device_discovery_info_s *discovery_info = NULL;
bt_device_info_s *bonded_device = NULL;
bluetooth_rfcomm_connection_request_t *reqeust_ind = NULL;
@@ -448,54 +606,102 @@ static void __bt_event_proxy(int event, bluetooth_event_param_t *param, void *us
bt_obex_server_transfer_info_t *transfer_info = NULL;
bt_opc_transfer_info_t *client_info = NULL;
bluetooth_device_address_t *bd_addr = NULL;
+ telephony_event_callid_t *call_data = NULL;
char *device_addr = NULL;
+#ifdef TIZEN_WEARABLE
+ char *phone_number = NULL;
+#endif
int error_code = BT_ERROR_NONE;
int event_index = -1;
bluetooth_network_device_info_t *dev_info = NULL;
bt_hdp_connected_t *hdp_conn_info = NULL;
bt_hdp_disconnected_t *hdp_disconn_info = NULL;
bt_hdp_data_ind_t *hdp_data_ind = NULL;
+ bt_gatt_char_value_t *char_val = NULL;
+ media_metadata_attributes_t *metadata = NULL;
event_index = __bt_get_cb_index(event);
- if (event_index == -1 || bt_event_slot_container[event_index].callback == NULL) {
- return;
+
+ if (event == BLUETOOTH_EVENT_GATT_CONNECTED) {
+ const GSList *clients = NULL;
+ const GSList *l = NULL;
+ int ret;
+
+ _bt_convert_address_to_string(&device_addr,
+ (bluetooth_device_address_t *)(param->param_data));
+
+ clients = _bt_gatt_get_client_list();
+ for (l = clients; l; l = g_slist_next(l)) {
+ bt_gatt_client_s *client_s = l->data;
+
+ if (!g_strcmp0(client_s->remote_address, device_addr)) {
+ if (client_s->services_discovered == false) {
+ BT_INFO("Matched GATT Client is found");
+ ret = _bt_gatt_client_update_all((bt_gatt_client_h)l->data);
+ if (ret != BT_ERROR_NONE)
+ BT_ERR("bluetooth_gatt_get_primary_services is failed");
+ else
+ client_s->services_discovered = true;
+ }
+ break;
+ }
+ }
+ g_free(device_addr);
+ device_addr = NULL;
}
+ if (event == BLUETOOTH_EVENT_GATT_SERVER_CHARACTERISTIC_VALUE_CHANGED ||
+ event == BLUETOOTH_EVENT_ADVERTISING_STARTED || event == BLUETOOTH_EVENT_ADVERTISING_STOPPED)
+ BT_INFO("NOT use bt_event_slot_container");
+ else if (event_index == -1 || bt_event_slot_container[event_index].callback == NULL)
+ return;
+
memset(&rfcomm_connection, 0x00, sizeof(bt_socket_connection_s));
switch (event) {
case BLUETOOTH_EVENT_ENABLED:
- LOGI("[%s] bt_adapter_state_changed_cb() will be called with BT_ADAPTER_ENABLED", __FUNCTION__);
+ BT_INFO("bt_adapter_state_changed_cb() will be called with BT_ADAPTER_ENABLED");
((bt_adapter_state_changed_cb) bt_event_slot_container[event_index].callback)
(_bt_get_error_code(param->result), BT_ADAPTER_ENABLED, bt_event_slot_container[event_index].user_data);
break;
case BLUETOOTH_EVENT_DISABLED:
- LOGI("[%s] bt_adapter_state_changed_cb() will be called with BT_ADAPTER_DISABLED", __FUNCTION__);
+ BT_INFO("bt_adapter_state_changed_cb() will be called with BT_ADAPTER_DISABLED");
((bt_adapter_state_changed_cb) bt_event_slot_container[event_index].callback)
(_bt_get_error_code(param->result), BT_ADAPTER_DISABLED, bt_event_slot_container[event_index].user_data);
break;
case BLUETOOTH_EVENT_LOCAL_NAME_CHANGED:
- LOGI("[%s] bt_adapter_name_changed_cb() will be called", __FUNCTION__);
+ BT_INFO("bt_adapter_name_changed_cb() will be called");
((bt_adapter_name_changed_cb)bt_event_slot_container[event_index].callback)
((char *)(param->param_data), bt_event_slot_container[event_index].user_data);
break;
case BLUETOOTH_EVENT_DISCOVERABLE_MODE_CHANGED:
- LOGI("[%s] bt_adapter_visibility_mode_changed_cb() will be called", __FUNCTION__);
+ BT_INFO("bt_adapter_visibility_mode_changed_cb() will be called");
((bt_adapter_visibility_mode_changed_cb)bt_event_slot_container[event_index].callback)
(_bt_get_error_code(param->result), _bt_get_bt_visibility_mode_e(*(bt_adapter_visibility_mode_e *)(param->param_data)), bt_event_slot_container[event_index].user_data);
break;
+ case BLUETOOTH_EVENT_DISCOVERABLE_TIMEOUT_CHANGED:
+ BT_INFO("bt_adapter_visibility_duration_changed_cb() will be called");
+ discoverable_timeout = (int *)(param->param_data);
+ ((bt_adapter_visibility_duration_changed_cb)bt_event_slot_container[event_index].callback)
+ (*discoverable_timeout, bt_event_slot_container[event_index].user_data);
+ break;
+ case BLUETOOTH_EVENT_CONNECTABLE_CHANGED:
+ BT_INFO("bt_adapter_connectable_changed_cb() will be called");
+ ((bt_adapter_connectable_changed_cb)bt_event_slot_container[event_index].callback)
+ (_bt_get_error_code(param->result), *(bool *)(param->param_data), bt_event_slot_container[event_index].user_data);
+ break;
case BLUETOOTH_EVENT_DISCOVERY_STARTED:
- LOGI("[%s] bt_adapter_device_discovery_state_changed_cb() will be called with BT_ADAPTER_DEVICE_DISCOVERY_STARTED", __FUNCTION__);
+ BT_INFO("bt_adapter_device_discovery_state_changed_cb() will be called with BT_ADAPTER_DEVICE_DISCOVERY_STARTED");
((bt_adapter_device_discovery_state_changed_cb) bt_event_slot_container[event_index].callback)
(_bt_get_error_code(param->result), BT_ADAPTER_DEVICE_DISCOVERY_STARTED, NULL, bt_event_slot_container[event_index].user_data);
break;
case BLUETOOTH_EVENT_DISCOVERY_FINISHED:
- LOGI("[%s] bt_adapter_device_discovery_state_changed_cb() will be called with BT_ADAPTER_DEVICE_DISCOVERY_FINISHED", __FUNCTION__);
+ BT_INFO("bt_adapter_device_discovery_state_changed_cb() will be called with BT_ADAPTER_DEVICE_DISCOVERY_FINISHED");
((bt_adapter_device_discovery_state_changed_cb)bt_event_slot_container[event_index].callback)
(_bt_get_error_code(param->result), BT_ADAPTER_DEVICE_DISCOVERY_FINISHED, NULL, bt_event_slot_container[event_index].user_data);
break;
case BLUETOOTH_EVENT_REMOTE_DEVICE_NAME_UPDATED:
- LOGI("[%s] bt_adapter_device_discovery_state_changed_cb() will be called with BT_ADAPTER_DEVICE_DISCOVERY_FOUND", __FUNCTION__);
+ BT_INFO("bt_adapter_device_discovery_state_changed_cb() will be called with BT_ADAPTER_DEVICE_DISCOVERY_FOUND");
if (__bt_get_bt_adapter_device_discovery_info_s(&discovery_info, (bluetooth_device_info_t *)(param->param_data)) == BT_ERROR_NONE) {
((bt_adapter_device_discovery_state_changed_cb)bt_event_slot_container[event_index].callback)
(_bt_get_error_code(param->result), BT_ADAPTER_DEVICE_DISCOVERY_FOUND, discovery_info, bt_event_slot_container[event_index].user_data);
@@ -506,7 +712,7 @@ static void __bt_event_proxy(int event, bluetooth_event_param_t *param, void *us
}
break;
case BLUETOOTH_EVENT_BONDING_FINISHED:
- LOGI("[%s] bt_device_bond_created_cb() will be called", __FUNCTION__);
+ BT_INFO("bt_device_bond_created_cb() will be called");
_bt_get_bt_device_info_s(&bonded_device, (bluetooth_device_info_t *)(param->param_data));
((bt_device_bond_created_cb)bt_event_slot_container[event_index].callback)
@@ -515,7 +721,7 @@ static void __bt_event_proxy(int event, bluetooth_event_param_t *param, void *us
bonded_device = NULL;
break;
case BLUETOOTH_EVENT_BONDED_DEVICE_REMOVED:
- LOGI("[%s] bt_device_bond_destroyed_cb() will be called", __FUNCTION__);
+ BT_INFO("bt_device_bond_destroyed_cb() will be called");
_bt_convert_address_to_string(&device_addr, (bluetooth_device_address_t *)(param->param_data));
((bt_device_bond_destroyed_cb)bt_event_slot_container[event_index].callback)
(_bt_get_error_code(param->result), device_addr, bt_event_slot_container[event_index].user_data);
@@ -524,25 +730,37 @@ static void __bt_event_proxy(int event, bluetooth_event_param_t *param, void *us
device_addr = NULL;
break;
case BLUETOOTH_EVENT_DEVICE_AUTHORIZED:
- LOGI("[%s] bt_device_authorization_changed_cb() will be called with BT_DEVICE_AUTHORIZED", __FUNCTION__);
+ BT_INFO("bt_device_authorization_changed_cb() will be called with BT_DEVICE_AUTHORIZED");
_bt_convert_address_to_string(&device_addr, (bluetooth_device_address_t *)(param->param_data));
((bt_device_authorization_changed_cb)bt_event_slot_container[event_index].callback)
(BT_DEVICE_AUTHORIZED, device_addr, bt_event_slot_container[event_index].user_data);
if (device_addr != NULL)
free(device_addr);
- device_addr = NULL;
break;
case BLUETOOTH_EVENT_DEVICE_UNAUTHORIZED:
- LOGI("[%s] bt_device_authorization_changed_cb() will be called with BT_DEVICE_UNAUTHORIZED", __FUNCTION__);
+ BT_INFO("bt_device_authorization_changed_cb() will be called with BT_DEVICE_UNAUTHORIZED");
_bt_convert_address_to_string(&device_addr, (bluetooth_device_address_t *)(param->param_data));
((bt_device_authorization_changed_cb)bt_event_slot_container[event_index].callback)
(BT_DEVICE_UNAUTHORIZED, device_addr, bt_event_slot_container[event_index].user_data);
if (device_addr != NULL)
free(device_addr);
- device_addr = NULL;
+ break;
+ case BLUETOOTH_EVENT_DEVICE_CONNECTED:
+ BT_INFO("bt_device_connection_state_changed_cb() will be called");
+ __bt_get_bt_device_connection_info_s(&conn_info, (bt_connection_info_t *)(param->param_data));
+ ((bt_device_connection_state_changed_cb)bt_event_slot_container[event_index].callback)
+ (true, conn_info, bt_event_slot_container[event_index].user_data);
+ __bt_free_bt_device_connection_info_s(conn_info);
+ break;
+ case BLUETOOTH_EVENT_DEVICE_DISCONNECTED:
+ BT_INFO("bt_device_connection_state_changed_cb() will be called");
+ __bt_get_bt_device_connection_info_s(&conn_info, (bt_connection_info_t *)(param->param_data));
+ ((bt_device_connection_state_changed_cb)bt_event_slot_container[event_index].callback)
+ (false, conn_info, bt_event_slot_container[event_index].user_data);
+ __bt_free_bt_device_connection_info_s(conn_info);
break;
case BLUETOOTH_EVENT_SERVICE_SEARCHED:
- LOGI("[%s] bt_device_service_searched_cb() will be called", __FUNCTION__);
+ BT_INFO("bt_device_service_searched_cb() will be called");
__bt_get_bt_device_sdp_info_s(&sdp_info, (bt_sdp_info_t *)(param->param_data));
error_code = _bt_get_error_code(param->result);
// In service search, BT_ERROR_SERVICE_SEARCH_FAILED is returned instead of BT_ERROR_OPERATION_FAILED.
@@ -553,27 +771,32 @@ static void __bt_event_proxy(int event, bluetooth_event_param_t *param, void *us
__bt_free_bt_device_sdp_info_s(sdp_info);
break;
case BLUETOOTH_EVENT_RFCOMM_DATA_RECEIVED:
- LOGI("[%s] bt_socket_data_received_cb() will be called", __FUNCTION__);
+ /*BT_INFO("bt_socket_data_received_cb() will be * called"); */
((bt_socket_data_received_cb)bt_event_slot_container[event_index].callback)
((bt_socket_received_data_s *)(param->param_data), bt_event_slot_container[event_index].user_data);
break;
case BLUETOOTH_EVENT_RFCOMM_CONNECTED:
- LOGI("[%s] bt_socket_connection_state_changed_cb() will be called with BT_SOCKET_CONNECTED", __FUNCTION__);
+ BT_INFO("bt_socket_connection_state_changed_cb() will be called with BT_SOCKET_CONNECTED");
if (param->result == BLUETOOTH_ERROR_INVALID_PARAM)
error_code = BT_ERROR_OPERATION_FAILED;
else
error_code = _bt_get_error_code(param->result);
connection_ind = (bluetooth_rfcomm_connection_t *)(param->param_data);
- rfcomm_connection.socket_fd = connection_ind->socket_fd;
- rfcomm_connection.local_role = connection_ind->device_role;
- if (connection_ind->uuid) {
- rfcomm_connection.service_uuid = strdup(connection_ind->uuid);
- LOGI("uuid: [%s]", rfcomm_connection.service_uuid);
- }
+ if (connection_ind) {
+ rfcomm_connection.socket_fd = connection_ind->socket_fd;
+ rfcomm_connection.local_role = connection_ind->device_role;
+ rfcomm_connection.server_fd = connection_ind->server_id;
- _bt_convert_address_to_string(&(rfcomm_connection.remote_address), &(connection_ind->device_addr));
+ if (strlen(connection_ind->uuid) > 0) {
+ rfcomm_connection.service_uuid = strdup(connection_ind->uuid);
+ BT_INFO("uuid: [%s]", rfcomm_connection.service_uuid);
+ }
+
+ _bt_convert_address_to_string(&(rfcomm_connection.remote_address),
+ &(connection_ind->device_addr));
+ }
((bt_socket_connection_state_changed_cb)bt_event_slot_container[event_index].callback)
(error_code, BT_SOCKET_CONNECTED, &rfcomm_connection, bt_event_slot_container[event_index].user_data);
@@ -590,18 +813,23 @@ static void __bt_event_proxy(int event, bluetooth_event_param_t *param, void *us
break;
case BLUETOOTH_EVENT_RFCOMM_DISCONNECTED:
- LOGI("[%s] bt_socket_connection_state_changed_cb() will be called with BT_SOCKET_DISCONNECTED", __FUNCTION__);
+ BT_INFO("bt_socket_connection_state_changed_cb() will be called with BT_SOCKET_DISCONNECTED");
disconnection_ind = (bluetooth_rfcomm_disconnection_t *)(param->param_data);
- rfcomm_connection.socket_fd = disconnection_ind->socket_fd;
- rfcomm_connection.local_role = disconnection_ind->device_role;
- if (disconnection_ind->uuid) {
- rfcomm_connection.service_uuid = strdup(disconnection_ind->uuid);
- LOGI("uuid: [%s]", rfcomm_connection.service_uuid);
+ if (disconnection_ind) {
+ rfcomm_connection.socket_fd = disconnection_ind->socket_fd;
+ rfcomm_connection.local_role = disconnection_ind->device_role;
+
+ if (strlen(disconnection_ind->uuid) > 0) {
+ rfcomm_connection.service_uuid = strdup(disconnection_ind->uuid);
+ BT_INFO("uuid: [%s]", rfcomm_connection.service_uuid);
+ }
+
+ _bt_convert_address_to_string(&(rfcomm_connection.remote_address),
+ &(disconnection_ind->device_addr));
}
- _bt_convert_address_to_string(&(rfcomm_connection.remote_address), &(disconnection_ind->device_addr));
((bt_socket_connection_state_changed_cb)bt_event_slot_container[event_index].callback)
(_bt_get_error_code(param->result), BT_SOCKET_DISCONNECTED, &rfcomm_connection, bt_event_slot_container[event_index].user_data);
@@ -617,7 +845,7 @@ static void __bt_event_proxy(int event, bluetooth_event_param_t *param, void *us
break;
case BLUETOOTH_EVENT_RFCOMM_AUTHORIZE:
- LOGI("[%s] bt_socket_connection_requested_cb() will be called", __FUNCTION__);
+ BT_INFO("bt_socket_connection_requested_cb() will be called");
reqeust_ind = (bluetooth_rfcomm_connection_request_t *)(param->param_data);
_bt_convert_address_to_string(&device_addr, &(reqeust_ind->device_addr));
((bt_socket_connection_requested_cb)bt_event_slot_container[event_index].callback)
@@ -627,7 +855,7 @@ static void __bt_event_proxy(int event, bluetooth_event_param_t *param, void *us
free(device_addr);
break;
case BLUETOOTH_EVENT_OBEX_SERVER_CONNECTION_AUTHORIZE:
- LOGI("[%s] bt_opp_server_connection_requested_cb() will be called", __FUNCTION__);
+ BT_INFO("bt_opp_server_connection_requested_cb() will be called");
bd_addr = (bluetooth_device_address_t *)(param->param_data);
_bt_convert_address_to_string(&device_addr, bd_addr);
((bt_opp_server_connection_requested_cb)bt_event_slot_container[event_index].callback)
@@ -637,28 +865,28 @@ static void __bt_event_proxy(int event, bluetooth_event_param_t *param, void *us
free(device_addr);
break;
case BLUETOOTH_EVENT_OBEX_SERVER_TRANSFER_AUTHORIZE:
- LOGI("[%s] bt_opp_server_push_requested_cb() will be called", __FUNCTION__);
+ BT_INFO("bt_opp_server_push_requested_cb() will be called");
auth_info = (bt_obex_server_authorize_into_t *)(param->param_data);
((bt_opp_server_push_requested_cb)bt_event_slot_container[event_index].callback)
(auth_info->filename, auth_info->length, bt_event_slot_container[event_index].user_data);
break;
case BLUETOOTH_EVENT_OBEX_SERVER_TRANSFER_STARTED:
- LOGI("[%s] bt_opp_server_transfer_started_cb() will be called", __FUNCTION__);
+ BT_INFO("bt_opp_server_transfer_started_cb() will be called");
transfer_info = (bt_obex_server_transfer_info_t *)(param->param_data);
((bt_opp_server_transfer_progress_cb)bt_event_slot_container[event_index].callback)
(transfer_info->filename, transfer_info->file_size, 0, bt_event_slot_container[event_index].user_data);
break;
case BLUETOOTH_EVENT_OBEX_SERVER_TRANSFER_PROGRESS:
- LOGI("[%s] bt_opp_server_transfer_in_progress_cb() will be called", __FUNCTION__);
+ BT_INFO("bt_opp_server_transfer_in_progress_cb() will be called");
transfer_info = (bt_obex_server_transfer_info_t *)(param->param_data);
((bt_opp_server_transfer_progress_cb)bt_event_slot_container[event_index].callback)
(transfer_info->filename, transfer_info->file_size, transfer_info->percentage, bt_event_slot_container[event_index].user_data);
break;
case BLUETOOTH_EVENT_OBEX_SERVER_TRANSFER_COMPLETED:
- LOGI("[%s] bt_opp_server_transfer_completed_cb() will be called", __FUNCTION__);
+ BT_INFO("bt_opp_server_transfer_completed_cb() will be called");
transfer_info = (bt_obex_server_transfer_info_t *)(param->param_data);
((bt_opp_server_transfer_finished_cb)bt_event_slot_container[event_index].callback)
@@ -667,115 +895,129 @@ static void __bt_event_proxy(int event, bluetooth_event_param_t *param, void *us
break;
case BLUETOOTH_EVENT_OPC_CONNECTED:
- LOGI("[%s] bt_opp_client_push_responded_cb() will be called", __FUNCTION__);
+ BT_INFO("bt_opp_client_push_responded_cb() will be called");
bd_addr = (bluetooth_device_address_t *)(param->param_data);
_bt_convert_address_to_string(&device_addr, bd_addr);
- LOGI("address: %s", device_addr);
-
((bt_opp_client_push_responded_cb)bt_event_slot_container[event_index].callback)
(_bt_get_error_code(param->result), device_addr, bt_event_slot_container[event_index].user_data);
+
+ if (device_addr != NULL)
+ free(device_addr);
break;
case BLUETOOTH_EVENT_OPC_DISCONNECTED:
- LOGI("[%s] bt_opp_client_push_finished_cb() will be called", __FUNCTION__);
+ BT_INFO("bt_opp_client_push_finished_cb() will be called");
bd_addr = (bluetooth_device_address_t *)(param->param_data);
_bt_convert_address_to_string(&device_addr, bd_addr);
- LOGI("address: %s", device_addr);
-
((bt_opp_client_push_finished_cb)bt_event_slot_container[event_index].callback)
(_bt_get_error_code(param->result), device_addr, bt_event_slot_container[event_index].user_data);
+
+ if (device_addr != NULL)
+ free(device_addr);
break;
case BLUETOOTH_EVENT_OPC_TRANSFER_STARTED:
- LOGI("[%s] bt_opp_client_transfer_started_cb() will be called", __FUNCTION__);
- client_info = (bt_opc_transfer_info_t *)(param->param_data);
- ((bt_opp_client_push_progress_cb)bt_event_slot_container[event_index].callback)
- (client_info->filename, client_info->size, 0, bt_event_slot_container[event_index].user_data);
+ BT_INFO("BLUETOOTH_EVENT_OPC_TRANSFER_STARTED");
+ /* This event don't be used in CAPI */
break;
case BLUETOOTH_EVENT_OPC_TRANSFER_PROGRESS:
- LOGI("[%s] bt_opp_client_transfer_in_progress_cb() will be called", __FUNCTION__);
+ BT_INFO("bt_opp_client_transfer_in_progress_cb() will be called");
client_info = (bt_opc_transfer_info_t *)(param->param_data);
((bt_opp_client_push_progress_cb)bt_event_slot_container[event_index].callback)
(client_info->filename, client_info->size, client_info->percentage, bt_event_slot_container[event_index].user_data);
break;
case BLUETOOTH_EVENT_OPC_TRANSFER_COMPLETE:
- LOGI("[%s] bt_opp_client_push_progress_cb() will be called", __FUNCTION__);
- client_info = (bt_opc_transfer_info_t *)(param->param_data);
-
- if (param->result != BLUETOOTH_ERROR_NONE) {
- LOGI("[%s] bt_opp_client_push_finished_cb() will be called", __FUNCTION__);
- break;
- }
-
- ((bt_opp_client_push_progress_cb)bt_event_slot_container[event_index].callback)
- (client_info->filename, client_info->size, 100, bt_event_slot_container[event_index].user_data);
+ BT_INFO("BLUETOOTH_EVENT_OPC_TRANSFER_COMPLETE");
+ /* This event don't be used in CAPI */
break;
case BLUETOOTH_EVENT_NETWORK_SERVER_CONNECTED:
- LOGI("[%s] BLUETOOTH_EVENT_NETWORK_SERVER_CONNECTED", __FUNCTION__);
+ BT_INFO("BLUETOOTH_EVENT_NETWORK_SERVER_CONNECTED");
dev_info = (bluetooth_network_device_info_t *)(param->param_data);
if (param->result != BLUETOOTH_ERROR_NONE) {
- LOGI("[%s]BLUETOOTH_EVENT_NETWORK_SERVER_CONNECTED", __FUNCTION__);
+ BT_ERR("Fail to connect the network server");
}
_bt_convert_address_to_string(&device_addr, &dev_info->device_address);
((bt_nap_connection_state_changed_cb)bt_event_slot_container[event_index].callback)
(TRUE, device_addr, dev_info->interface_name, bt_event_slot_container[event_index].user_data);
+
+ if (device_addr != NULL)
+ free(device_addr);
break;
case BLUETOOTH_EVENT_NETWORK_SERVER_DISCONNECTED:
- LOGI("[%s] BLUETOOTH_EVENT_NETWORK_SERVER_DISCONNECTED", __FUNCTION__);
+ BT_INFO("BLUETOOTH_EVENT_NETWORK_SERVER_DISCONNECTED");
dev_info = (bluetooth_network_device_info_t *)(param->param_data);
if (param->result != BLUETOOTH_ERROR_NONE) {
- LOGI("[%s]BLUETOOTH_EVENT_NETWORK_SERVER_DISCONNECTED", __FUNCTION__);
+ BT_ERR("Fail to disconnect the network server");
}
_bt_convert_address_to_string(&device_addr, &dev_info->device_address);
((bt_nap_connection_state_changed_cb)bt_event_slot_container[event_index].callback)
(FALSE, device_addr, dev_info->interface_name, bt_event_slot_container[event_index].user_data);
+
+ if (device_addr != NULL)
+ free(device_addr);
break;
case BLUETOOTH_EVENT_NETWORK_DISCONNECTED:
- LOGI("[%s] Network callback will be", __FUNCTION__);
+ BT_INFO("BLUETOOTH_EVENT_NETWORK_DISCONNECTED");
+ bd_addr = (bluetooth_device_address_t *)(param->param_data);
+ _bt_convert_address_to_string(&device_addr, bd_addr);
+
((bt_panu_connection_state_changed_cb)bt_event_slot_container[event_index].callback)
- (_bt_get_error_code(param->result), FALSE, NULL, BLUETOOTH_NETWORK_NAP_ROLE,
+ (_bt_get_error_code(param->result), FALSE, device_addr, BLUETOOTH_NETWORK_NAP_ROLE,
bt_event_slot_container[event_index].user_data);
+ if (device_addr != NULL)
+ free(device_addr);
break;
case BLUETOOTH_EVENT_NETWORK_CONNECTED:
- LOGI("[%s] Network callback will be ", __FUNCTION__);
+ BT_INFO("BLUETOOTH_EVENT_NETWORK_CONNECTED");
+ bd_addr = (bluetooth_device_address_t *)(param->param_data);
+ _bt_convert_address_to_string(&device_addr, bd_addr);
+
((bt_panu_connection_state_changed_cb)bt_event_slot_container[event_index].callback)
- (_bt_get_error_code(param->result), TRUE, NULL, BLUETOOTH_NETWORK_NAP_ROLE,
+ (_bt_get_error_code(param->result), TRUE, device_addr, BLUETOOTH_NETWORK_NAP_ROLE,
bt_event_slot_container[event_index].user_data);
+ if (device_addr != NULL)
+ free(device_addr);
break;
case BLUETOOTH_EVENT_HDP_CONNECTED:
- LOGI("[%s] HDP Connected ", __FUNCTION__);
+ BT_INFO("HDP Connected ");
hdp_conn_info = (bt_hdp_connected_t *)(param->param_data);
_bt_convert_address_to_string(&device_addr, &hdp_conn_info->device_address);
((bt_hdp_connected_cb)bt_event_slot_container[event_index].callback)
(_bt_get_error_code(param->result), device_addr, hdp_conn_info->app_handle,
hdp_conn_info->type, hdp_conn_info->channel_id,
bt_event_slot_container[event_index].user_data);
+
+ if (device_addr != NULL)
+ free(device_addr);
break;
case BLUETOOTH_EVENT_HDP_DISCONNECTED:
- LOGI("[%s] HDP disconnected callback will be ", __FUNCTION__);
+ BT_INFO("HDP disconnected callback will be ");
hdp_disconn_info = (bt_hdp_disconnected_t *)(param->param_data);
_bt_convert_address_to_string(&device_addr, &hdp_disconn_info->device_address);
((bt_hdp_disconnected_cb)bt_event_slot_container[event_index].callback)
(_bt_get_error_code(param->result), device_addr,
hdp_disconn_info->channel_id, bt_event_slot_container[event_index].user_data);
+
+ if (device_addr != NULL)
+ free(device_addr);
break;
case BLUETOOTH_EVENT_HDP_DATA_RECEIVED:
- LOGI("[%s] HDP data recieved callback will be ", __FUNCTION__);
+ BT_INFO("HDP data recieved callback will be ");
hdp_data_ind = (bt_hdp_data_ind_t *)(param->param_data);
if (param->result != BLUETOOTH_ERROR_NONE) {
- LOGI("[%s] BLUETOOTH_EVENT_HDP_DATA_RECEIVED will be called", __FUNCTION__);
+ BT_ERR("Fail to receive HDP data");
}
((bt_hdp_data_received_cb)bt_event_slot_container[event_index].callback)
@@ -783,45 +1025,114 @@ static void __bt_event_proxy(int event, bluetooth_event_param_t *param, void *us
bt_event_slot_container[event_index].user_data);
break;
case BLUETOOTH_EVENT_AG_CONNECTED:
- LOGI("[%s] BLUETOOTH_EVENT_AG_CONNECTED ", __FUNCTION__);
+ BT_INFO("BLUETOOTH_EVENT_AG_CONNECTED ");
device_addr = (char *)(param->param_data);
((bt_audio_connection_state_changed_cb)bt_event_slot_container[event_index].callback)
(_bt_get_error_code(param->result), TRUE, device_addr, BT_AUDIO_PROFILE_TYPE_HSP_HFP,
bt_event_slot_container[event_index].user_data);
break;
case BLUETOOTH_EVENT_AG_DISCONNECTED:
- LOGI("[%s] BLUETOOTH_EVENT_AG_DISCONNECTED ", __FUNCTION__);
+ BT_INFO("BLUETOOTH_EVENT_AG_DISCONNECTED ");
device_addr = (char *)(param->param_data);
((bt_audio_connection_state_changed_cb)bt_event_slot_container[event_index].callback)
(_bt_get_error_code(param->result), FALSE, device_addr, BT_AUDIO_PROFILE_TYPE_HSP_HFP,
bt_event_slot_container[event_index].user_data);
break;
+ case BLUETOOTH_EVENT_TELEPHONY_AUDIO_CONNECTED:
+ BT_INFO("BLUETOOTH_EVENT_TELEPHONY_AUDIO_CONNECTED ");
+ ((bt_ag_sco_state_changed_cb)bt_event_slot_container[event_index].callback)
+ (_bt_get_error_code(param->result), TRUE,
+ bt_event_slot_container[event_index].user_data);
+ break;
+ case BLUETOOTH_EVENT_TELEPHONY_AUDIO_DISCONNECTED:
+ BT_INFO("BLUETOOTH_EVENT_TELEPHONY_AUDIO_DISCONNECTED ");
+ ((bt_ag_sco_state_changed_cb)bt_event_slot_container[event_index].callback)
+ (_bt_get_error_code(param->result), FALSE,
+ bt_event_slot_container[event_index].user_data);
+ break;
+ case BLUETOOTH_EVENT_TELEPHONY_ANSWER_CALL:
+ call_data = (telephony_event_callid_t *)param->param_data;
+ call_id = call_data->callid;
+ BT_INFO("BLUETOOTH_EVENT_TELEPHONY_ANSWER_CALL ");
+ ((bt_ag_call_handling_event_cb)bt_event_slot_container[event_index].callback)
+ (BT_AG_CALL_HANDLING_EVENT_ANSWER, call_id,
+ bt_event_slot_container[event_index].user_data);
+ break;
+ case BLUETOOTH_EVENT_TELEPHONY_RELEASE_CALL:
+ call_data = (telephony_event_callid_t *)param->param_data;
+ call_id = call_data->callid;
+ BT_INFO("BLUETOOTH_EVENT_TELEPHONY_RELEASE_CALL ");
+ ((bt_ag_call_handling_event_cb)bt_event_slot_container[event_index].callback)
+ (BT_AG_CALL_HANDLING_EVENT_RELEASE, call_id,
+ bt_event_slot_container[event_index].user_data);
+ break;
+ case BLUETOOTH_EVENT_TELEPHONY_REJECT_CALL:
+ call_data = (telephony_event_callid_t *)param->param_data;
+ call_id = call_data->callid;
+ BT_INFO("BLUETOOTH_EVENT_TELEPHONY_REJECT_CALL ");
+ ((bt_ag_call_handling_event_cb)bt_event_slot_container[event_index].callback)
+ (BT_AG_CALL_HANDLING_EVENT_REJECT, call_id,
+ bt_event_slot_container[event_index].user_data);
+ break;
+ case BLUETOOTH_EVENT_TELEPHONY_CHLD_0_RELEASE_ALL_HELD_CALL:
+ BT_INFO("BLUETOOTH_EVENT_TELEPHONY_CHLD_0_RELEASE_ALL_HELD_CALL ");
+ ((bt_ag_multi_call_handling_event_cb)bt_event_slot_container[event_index].callback)
+ (BT_AG_MULTI_CALL_HANDLING_EVENT_RELEASE_HELD_CALLS,
+ bt_event_slot_container[event_index].user_data);
+ break;
+ case BLUETOOTH_EVENT_TELEPHONY_CHLD_1_RELEASE_ALL_ACTIVE_CALL:
+ BT_INFO("BLUETOOTH_EVENT_TELEPHONY_CHLD_1_RELEASE_ALL_ACTIVE_CALL ");
+ ((bt_ag_multi_call_handling_event_cb)bt_event_slot_container[event_index].callback)
+ (BT_AG_MULTI_CALL_HANDLING_EVENT_RELEASE_ACTIVE_CALLS,
+ bt_event_slot_container[event_index].user_data);
+ break;
+ case BLUETOOTH_EVENT_TELEPHONY_CHLD_2_ACTIVE_HELD_CALL:
+ BT_INFO("BLUETOOTH_EVENT_TELEPHONY_CHLD_2_ACTIVE_HELD_CALL ");
+ ((bt_ag_multi_call_handling_event_cb)bt_event_slot_container[event_index].callback)
+ (BT_AG_MULTI_CALL_HANDLING_EVENT_ACTIVATE_HELD_CALL,
+ bt_event_slot_container[event_index].user_data);
+ break;
+ case BLUETOOTH_EVENT_TELEPHONY_CHLD_3_MERGE_CALL:
+ BT_INFO("BLUETOOTH_EVENT_TELEPHONY_CHLD_3_MERGE_CALL ");
+ ((bt_ag_multi_call_handling_event_cb)bt_event_slot_container[event_index].callback)
+ (BT_AG_MULTI_CALL_HANDLING_EVENT_MERGE_CALLS,
+ bt_event_slot_container[event_index].user_data);
+ break;
+ case BLUETOOTH_EVENT_TELEPHONY_CHLD_4_EXPLICIT_CALL_TRANSFER:
+ BT_INFO("BLUETOOTH_EVENT_TELEPHONY_CHLD_4_EXPLICIT_CALL_TRANSFER ");
+ ((bt_ag_multi_call_handling_event_cb)bt_event_slot_container[event_index].callback)
+ (BT_AG_MULTI_CALL_HANDLING_EVENT_EXPLICIT_CALL_TRANSFER,
+ bt_event_slot_container[event_index].user_data);
+ break;
+ case BLUETOOTH_EVENT_TELEPHONY_SEND_DTMF: {
+ telephony_event_dtmf_t *call_data = param->param_data;
+
+ BT_INFO("BLUETOOTH_EVENT_TELEPHONY_SEND_DTMF ");
+ ((bt_ag_dtmf_transmitted_cb)bt_event_slot_container[event_index].callback)
+ (call_data->dtmf, bt_event_slot_container[event_index].user_data);
+ break;
+ }
+
case BLUETOOTH_EVENT_AG_SPEAKER_GAIN:
- LOGI("[%s] BLUETOOTH_EVENT_AG_SPEAKER_GAIN", __FUNCTION__);
+ BT_INFO("BLUETOOTH_EVENT_AG_SPEAKER_GAIN");
int *spk_gain = (int *)(param->param_data);
- if (param->result != BLUETOOTH_ERROR_NONE) {
- LOGI("[%s] BLUETOOTH_EVENT_AG_SPEAKER_GAIN will be called", __FUNCTION__);
- }
((bt_ag_speaker_gain_changed_cb)bt_event_slot_container[event_index].callback)
- (NULL, *spk_gain, bt_event_slot_container[event_index].user_data);
+ (*spk_gain, bt_event_slot_container[event_index].user_data);
break;
case BLUETOOTH_EVENT_AG_MIC_GAIN:
- LOGI("[%s] BLUETOOTH_EVENT_AG_MIC_GAIN", __FUNCTION__);
+ BT_INFO("BLUETOOTH_EVENT_AG_MIC_GAIN");
int *mik_gain = (int *)(param->param_data);
- if (param->result != BLUETOOTH_ERROR_NONE) {
- LOGI("[%s] BLUETOOTH_EVENT_AG_MIC_GAIN will be called", __FUNCTION__);
- }
((bt_ag_microphone_gain_changed_cb)bt_event_slot_container[event_index].callback)
- (NULL, *mik_gain , bt_event_slot_container[event_index].user_data);
+ (*mik_gain, bt_event_slot_container[event_index].user_data);
break;
case BLUETOOTH_EVENT_AG_AUDIO_CONNECTED:
- LOGI("[%s] BLUETOOTH_EVENT_AG_AUDIO_CONNECTED", __FUNCTION__);
+ BT_INFO("BLUETOOTH_EVENT_AG_AUDIO_CONNECTED");
((bt_audio_connection_state_changed_cb)bt_event_slot_container[event_index].callback)
(_bt_get_error_code(param->result), TRUE, NULL, BT_AUDIO_PROFILE_TYPE_HSP_HFP,
bt_event_slot_container[event_index].user_data);
break;
case BLUETOOTH_EVENT_AG_AUDIO_DISCONNECTED:
- LOGI("[%s] BLUETOOTH_EVENT_AG_AUDIO_DISCONNECTED", __FUNCTION__);
+ BT_INFO("BLUETOOTH_EVENT_AG_AUDIO_DISCONNECTED");
device_addr = (char *)(param->param_data);
((bt_audio_connection_state_changed_cb)bt_event_slot_container[event_index].callback)
@@ -829,33 +1140,679 @@ static void __bt_event_proxy(int event, bluetooth_event_param_t *param, void *us
bt_event_slot_container[event_index].user_data);
break;
case BLUETOOTH_EVENT_AV_CONNECTED:
- LOGI("[%s] BLUETOOTH_EVENT_AV_CONNECTED ", __FUNCTION__);
+ BT_INFO("BLUETOOTH_EVENT_AV_CONNECTED ");
device_addr = (char *)(param->param_data);
((bt_audio_connection_state_changed_cb)bt_event_slot_container[event_index].callback)
(_bt_get_error_code(param->result), TRUE, device_addr, BT_AUDIO_PROFILE_TYPE_A2DP,
bt_event_slot_container[event_index].user_data);
break;
case BLUETOOTH_EVENT_AV_DISCONNECTED:
- LOGI("[%s] BLUETOOTH_EVENT_Av_DISCONNECTED ", __FUNCTION__);
+ BT_INFO("BLUETOOTH_EVENT_Av_DISCONNECTED ");
device_addr = (char *)(param->param_data);
((bt_audio_connection_state_changed_cb)bt_event_slot_container[event_index].callback)
(_bt_get_error_code(param->result), FALSE, device_addr, BT_AUDIO_PROFILE_TYPE_A2DP,
bt_event_slot_container[event_index].user_data);
break;
+ case BLUETOOTH_EVENT_AVRCP_CONNECTED:
+ BT_INFO("BLUETOOTH_EVENT_AVRCP_CONNECTED ");
+ device_addr = (char *)(param->param_data);
+ ((bt_avrcp_target_connection_state_changed_cb)bt_event_slot_container[event_index].callback)
+ (TRUE, device_addr, bt_event_slot_container[event_index].user_data);
+ break;
+ case BLUETOOTH_EVENT_AVRCP_DISCONNECTED:
+ BT_INFO("BLUETOOTH_EVENT_AVRCP_DISCONNECTED ");
+ device_addr = (char *)(param->param_data);
+ ((bt_avrcp_target_connection_state_changed_cb)bt_event_slot_container[event_index].callback)
+ (FALSE, device_addr, bt_event_slot_container[event_index].user_data);
+ break;
+ case BLUETOOTH_EVENT_AVRCP_SETTING_SHUFFLE_STATUS:
+ BT_INFO("BLUETOOTH_EVENT_AVRCP_SETTING_SHUFFLE_STATUS ");
+ avrcp_mode = (int *)(param->param_data);
+ ((bt_avrcp_shuffle_mode_changed_cb)bt_event_slot_container[event_index].callback)
+ ((bt_avrcp_shuffle_mode_e)*avrcp_mode, bt_event_slot_container[event_index].user_data);
+ break;
+ case BLUETOOTH_EVENT_AVRCP_SETTING_EQUALIZER_STATUS:
+ BT_INFO("BLUETOOTH_EVENT_AVRCP_SETTING_EQUALIZER_STATUS ");
+ avrcp_mode = (int *)(param->param_data);
+ ((bt_avrcp_equalizer_state_changed_cb)bt_event_slot_container[event_index].callback)
+ ((bt_avrcp_equalizer_state_e)*avrcp_mode, bt_event_slot_container[event_index].user_data);
+ break;
+ case BLUETOOTH_EVENT_AVRCP_SETTING_REPEAT_STATUS:
+ BT_INFO("BLUETOOTH_EVENT_AVRCP_SETTING_REPEAT_STATUS ");
+ avrcp_mode = (int *)(param->param_data);
+ ((bt_avrcp_repeat_mode_changed_cb)bt_event_slot_container[event_index].callback)
+ ((bt_avrcp_repeat_mode_e)*avrcp_mode, bt_event_slot_container[event_index].user_data);
+ break;
+ case BLUETOOTH_EVENT_AVRCP_SETTING_SCAN_STATUS:
+ BT_INFO("BLUETOOTH_EVENT_AVRCP_SETTING_SCAN_STATUS ");
+ avrcp_mode = (int *)(param->param_data);
+ ((bt_avrcp_scan_mode_changed_cb)bt_event_slot_container[event_index].callback)
+ ((bt_avrcp_scan_mode_e)*avrcp_mode, bt_event_slot_container[event_index].user_data);
+ break;
+ case BLUETOOTH_EVENT_AVRCP_CONTROL_CONNECTED:
+ BT_INFO("BLUETOOTH_EVENT_AVRCP_CONTROL_CONNECTED ");
+ device_addr = (char *)(param->param_data);
+ ((bt_avrcp_target_connection_state_changed_cb)bt_event_slot_container[event_index].callback)
+ (TRUE, device_addr, bt_event_slot_container[event_index].user_data);
+ break;
+ case BLUETOOTH_EVENT_AVRCP_CONTROL_DISCONNECTED:
+ BT_INFO("BLUETOOTH_EVENT_AVRCP_CONTROL_DISCONNECTED ");
+ device_addr = (char *)(param->param_data);
+ ((bt_avrcp_target_connection_state_changed_cb)bt_event_slot_container[event_index].callback)
+ (FALSE, device_addr, bt_event_slot_container[event_index].user_data);
+ break;
+ case BLUETOOTH_EVENT_AVRCP_CONTROL_SHUFFLE_STATUS:
+ BT_INFO("BLUETOOTH_EVENT_AVRCP_CONTROL_SHUFFLE_STATUS ");
+ avrcp_mode = (int *)(param->param_data);
+ ((bt_avrcp_shuffle_mode_changed_cb)bt_event_slot_container[event_index].callback)
+ ((bt_avrcp_shuffle_mode_e)*avrcp_mode, bt_event_slot_container[event_index].user_data);
+ break;
+ case BLUETOOTH_EVENT_AVRCP_CONTROL_EQUALIZER_STATUS:
+ BT_INFO("BLUETOOTH_EVENT_AVRCP_CONTROL_EQUALIZER_STATUS ");
+ avrcp_mode = (int *)(param->param_data);
+ ((bt_avrcp_equalizer_state_changed_cb)bt_event_slot_container[event_index].callback)
+ ((bt_avrcp_equalizer_state_e)*avrcp_mode, bt_event_slot_container[event_index].user_data);
+ break;
+ case BLUETOOTH_EVENT_AVRCP_CONTROL_REPEAT_STATUS:
+ BT_INFO("BLUETOOTH_EVENT_AVRCP_CONTROL_REPEAT_STATUS ");
+ avrcp_mode = (int *)(param->param_data);
+ ((bt_avrcp_repeat_mode_changed_cb)bt_event_slot_container[event_index].callback)
+ ((bt_avrcp_repeat_mode_e)*avrcp_mode, bt_event_slot_container[event_index].user_data);
+ break;
+ case BLUETOOTH_EVENT_AVRCP_CONTROL_SCAN_STATUS:
+ BT_INFO("BLUETOOTH_EVENT_AVRCP_CONTROL_SCAN_STATUS ");
+ avrcp_mode = (int *)(param->param_data);
+ ((bt_avrcp_scan_mode_changed_cb)bt_event_slot_container[event_index].callback)
+ ((bt_avrcp_scan_mode_e)*avrcp_mode, bt_event_slot_container[event_index].user_data);
+ break;
+ case BLUETOOTH_EVENT_AVRCP_PLAY_STATUS_CHANGED:
+ BT_INFO("BLUETOOTH_EVENT_AVRCP_PLAY_STATUS_CHANGED ");
+ avrcp_mode = (int *)(param->param_data);
+ ((bt_avrcp_play_status_changed_cb)bt_event_slot_container[event_index].callback)
+ ((bt_avrcp_player_state_e)*avrcp_mode, bt_event_slot_container[event_index].user_data);
+ break;
+ case BLUETOOTH_EVENT_AVRCP_SONG_POSITION_STATUS:
+ BT_INFO("BLUETOOTH_EVENT_AVRCP_SONG_POSITION_STATUS ");
+ unsigned int *postion = (unsigned int *)(param->param_data);
+ ((bt_avrcp_song_position_changed_cb)bt_event_slot_container[event_index].callback)
+ (*postion, bt_event_slot_container[event_index].user_data);
+ break;
+ case BLUETOOTH_EVENT_AVRCP_TRACK_CHANGED:
+ BT_INFO("BLUETOOTH_EVENT_AVRCP_TRACK_CHANGED ");
+ bt_avrcp_metadata_attributes_info_s meta_info = {0, };
+ metadata = (media_metadata_attributes_t *)(param->param_data);
+ meta_info.title = metadata->title; /* No need to allocate memory*/
+ meta_info.artist = metadata->artist; /* No need to allocate memory*/
+ meta_info.album = metadata->album; /* No need to allocate memory*/
+ meta_info.genre = metadata->genre; /* No need to allocate memory*/
+ meta_info.total_tracks = metadata->total_tracks;
+ meta_info.number = metadata->number;
+ meta_info.duration = metadata->duration;
+ ((bt_avrcp_track_info_changed_cb)bt_event_slot_container[event_index].callback)
+ (&meta_info, bt_event_slot_container[event_index].user_data);
+ break;
case BLUETOOTH_HID_CONNECTED:
- LOGI("[%s] BLUETOOTH_HID_CONNECTED", __FUNCTION__);
+ BT_INFO("BLUETOOTH_HID_CONNECTED");
bd_addr = (bluetooth_device_address_t *)(param->param_data);
_bt_convert_address_to_string(&device_addr, bd_addr);
((bt_hid_host_connection_state_changed_cb)bt_event_slot_container[event_index].callback)
(_bt_get_error_code(param->result), TRUE, device_addr, bt_event_slot_container[event_index].user_data);
+
+ if (device_addr != NULL)
+ free(device_addr);
break;
case BLUETOOTH_HID_DISCONNECTED:
- LOGI("[%s] BLUETOOTH_HID_DISCONNECTED", __FUNCTION__);
+ BT_INFO("BLUETOOTH_HID_DISCONNECTED");
bd_addr = (bluetooth_device_address_t *)(param->param_data);
_bt_convert_address_to_string(&device_addr, bd_addr);
((bt_hid_host_connection_state_changed_cb)bt_event_slot_container[event_index].callback)
(_bt_get_error_code(param->result), FALSE, device_addr, bt_event_slot_container[event_index].user_data);
+
+ if (device_addr != NULL)
+ free(device_addr);
+ break;
+ case BLUETOOTH_EVENT_GATT_CONNECTED:
+ BT_INFO("BLUETOOTH_EVENT_GATT_CONNECTED");
+ bd_addr = (bluetooth_device_address_t *)(param->param_data);
+ _bt_convert_address_to_string(&device_addr, bd_addr);
+ ((bt_gatt_connection_state_changed_cb)bt_event_slot_container[event_index].callback)
+ (_bt_get_error_code(param->result), TRUE, device_addr,
+ bt_event_slot_container[event_index].user_data);
+ break;
+ case BLUETOOTH_EVENT_GATT_DISCONNECTED:
+ BT_INFO("BLUETOOTH_EVENT_GATT_DISCONNECTED");
+ bd_addr = (bluetooth_device_address_t *)(param->param_data);
+ _bt_convert_address_to_string(&device_addr, bd_addr);
+ ((bt_gatt_connection_state_changed_cb)bt_event_slot_container[event_index].callback)
+ (_bt_get_error_code(param->result), FALSE, device_addr,
+ bt_event_slot_container[event_index].user_data);
+ break;
+#ifdef BT_ENABLE_LEGACY_GATT_CLIENT
+ case BLUETOOTH_EVENT_GATT_SVC_CHAR_DISCOVERED: {
+ BT_INFO("BLUETOOTH_EVENT_GATT_SVC_CHAR_DISCOVERED");
+ if (_bt_gatt_is_legacy_client_mode()) {
+ bt_gatt_discovered_char_t *svc_char = param->param_data;
+ int i;
+
+ if (svc_char == NULL)
+ return;
+ for (i = 1; i <= svc_char->handle_info.count; i++) {
+ ((bt_gatt_characteristics_discovered_cb)bt_event_slot_container[event_index].callback)
+ (_bt_get_error_code(param->result), i, svc_char->handle_info.count, svc_char->handle_info.handle[i-1],
+ bt_event_slot_container[event_index].user_data);
+ }
+ _bt_unset_cb(BT_EVENT_GATT_CLIENT_CHARACTERISTIC_DISCOVERED_LEGACY);
+ }
+ break;
+ }
+#endif
+ case BLUETOOTH_EVENT_GATT_CHAR_VAL_CHANGED:
+ BT_INFO("BLUETOOTH_EVENT_GATT_CHAR_VAL_CHANGED");
+ char_val = (bt_gatt_char_value_t *)(param->param_data);
+
+#ifdef BT_ENABLE_LEGACY_GATT_CLIENT
+ if (_bt_gatt_is_legacy_client_mode()) {
+ bt_gatt_char_value_t *char_val = param->param_data;
+
+ if (char_val == NULL)
+ return;
+ ((bt_gatt_characteristic_changed_cb)bt_event_slot_container[event_index].callback)
+ (char_val->char_handle, char_val->char_value, char_val->val_len,
+ bt_event_slot_container[event_index].user_data);
+ break;
+ }
+#endif
+ if (char_val == NULL)
+ return;
+
+ ((_bt_gatt_client_value_changed_cb)bt_event_slot_container[event_index].callback)
+ (char_val->char_handle, char_val->char_value, char_val->val_len,
+ bt_event_slot_container[event_index].user_data);
+
+ break;
+ case BLUETOOTH_EVENT_GATT_READ_CHAR: {
+ int ret;
+ bt_gatt_client_request_completed_cb cb = bt_event_slot_container[event_index].callback;
+ bt_gatt_client_cb_data_s *cb_data = bt_event_slot_container[event_index].user_data;
+
+ BT_INFO("BLUETOOTH_EVENT_GATT_READ_CHAR");
+
+#ifdef BT_ENABLE_LEGACY_GATT_CLIENT
+ if (_bt_gatt_is_legacy_client_mode()) {
+ bt_gatt_char_value_t *char_val = param->param_data;
+
+ ((bt_gatt_characteristic_read_cb)bt_event_slot_container[event_index].callback)
+ (char_val->char_value, char_val->val_len,
+ bt_event_slot_container[event_index].user_data);
+ _bt_unset_cb(BT_EVENT_GATT_CLIENT_READ_CHARACTERISTIC_LEGACY);
+ break;
+ }
+#endif
+ _bt_unset_cb(BT_EVENT_GATT_CLIENT_READ_CHARACTERISTIC);
+ ret = _bt_get_error_code(param->result);
+ if (ret == BT_ERROR_NONE) {
+ char_val = (bt_gatt_char_value_t *)(param->param_data);
+ bt_gatt_set_value(cb_data->gatt_handle,
+ (char *)char_val->char_value, (int)char_val->val_len);
+ }
+ cb(ret, cb_data->gatt_handle, cb_data->user_data);
+ g_free(cb_data);
+
+ break;
+ }
+ case BLUETOOTH_EVENT_GATT_WRITE_CHAR: {
+ int ret;
+ bt_gatt_client_request_completed_cb cb = bt_event_slot_container[event_index].callback;
+ bt_gatt_client_cb_data_s *cb_data = bt_event_slot_container[event_index].user_data;
+
+ BT_INFO("BLUETOOTH_EVENT_GATT_WRITE_CHAR");
+
+#ifdef BT_ENABLE_LEGACY_GATT_CLIENT
+ if (_bt_gatt_is_legacy_client_mode()) {
+ ((bt_gatt_characteristic_write_cb)bt_event_slot_container[event_index].callback)
+ (bt_event_slot_container[event_index].user_data);
+
+ _bt_unset_cb(BT_EVENT_GATT_CLIENT_WRITE_CHARACTERISTIC_LEGACY);
+ break;
+ }
+#endif
+ _bt_unset_cb(BT_EVENT_GATT_CLIENT_WRITE_CHARACTERISTIC);
+ ret = _bt_get_error_code(param->result);
+ cb(ret, cb_data->gatt_handle, cb_data->user_data);
+ g_free(cb_data);
+
+ break;
+ }
+ case BLUETOOTH_EVENT_GATT_READ_DESC: {
+ int ret;
+ bt_gatt_client_request_completed_cb cb = bt_event_slot_container[event_index].callback;
+ bt_gatt_client_cb_data_s *cb_data = bt_event_slot_container[event_index].user_data;
+ bt_gatt_char_property_t *desc_val = NULL;
+
+ BT_INFO("BLUETOOTH_EVENT_GATT_READ_DESC");
+
+ _bt_unset_cb(BT_EVENT_GATT_CLIENT_READ_DESCRIPTOR);
+ ret = _bt_get_error_code(param->result);
+ if (ret == BT_ERROR_NONE) {
+ desc_val = (bt_gatt_char_property_t *)(param->param_data);
+ bt_gatt_set_value(cb_data->gatt_handle,
+ desc_val->description, (int)desc_val->val_len);
+ }
+ cb(ret, cb_data->gatt_handle, cb_data->user_data);
+ g_free(cb_data);
+
+ break;
+ }
+ case BLUETOOTH_EVENT_GATT_WRITE_DESC: {
+ int ret;
+ bt_gatt_client_request_completed_cb cb = bt_event_slot_container[event_index].callback;
+ bt_gatt_client_cb_data_s *cb_data = bt_event_slot_container[event_index].user_data;
+
+ BT_INFO("BLUETOOTH_EVENT_GATT_WRITE_DESC");
+
+ _bt_unset_cb(BT_EVENT_GATT_CLIENT_WRITE_DESCRIPTOR);
+ ret = _bt_get_error_code(param->result);
+ cb(ret, cb_data->gatt_handle, cb_data->user_data);
+ g_free(cb_data);
+
+ break;
+ }
+ case BLUETOOTH_EVENT_GATT_SERVER_READ_REQUESTED: {
+ bt_gatt_read_req_t *read_req = param->param_data;
+ bt_gatt_server_read_value_requested_cb cb;
+ void *user_data = NULL;
+ cb = __bt_gatt_attribute_get_read_cb(read_req->service_handle,
+ read_req->char_handle, &user_data);
+
+ BT_INFO("BLUETOOTH_EVENT_GATT_SERVER_READ_REQUESTED");
+ if (cb == NULL)
+ return;
+
+ cb(read_req->address, read_req->req_id, read_req->service_handle,
+ read_req->char_handle, read_req->offset,
+ user_data);
+ break;
+ }
+#ifdef BT_ENABLE_LEGACY_GATT_CLIENT
+ case BLUETOOTH_EVENT_GATT_SVC_CHAR_DESC_DISCOVERED: {
+ BT_INFO("BLUETOOTH_EVENT_GATT_SVC_CHAR_DESC_DISCOVERED");
+ if (_bt_gatt_is_legacy_client_mode()) {
+ bt_gatt_char_property_t *char_desc = param->param_data;
+
+ if (char_desc == NULL)
+ return;
+ ((bt_gatt_characteristic_descriptor_discovered_cb)
+ bt_event_slot_container[event_index].callback)(_bt_get_error_code(param->result),
+ char_desc->format.format, char_desc->val_len, char_desc->description,
+ bt_event_slot_container[event_index].user_data);
+ _bt_unset_cb(BT_EVENT_GATT_CLIENT_CHARACTERISTIC_DESCRIPTOR_DISCOVERED_LEGACY);
+ }
+ break;
+ }
+#endif
+ case BLUETOOTH_EVENT_GATT_SERVER_CHARACTERISTIC_VALUE_CHANGED: {
+ const GSList *server_list = NULL;
+ BT_INFO("BLUETOOTH_EVENT_GATT_SERVER_CHARACTERISTIC_VALUE_CHANGED");
+
+ char_val = (bt_gatt_char_value_t *)(param->param_data);
+
+ if (char_val == NULL)
+ return;
+
+ for (server_list = _bt_gatt_get_server_list() ; server_list; server_list = g_slist_next(server_list)) {
+ bt_gatt_server_s *serv = (bt_gatt_server_s*)server_list->data;
+ GSList *service_list = NULL;
+
+ for (service_list = serv->services; service_list; service_list = g_slist_next(service_list)) {
+ bt_gatt_service_s *svc = (bt_gatt_service_s*)service_list->data;
+ GSList *char_list = NULL;
+
+ for (char_list = svc->characteristics; char_list; char_list = g_slist_next(char_list)) {
+ bt_gatt_characteristic_s *chr = (bt_gatt_characteristic_s*)char_list->data;
+ if (chr->path && strcmp(char_val->char_handle, chr->path) == 0) {
+ g_free(chr->value);
+ chr->value = NULL;
+ if (char_val->val_len > 0)
+ chr->value = g_memdup(char_val->char_value, char_val->val_len);
+ chr->value_length = char_val->val_len;
+ /* TODO : Fix build error temporary */
+ if (chr->server_value_changed_cb)
+ chr->server_value_changed_cb(NULL, (bt_gatt_server_h)serv, (bt_gatt_h)chr,
+ 0, (char*)char_val->char_value, char_val->val_len,
+ chr->server_value_changed_user_data);
+ }
+ }
+ }
+ }
+ break;
+ }
+ case BLUETOOTH_EVENT_ADVERTISING_STARTED:
+ BT_INFO("BLUETOOTH_EVENT_ADVERTISING_STARTED");
+ adv_handle = (int *)(param->param_data);
+
+ if (bt_event_slot_container[event_index].callback != NULL) {
+ ((bt_adapter_le_advertising_state_changed_cb)bt_event_slot_container[event_index].callback)
+ (_bt_get_error_code(param->result), NULL, BT_ADAPTER_LE_ADVERTISING_STARTED,
+ bt_event_slot_container[event_index].user_data);
+ }
+
+ _bt_adapter_le_invoke_advertising_state_cb(*adv_handle,
+ _bt_get_error_code(param->result), BT_ADAPTER_LE_ADVERTISING_STARTED);
+
break;
+ case BLUETOOTH_EVENT_ADVERTISING_STOPPED:
+ BT_INFO("BLUETOOTH_EVENT_ADVERTISING_STOPPED");
+ adv_handle = (int *)(param->param_data);
+
+ if (bt_event_slot_container[event_index].callback != NULL) {
+ ((bt_adapter_le_advertising_state_changed_cb)bt_event_slot_container[event_index].callback)
+ (_bt_get_error_code(param->result), NULL, BT_ADAPTER_LE_ADVERTISING_STOPPED,
+ bt_event_slot_container[event_index].user_data);
+ }
+
+ _bt_adapter_le_invoke_advertising_state_cb(*adv_handle,
+ _bt_get_error_code(param->result), BT_ADAPTER_LE_ADVERTISING_STOPPED);
+
+ break;
+ case BLUETOOTH_EVENT_MANUFACTURER_DATA_CHANGED:
+ BT_INFO("BLUETOOTH_EVENT_MANUFACTURER_DATA_CHANGED");
+
+ ((bt_adapter_manufacturer_data_changed_cb)bt_event_slot_container[event_index].callback)
+ (param->param_data, param->result,
+ bt_event_slot_container[event_index].user_data);
+
+ break;
+#ifdef TIZEN_WEARABLE
+ case BLUETOOTH_PBAP_CONNECTED: {
+ bt_pbap_enabled_cb cb = bt_event_slot_container[event_index].callback;
+ void *user_data = bt_event_slot_container[event_index].user_data;
+ bt_pbap_connected_t *connected = (bt_pbap_connected_t *)param->param_data;
+
+ BT_INFO("BLUETOOTH_PBAP_CONNECTED/DISCONNECTED");
+ if (connected->connected == 0)
+ _bt_unset_cb(BT_EVENT_PBAP_CONNECTION_STATUS);
+ _bt_convert_address_to_string(&device_addr, &connected->btaddr);
+ cb(device_addr, connected->connected, user_data);
+
+ if (device_addr != NULL)
+ free(device_addr);
+
+ break;
+ }
+ case BLUETOOTH_PBAP_PHONEBOOK_SIZE: {
+ bt_pbap_phonebook_size_cb cb = bt_event_slot_container[event_index].callback;
+ void *user_data = bt_event_slot_container[event_index].user_data;
+ bt_pbap_phonebook_size_t *pb_size = (bt_pbap_phonebook_size_t *)param->param_data;
+
+ BT_INFO("BLUETOOTH_PBAP_PHONEBOOK_SIZE");
+
+ _bt_unset_cb(BT_EVENT_PBAP_PHONEBOOK_SIZE);
+ _bt_convert_address_to_string(&device_addr, &pb_size->btaddr);
+ cb(device_addr, pb_size->size, user_data);
+
+ if (device_addr != NULL)
+ free(device_addr);
+
+ break;
+ }
+ case BLUETOOTH_PBAP_PHONEBOOK_PULL: {
+ bt_pbap_phonebook_pull_cb cb = bt_event_slot_container[event_index].callback;
+ void *user_data = bt_event_slot_container[event_index].user_data;
+ bt_pbap_phonebook_pull_t *pb_pull = (bt_pbap_phonebook_pull_t *)(param->param_data);
+
+ BT_INFO("BLUETOOTH_PBAP_PHONEBOOK_PULL");
+
+ _bt_unset_cb(BT_EVENT_PBAP_PHONEBOOK_PULL);
+ _bt_convert_address_to_string(&device_addr, &pb_pull->btaddr);
+ cb(device_addr, pb_pull->vcf_file, pb_pull->success, user_data);
+
+ if (device_addr != NULL)
+ free(device_addr);
+
+ break;
+ }
+ case BLUETOOTH_PBAP_VCARD_LIST: {
+ bt_pbap_list_vcards_cb cb = bt_event_slot_container[event_index].callback;
+ void *user_data = bt_event_slot_container[event_index].user_data;
+ bt_pbap_vcard_list_t *vc_list = (bt_pbap_vcard_list_t *)(param->param_data);
+
+ BT_INFO("BLUETOOTH_PBAP_VCARD_LIST");
+
+ _bt_unset_cb(BT_EVENT_PBAP_VCARD_LIST);
+ _bt_convert_address_to_string(&device_addr, &vc_list->btaddr);
+ cb(device_addr, vc_list->vcards, vc_list->length, vc_list->success, user_data);
+
+ if (device_addr != NULL)
+ free(device_addr);
+
+ break;
+ }
+ case BLUETOOTH_PBAP_VCARD_PULL: {
+ bt_pbap_get_vcard_cb cb = bt_event_slot_container[event_index].callback;
+ void *user_data = bt_event_slot_container[event_index].user_data;
+ bt_pbap_vcard_pull_t *vc_pull = (bt_pbap_vcard_pull_t *)(param->param_data);
+
+ BT_INFO("BLUETOOTH_PBAP_VCARD_PULL");
+
+ _bt_unset_cb(BT_EVENT_PBAP_VCARD_PULL);
+ _bt_convert_address_to_string(&device_addr, &vc_pull->btaddr);
+ cb(device_addr, vc_pull->vcf_file, vc_pull->success, user_data);
+
+ if (device_addr != NULL)
+ free(device_addr);
+
+ break;
+ }
+ case BLUETOOTH_PBAP_PHONEBOOK_SEARCH: {
+ bt_pbap_search_list_cb cb = bt_event_slot_container[event_index].callback;
+ void *user_data = bt_event_slot_container[event_index].user_data;
+ bt_pbap_phonebook_search_list_t *vc_list = (bt_pbap_phonebook_search_list_t *)(param->param_data);
+
+ BT_INFO("BLUETOOTH_PBAP_PHONEBOOK_SEARCH");
+
+ _bt_unset_cb(BT_EVENT_PBAP_PHONEBOOK_SEARCH);
+ _bt_convert_address_to_string(&device_addr, &vc_list->btaddr);
+ cb(device_addr, vc_list->vcards, vc_list->length, vc_list->success, user_data);
+
+ if (device_addr != NULL)
+ free(device_addr);
+
+ break;
+ }
+ case BLUETOOTH_EVENT_HF_CONNECTED:
+ BT_INFO("BLUETOOTH_EVENT_HF_CONNECTED");
+ device_addr = (char *)(param->param_data);
+ ((bt_audio_connection_state_changed_cb)bt_event_slot_container[event_index].callback)
+ (_bt_get_error_code(param->result), TRUE, device_addr, BT_AUDIO_PROFILE_TYPE_AG,
+ bt_event_slot_container[event_index].user_data);
+ break;
+ case BLUETOOTH_EVENT_HF_DISCONNECTED:
+ BT_INFO("BLUETOOTH_EVENT_HF_DISCONNECTED");
+ device_addr = (char *)(param->param_data);
+ ((bt_audio_connection_state_changed_cb)bt_event_slot_container[event_index].callback)
+ (_bt_get_error_code(param->result), FALSE, device_addr, BT_AUDIO_PROFILE_TYPE_AG,
+ bt_event_slot_container[event_index].user_data);
+ break;
+ case BLUETOOTH_EVENT_HF_AUDIO_CONNECTED:
+ BT_INFO("BLUETOOTH_EVENT_HF_AUDIO_CONNECTED");
+ device_addr = (char *)(param->param_data);
+ ((bt_hf_sco_state_changed_cb)bt_event_slot_container[event_index].callback)
+ (_bt_get_error_code(param->result), TRUE,
+ bt_event_slot_container[event_index].user_data);
+ break;
+ case BLUETOOTH_EVENT_HF_AUDIO_DISCONNECTED:
+ BT_INFO("BLUETOOTH_EVENT_HF_AUDIO_DISCONNECTED");
+ device_addr = (char *)(param->param_data);
+ ((bt_hf_sco_state_changed_cb)bt_event_slot_container[event_index].callback)
+ (_bt_get_error_code(param->result), FALSE,
+ bt_event_slot_container[event_index].user_data);
+ break;
+ case BLUETOOTH_EVENT_HF_RING_INDICATOR:
+ BT_INFO("BLUETOOTH_EVENT_HF_RING_INDICATOR");
+ phone_number = (char *)(param->param_data);
+ ((bt_hf_call_handling_event_cb)bt_event_slot_container[event_index].callback)
+ (BT_HF_CALL_HANDLING_EVENT_RING, phone_number,
+ bt_event_slot_container[event_index].user_data);
+ break;
+ case BLUETOOTH_EVENT_HF_CALL_TERMINATED:
+ BT_INFO("BLUETOOTH_EVENT_HF_CALL_TERMINATED");
+ ((bt_hf_call_handling_event_cb)bt_event_slot_container[event_index].callback)
+ (BT_HF_CALL_HANDLING_EVENT_RELEASE, NULL,
+ bt_event_slot_container[event_index].user_data);
+ break;
+ case BLUETOOTH_EVENT_HF_CALL_STARTED:
+ BT_INFO("BLUETOOTH_EVENT_HF_CALL_STARTED");
+ ((bt_hf_call_handling_event_cb)bt_event_slot_container[event_index].callback)
+ (BT_HF_CALL_HANDLING_EVENT_CALL_STARTED, NULL,
+ bt_event_slot_container[event_index].user_data);
+ break;
+ case BLUETOOTH_EVENT_HF_CALL_ENDED:
+ BT_INFO("BLUETOOTH_EVENT_HF_CALL_ENDED");
+ ((bt_hf_call_handling_event_cb)bt_event_slot_container[event_index].callback)
+ (BT_HF_CALL_HANDLING_EVENT_CALL_ENDED, NULL,
+ bt_event_slot_container[event_index].user_data);
+ break;
+ case BLUETOOTH_EVENT_HF_VOICE_RECOGNITION_ENABLED:
+ BT_INFO("BLUETOOTH_EVENT_HF_VOICE_RECOGNITION_ENABLED");
+ ((bt_hf_call_handling_event_cb)bt_event_slot_container[event_index].callback)
+ (BT_HF_CALL_HANDLING_EVENT_VOICE_RECOGNITION_ENABLED, NULL,
+ bt_event_slot_container[event_index].user_data);
+ break;
+ case BLUETOOTH_EVENT_HF_VOICE_RECOGNITION_DISABLED:
+ BT_INFO("BLUETOOTH_EVENT_HF_VOICE_RECOGNITION_DISABLED");
+ ((bt_hf_call_handling_event_cb)bt_event_slot_container[event_index].callback)
+ (BT_HF_CALL_HANDLING_EVENT_VOICE_RECOGNITION_DISABLED, NULL,
+ bt_event_slot_container[event_index].user_data);
+ break;
+ case BLUETOOTH_EVENT_HF_CALL_WAITING:
+ BT_INFO("BLUETOOTH_EVENT_HF_CALL_WAITING");
+ phone_number = (char *)(param->param_data);
+ ((bt_hf_call_handling_event_cb)bt_event_slot_container[event_index].callback)
+ (BT_HF_CALL_HANDLING_EVENT_WAITING, phone_number,
+ bt_event_slot_container[event_index].user_data);
+ break;
+ case BLUETOOTH_EVENT_HF_CALL_ON_HOLD:
+ BT_INFO("BLUETOOTH_EVENT_HF_CALL_ON_HOLD");
+ ((bt_hf_call_handling_event_cb)bt_event_slot_container[event_index].callback)
+ (BT_HF_CALL_HANDLING_EVENT_HELD, NULL,
+ bt_event_slot_container[event_index].user_data);
+ break;
+ case BLUETOOTH_EVENT_HF_CALL_UNHOLD:
+ BT_INFO("BLUETOOTH_EVENT_HF_CALL_UNHOLD");
+ ((bt_hf_call_handling_event_cb)bt_event_slot_container[event_index].callback)
+ (BT_HF_CALL_HANDLING_EVENT_UNHELD, NULL,
+ bt_event_slot_container[event_index].user_data);
+ break;
+ case BLUETOOTH_EVENT_HF_CALL_SWAPPED:
+ BT_INFO("BLUETOOTH_EVENT_HF_CALL_SWAPPED");
+ ((bt_hf_call_handling_event_cb)bt_event_slot_container[event_index].callback)
+ (BT_HF_CALL_HANDLING_EVENT_SWAPPED, NULL,
+ bt_event_slot_container[event_index].user_data);
+ break;
+ case BLUETOOTH_EVENT_HF_VOLUME_SPEAKER: {
+ BT_INFO("BLUETOOTH_EVENT_HF_VOLUME_SPEAKER");
+ int *spk_gain = (int *)(param->param_data);
+ ((bt_hf_speaker_gain_changed_cb)bt_event_slot_container[event_index].callback)
+ (*spk_gain, bt_event_slot_container[event_index].user_data);
+ break;
+ }
+ case BLUETOOTH_EVENT_HF_CALL_STATUS: {
+ BT_INFO("BLUETOOTH_EVENT_HF_CALL_STATUS");
+ bt_hf_call_list_s *handle = (bt_hf_call_list_s *)(param->param_data);
+ GList *l = NULL;
+ GSList *call_list = NULL;
+
+ for (l = g_list_first(handle->list); l; l = g_list_next(l)) {
+ bt_hf_call_status_info_t *hf_call_info = l->data;
+ bt_hf_call_status_info_s *call_info = NULL;
+
+ call_info = g_malloc0(sizeof(bt_hf_call_status_info_s));
+ call_info->number = strdup(hf_call_info->number);
+ call_info->direction = hf_call_info->direction;
+ call_info->status = hf_call_info->status;
+ call_info->multi_party = hf_call_info->mpart;
+ call_info->index = hf_call_info->idx;
+ call_list = g_slist_append(call_list, call_info);
+ }
+
+ ((bt_hf_call_status_updated_event_cb)bt_event_slot_container[event_index].callback)
+ (call_list, bt_event_slot_container[event_index].user_data);
+ break;
+ }
+#endif
+ default:
+ break;
+ }
+}
+
+
+static void __bt_le_event_proxy(int event, bluetooth_event_param_t *param, void *user_data)
+{
+ bt_adapter_le_device_scan_result_info_s *scan_info = NULL;
+#ifndef TIZEN_WEARABLE
+ bt_adapter_le_device_discovery_info_s *discovery_info = NULL;
+#endif
+ int event_index = -1;
+
+ event_index = __bt_get_cb_index(event);
+ if (event == BLUETOOTH_EVENT_REMOTE_LE_DEVICE_FOUND)
+ BT_INFO("Need to check 2 slots in the case");
+ else if (event_index == -1 || bt_event_slot_container[event_index].callback == NULL)
+ return;
+
+ switch (event) {
+ case BLUETOOTH_EVENT_LE_ENABLED:
+ BT_INFO("BLUETOOTH_EVENT_LE_ENABLED");
+ ((bt_adapter_le_state_changed_cb) bt_event_slot_container[event_index].callback)
+ (_bt_get_error_code(param->result), BT_ADAPTER_LE_ENABLED, bt_event_slot_container[event_index].user_data);
+ break;
+ case BLUETOOTH_EVENT_LE_DISABLED:
+ BT_INFO("BLUETOOTH_EVENT_LE_DISABLED");
+ ((bt_adapter_le_state_changed_cb) bt_event_slot_container[event_index].callback)
+ (_bt_get_error_code(param->result), BT_ADAPTER_LE_DISABLED, bt_event_slot_container[event_index].user_data);
+ break;
+
+#ifndef TIZEN_WEARABLE
+ case BLUETOOTH_EVENT_LE_DISCOVERY_STARTED:
+ BT_INFO("BLUETOOTH_EVENT_LE_DISCOVERY_STARTED");
+ ((bt_adapter_le_device_discovery_state_changed_cb) bt_event_slot_container[event_index].callback)
+ (_bt_get_error_code(param->result), BT_ADAPTER_LE_DEVICE_DISCOVERY_STARTED, NULL, bt_event_slot_container[event_index].user_data);
+ break;
+ case BLUETOOTH_EVENT_LE_DISCOVERY_FINISHED:
+ BT_INFO("BLUETOOTH_EVENT_LE_DISCOVERY_FINISHED");
+ ((bt_adapter_le_device_discovery_state_changed_cb)bt_event_slot_container[event_index].callback)
+ (_bt_get_error_code(param->result), BT_ADAPTER_LE_DEVICE_DISCOVERY_FINISHED, NULL, bt_event_slot_container[event_index].user_data);
+ break;
+#endif
+
+ case BLUETOOTH_EVENT_REMOTE_LE_DEVICE_FOUND:
+ BT_INFO("BLUETOOTH_EVENT_REMOTE_LE_DEVICE_FOUND");
+ event_index = BT_EVENT_LE_SCAN_RESULT_UPDATED;
+ if (bt_event_slot_container[event_index].callback != NULL) {
+ if (__bt_get_bt_adapter_le_device_scan_info_s(&scan_info, (bluetooth_le_device_info_t *)(param->param_data)) == BT_ERROR_NONE) {
+ ((bt_adapter_le_scan_result_cb)bt_event_slot_container[event_index].callback)
+ (_bt_get_error_code(param->result), scan_info, bt_event_slot_container[event_index].user_data);
+ __bt_free_bt_adapter_le_device_scan_info_s(scan_info);
+ } else {
+ ((bt_adapter_le_scan_result_cb)bt_event_slot_container[event_index].callback)
+ (_bt_get_error_code(param->result), NULL, bt_event_slot_container[event_index].user_data);
+ }
+ }
+#ifndef TIZEN_WEARABLE
+ event_index = BT_EVENT_LE_DEVICE_DISCOVERY_STATE_CHANGED;
+ if (bt_event_slot_container[event_index].callback != NULL) {
+ if (__bt_get_bt_adapter_le_device_discovery_info_s(&discovery_info, (bluetooth_le_device_info_t *)(param->param_data)) == BT_ERROR_NONE) {
+ ((bt_adapter_le_device_discovery_state_changed_cb)bt_event_slot_container[event_index].callback)
+ (_bt_get_error_code(param->result), BT_ADAPTER_LE_DEVICE_DISCOVERY_FOUND, discovery_info, bt_event_slot_container[event_index].user_data);
+ __bt_free_bt_adapter_le_device_discovery_info_s(discovery_info);
+ } else {
+ ((bt_adapter_le_device_discovery_state_changed_cb)bt_event_slot_container[event_index].callback)
+ (_bt_get_error_code(param->result), BT_ADAPTER_LE_DEVICE_DISCOVERY_FOUND, NULL, bt_event_slot_container[event_index].user_data);
+ }
+ }
+#endif
+ break;
+
default:
break;
}
@@ -892,7 +1849,7 @@ static int __bt_get_bt_adapter_device_discovery_info_s(bt_adapter_device_discove
__bt_convert_lower_to_upper((*discovery_info)->service_uuid[i]);
}
- LOGI("[%s] UUID: %s", __FUNCTION__, (*discovery_info)->service_uuid[i]);
+ BT_INFO("UUID: %s", (*discovery_info)->service_uuid[i]);
}
}
} else {
@@ -903,6 +1860,16 @@ static int __bt_get_bt_adapter_device_discovery_info_s(bt_adapter_device_discove
(*discovery_info)->rssi = (int)source_info->rssi;
(*discovery_info)->is_bonded = (bool)source_info->paired;
+ (*discovery_info)->appearance = 0;
+
+ (*discovery_info)->manufacturer_data_len = source_info->manufacturer_data.data_len;
+ if ((*discovery_info)->manufacturer_data_len > 0) {
+ (*discovery_info)->manufacturer_data = malloc(source_info->manufacturer_data.data_len);
+ memcpy((*discovery_info)->manufacturer_data, source_info->manufacturer_data.data, source_info->manufacturer_data.data_len);
+ } else {
+ (*discovery_info)->manufacturer_data = NULL;
+ }
+
return BT_ERROR_NONE;
}
@@ -926,25 +1893,171 @@ static void __bt_free_bt_adapter_device_discovery_info_s(bt_adapter_device_disco
}
free(discovery_info->service_uuid);
}
+ if (discovery_info->manufacturer_data != NULL)
+ free(discovery_info->manufacturer_data);
free(discovery_info);
discovery_info = NULL;
}
+static int __bt_get_bt_adapter_le_device_scan_info_s(
+ bt_adapter_le_device_scan_result_info_s **scan_info,
+ bluetooth_le_device_info_t *source_info)
+{
+
+ BT_CHECK_INPUT_PARAMETER(source_info);
+
+ *scan_info = (bt_adapter_le_device_scan_result_info_s *)malloc(sizeof(bt_adapter_le_device_scan_result_info_s));
+ if (*scan_info == NULL) {
+ return BT_ERROR_OUT_OF_MEMORY;
+ }
+
+ _bt_convert_address_to_string(&((*scan_info)->remote_address), &(source_info->device_address));
+
+ if (source_info->addr_type == 0x02)
+ (*scan_info)->address_type = BT_DEVICE_RANDOM_ADDRESS;
+ else
+ (*scan_info)->address_type = BT_DEVICE_PUBLIC_ADDRESS;
+ (*scan_info)->rssi = (int)source_info->rssi;
+ (*scan_info)->adv_data_len = source_info->adv_ind_data.data_len;
+ if ((*scan_info)->adv_data_len > 0) {
+ (*scan_info)->adv_data = malloc(source_info->adv_ind_data.data_len);
+ memcpy((*scan_info)->adv_data, source_info->adv_ind_data.data.data, source_info->adv_ind_data.data_len);
+ } else {
+ (*scan_info)->adv_data = NULL;
+ }
+
+ (*scan_info)->scan_data_len = source_info->scan_resp_data.data_len;
+ if ((*scan_info)->scan_data_len > 0) {
+ (*scan_info)->scan_data = malloc(source_info->scan_resp_data.data_len);
+ memcpy((*scan_info)->scan_data, source_info->scan_resp_data.data.data, source_info->scan_resp_data.data_len);
+ } else {
+ (*scan_info)->scan_data = NULL;
+ }
+
+ return BT_ERROR_NONE;
+}
+
+static void __bt_free_bt_adapter_le_device_scan_info_s(bt_adapter_le_device_scan_result_info_s *scan_info)
+{
+ if (scan_info == NULL)
+ return;
+
+ if (scan_info->remote_address != NULL)
+ free(scan_info->remote_address);
+
+ if (scan_info->adv_data != NULL)
+ free(scan_info->adv_data);
+ if (scan_info->scan_data != NULL)
+ free(scan_info->scan_data);
+
+ free(scan_info);
+ scan_info = NULL;
+}
+
+#ifndef TIZEN_WEARABLE
+static int __bt_get_bt_adapter_le_device_discovery_info_s(
+ bt_adapter_le_device_discovery_info_s **le_discovery_info,
+ bluetooth_le_device_info_t *source_info)
+{
+
+ BT_CHECK_INPUT_PARAMETER(source_info);
+
+ *le_discovery_info = (bt_adapter_le_device_discovery_info_s *)malloc(sizeof(bt_adapter_le_device_discovery_info_s));
+ if (*le_discovery_info == NULL) {
+ return BT_ERROR_OUT_OF_MEMORY;
+ }
+
+ _bt_convert_address_to_string(&((*le_discovery_info)->remote_address), &(source_info->device_address));
+
+ (*le_discovery_info)->address_type = (int)source_info->addr_type;
+ (*le_discovery_info)->rssi = (int)source_info->rssi;
+ (*le_discovery_info)->adv_data_len = source_info->adv_ind_data.data_len;
+ if ((*le_discovery_info)->adv_data_len > 0) {
+ (*le_discovery_info)->adv_data = malloc(source_info->adv_ind_data.data_len);
+ memcpy((*le_discovery_info)->adv_data, source_info->adv_ind_data.data.data, source_info->adv_ind_data.data_len);
+ } else {
+ (*le_discovery_info)->adv_data = NULL;
+ }
+
+ (*le_discovery_info)->scan_data_len = source_info->scan_resp_data.data_len;
+ if ((*le_discovery_info)->scan_data_len > 0) {
+ (*le_discovery_info)->scan_data = malloc(source_info->scan_resp_data.data_len);
+ memcpy((*le_discovery_info)->scan_data, source_info->scan_resp_data.data.data, source_info->scan_resp_data.data_len);
+ } else {
+ (*le_discovery_info)->scan_data = NULL;
+ }
+
+ return BT_ERROR_NONE;
+}
+
+static void __bt_free_bt_adapter_le_device_discovery_info_s(bt_adapter_le_device_discovery_info_s *discovery_info)
+{
+ if (discovery_info == NULL)
+ return;
+
+ if (discovery_info->remote_address != NULL)
+ free(discovery_info->remote_address);
+
+ if (discovery_info->adv_data != NULL)
+ free(discovery_info->adv_data);
+ if (discovery_info->scan_data != NULL)
+ free(discovery_info->scan_data);
+
+ free(discovery_info);
+ discovery_info = NULL;
+}
+
+#endif
+
+#ifdef BT_ENABLE_LEGACY_GATT_CLIENT
+static int __bt_get_gatt_client_cb_index(int event)
+{
+ switch (event) {
+ case BLUETOOTH_EVENT_GATT_CHAR_VAL_CHANGED:
+ if (_bt_gatt_is_legacy_client_mode())
+ return BT_EVENT_GATT_CLIENT_VALUE_CHANGED_LEGACY;
+ else
+ return BT_EVENT_GATT_CLIENT_VALUE_CHANGED;
+ case BLUETOOTH_EVENT_GATT_READ_CHAR:
+ if (_bt_gatt_is_legacy_client_mode())
+ return BT_EVENT_GATT_CLIENT_READ_CHARACTERISTIC_LEGACY;
+ else
+ return BT_EVENT_GATT_CLIENT_READ_CHARACTERISTIC;
+ case BLUETOOTH_EVENT_GATT_WRITE_CHAR:
+ if (_bt_gatt_is_legacy_client_mode())
+ return BT_EVENT_GATT_CLIENT_WRITE_CHARACTERISTIC_LEGACY;
+ else
+ return BT_EVENT_GATT_CLIENT_WRITE_CHARACTERISTIC;
+ }
+
+ return -1;
+}
+#endif
+
static int __bt_get_cb_index(int event)
{
switch (event) {
case BLUETOOTH_EVENT_ENABLED:
case BLUETOOTH_EVENT_DISABLED:
return BT_EVENT_STATE_CHANGED;
+ case BLUETOOTH_EVENT_LE_ENABLED:
+ case BLUETOOTH_EVENT_LE_DISABLED:
+ return BT_EVENT_LE_STATE_CHANGED;
case BLUETOOTH_EVENT_LOCAL_NAME_CHANGED:
return BT_EVENT_NAME_CHANGED;
case BLUETOOTH_EVENT_DISCOVERABLE_MODE_CHANGED:
return BT_EVENT_VISIBILITY_MODE_CHANGED;
+ case BLUETOOTH_EVENT_DISCOVERABLE_TIMEOUT_CHANGED:
+ return BT_EVENT_VISIBILITY_DURATION_CHANGED;
case BLUETOOTH_EVENT_DISCOVERY_STARTED:
case BLUETOOTH_EVENT_DISCOVERY_FINISHED:
case BLUETOOTH_EVENT_REMOTE_DEVICE_NAME_UPDATED:
return BT_EVENT_DEVICE_DISCOVERY_STATE_CHANGED;
+ case BLUETOOTH_EVENT_LE_DISCOVERY_STARTED:
+ case BLUETOOTH_EVENT_LE_DISCOVERY_FINISHED:
+ case BLUETOOTH_EVENT_REMOTE_LE_DEVICE_FOUND:
+ return BT_EVENT_LE_DEVICE_DISCOVERY_STATE_CHANGED;
case BLUETOOTH_EVENT_BONDING_FINISHED:
return BT_EVENT_BOND_CREATED;
case BLUETOOTH_EVENT_BONDED_DEVICE_REMOVED:
@@ -952,6 +2065,12 @@ static int __bt_get_cb_index(int event)
case BLUETOOTH_EVENT_DEVICE_AUTHORIZED:
case BLUETOOTH_EVENT_DEVICE_UNAUTHORIZED:
return BT_EVENT_AUTHORIZATION_CHANGED;
+ case BLUETOOTH_EVENT_DEVICE_CONNECTED:
+ case BLUETOOTH_EVENT_DEVICE_DISCONNECTED:
+ return BT_EVENT_DEVICE_CONNECTION_STATUS;
+ case BLUETOOTH_EVENT_GATT_CONNECTED:
+ case BLUETOOTH_EVENT_GATT_DISCONNECTED:
+ return BT_EVENT_GATT_CONNECTION_STATUS;
case BLUETOOTH_EVENT_SERVICE_SEARCHED:
return BT_EVENT_SERVICE_SEARCHED;
case BLUETOOTH_EVENT_RFCOMM_DATA_RECEIVED:
@@ -987,7 +2106,7 @@ static int __bt_get_cb_index(int event)
case BLUETOOTH_EVENT_NETWORK_DISCONNECTED:
return BT_EVENT_PAN_CONNECTION_STATE_CHANGED;
case BLUETOOTH_EVENT_HDP_DATA_RECEIVED:
- return BT_EVENT_HDP_DATA_RECIEVED;
+ return BT_EVENT_HDP_DATA_RECEIVED;
case BLUETOOTH_EVENT_HDP_CONNECTED:
return BT_EVENT_HDP_CONNECTED;
case BLUETOOTH_EVENT_HDP_DISCONNECTED:
@@ -1004,14 +2123,123 @@ static int __bt_get_cb_index(int event)
return BT_EVENT_AUDIO_CONNECTION_STATUS;
case BLUETOOTH_EVENT_AG_AUDIO_DISCONNECTED:
return BT_EVENT_AUDIO_CONNECTION_STATUS;
+ case BLUETOOTH_EVENT_TELEPHONY_AUDIO_CONNECTED:
+ return BT_EVENT_AG_SCO_CONNECTION_STATUS;
+ case BLUETOOTH_EVENT_TELEPHONY_AUDIO_DISCONNECTED:
+ return BT_EVENT_AG_SCO_CONNECTION_STATUS;
+ case BLUETOOTH_EVENT_TELEPHONY_ANSWER_CALL:
+ case BLUETOOTH_EVENT_TELEPHONY_RELEASE_CALL:
+ case BLUETOOTH_EVENT_TELEPHONY_REJECT_CALL:
+ return BT_EVENT_AG_CALL_HANDLING_EVENT;
+ case BLUETOOTH_EVENT_TELEPHONY_CHLD_0_RELEASE_ALL_HELD_CALL:
+ case BLUETOOTH_EVENT_TELEPHONY_CHLD_1_RELEASE_ALL_ACTIVE_CALL:
+ case BLUETOOTH_EVENT_TELEPHONY_CHLD_2_ACTIVE_HELD_CALL:
+ case BLUETOOTH_EVENT_TELEPHONY_CHLD_3_MERGE_CALL:
+ case BLUETOOTH_EVENT_TELEPHONY_CHLD_4_EXPLICIT_CALL_TRANSFER:
+ return BT_EVENT_AG_MULTI_CALL_HANDLING_EVENT;
+ case BLUETOOTH_EVENT_TELEPHONY_SEND_DTMF:
+ return BT_EVENT_AG_DTMF_TRANSMITTED;
case BLUETOOTH_EVENT_AV_CONNECTED:
return BT_EVENT_AUDIO_CONNECTION_STATUS;
case BLUETOOTH_EVENT_AV_DISCONNECTED:
return BT_EVENT_AUDIO_CONNECTION_STATUS;
+ case BLUETOOTH_EVENT_AV_SOURCE_CONNECTED:
+ case BLUETOOTH_EVENT_AV_SOURCE_DISCONNECTED:
+ return BT_EVENT_A2DP_SOURCE_CONNECTION_STATUS;
+ case BLUETOOTH_EVENT_AVRCP_CONNECTED:
+ case BLUETOOTH_EVENT_AVRCP_DISCONNECTED:
+ case BLUETOOTH_EVENT_AVRCP_CONTROL_CONNECTED:
+ case BLUETOOTH_EVENT_AVRCP_CONTROL_DISCONNECTED:
+ return BT_EVENT_AVRCP_CONNECTION_STATUS;
+ case BLUETOOTH_EVENT_AVRCP_SETTING_SHUFFLE_STATUS:
+ case BLUETOOTH_EVENT_AVRCP_CONTROL_SHUFFLE_STATUS:
+ return BT_EVENT_AVRCP_SHUFFLE_MODE_CHANGED;
+ case BLUETOOTH_EVENT_AVRCP_SETTING_EQUALIZER_STATUS:
+ case BLUETOOTH_EVENT_AVRCP_CONTROL_EQUALIZER_STATUS:
+ return BT_EVENT_AVRCP_EQUALIZER_STATE_CHANGED;
+ case BLUETOOTH_EVENT_AVRCP_SETTING_REPEAT_STATUS:
+ case BLUETOOTH_EVENT_AVRCP_CONTROL_REPEAT_STATUS:
+ return BT_EVENT_AVRCP_REPEAT_MODE_CHANGED;
+ case BLUETOOTH_EVENT_AVRCP_SETTING_SCAN_STATUS:
+ case BLUETOOTH_EVENT_AVRCP_CONTROL_SCAN_STATUS:
+ return BT_EVENT_AVRCP_SCAN_MODE_CHANGED;
+ case BLUETOOTH_EVENT_AVRCP_SONG_POSITION_STATUS:
+ return BT_EVENT_AVRCP_SONG_POSITION_CHANGED;
+ case BLUETOOTH_EVENT_AVRCP_PLAY_STATUS_CHANGED:
+ return BT_EVENT_AVRCP_PLAY_STATUS_CHANGED;
+ case BLUETOOTH_EVENT_AVRCP_TRACK_CHANGED:
+ return BT_EVENT_AVRCP_TRACK_INFO_CHANGED;
case BLUETOOTH_HID_CONNECTED:
return BT_EVENT_HID_CONNECTION_STATUS;
case BLUETOOTH_HID_DISCONNECTED:
return BT_EVENT_HID_CONNECTION_STATUS;
+#ifdef BT_ENABLE_LEGACY_GATT_CLIENT
+ case BLUETOOTH_EVENT_GATT_SVC_CHAR_DISCOVERED:
+ return BT_EVENT_GATT_CLIENT_CHARACTERISTIC_DISCOVERED_LEGACY;
+ case BLUETOOTH_EVENT_GATT_SVC_CHAR_DESC_DISCOVERED:
+ return BT_EVENT_GATT_CLIENT_CHARACTERISTIC_DESCRIPTOR_DISCOVERED_LEGACY;
+ case BLUETOOTH_EVENT_GATT_CHAR_VAL_CHANGED:
+ case BLUETOOTH_EVENT_GATT_READ_CHAR:
+ case BLUETOOTH_EVENT_GATT_WRITE_CHAR:
+ return __bt_get_gatt_client_cb_index(event);
+#else
+ case BLUETOOTH_EVENT_GATT_CHAR_VAL_CHANGED:
+ return BT_EVENT_GATT_CLIENT_VALUE_CHANGED;
+ case BLUETOOTH_EVENT_GATT_READ_CHAR:
+ return BT_EVENT_GATT_CLIENT_READ_CHARACTERISTIC;
+ case BLUETOOTH_EVENT_GATT_WRITE_CHAR:
+ return BT_EVENT_GATT_CLIENT_WRITE_CHARACTERISTIC;
+#endif
+ case BLUETOOTH_EVENT_GATT_READ_DESC:
+ return BT_EVENT_GATT_CLIENT_READ_DESCRIPTOR;
+ case BLUETOOTH_EVENT_GATT_WRITE_DESC:
+ return BT_EVENT_GATT_CLIENT_WRITE_DESCRIPTOR;
+ case BLUETOOTH_EVENT_GATT_SERVER_READ_REQUESTED:
+ return BT_EVENT_GATT_SERVER_READ_REQUESTED;
+ case BLUETOOTH_EVENT_ADVERTISING_STARTED:
+ case BLUETOOTH_EVENT_ADVERTISING_STOPPED:
+ return BT_EVENT_ADVERTISING_STATE_CHANGED;
+ case BLUETOOTH_EVENT_MANUFACTURER_DATA_CHANGED:
+ return BT_EVENT_MANUFACTURER_DATA_CHANGED;
+ case BLUETOOTH_EVENT_CONNECTABLE_CHANGED:
+ return BT_EVENT_CONNECTABLE_CHANGED_EVENT;
+#ifdef TIZEN_WEARABLE
+ case BLUETOOTH_PBAP_CONNECTED:
+ return BT_EVENT_PBAP_CONNECTION_STATUS;
+ case BLUETOOTH_PBAP_PHONEBOOK_SIZE:
+ return BT_EVENT_PBAP_PHONEBOOK_SIZE;
+ case BLUETOOTH_PBAP_PHONEBOOK_PULL:
+ return BT_EVENT_PBAP_PHONEBOOK_PULL;
+ case BLUETOOTH_PBAP_VCARD_LIST:
+ return BT_EVENT_PBAP_VCARD_LIST;
+ case BLUETOOTH_PBAP_VCARD_PULL:
+ return BT_EVENT_PBAP_VCARD_PULL;
+ case BLUETOOTH_PBAP_PHONEBOOK_SEARCH:
+ return BT_EVENT_PBAP_PHONEBOOK_SEARCH;
+ case BLUETOOTH_EVENT_HF_CONNECTED:
+ return BT_EVENT_AUDIO_CONNECTION_STATUS;
+ case BLUETOOTH_EVENT_HF_DISCONNECTED:
+ return BT_EVENT_AUDIO_CONNECTION_STATUS;
+ case BLUETOOTH_EVENT_HF_AUDIO_CONNECTED:
+ return BT_EVENT_HF_SCO_CONNECTION_STATUS;
+ case BLUETOOTH_EVENT_HF_AUDIO_DISCONNECTED:
+ return BT_EVENT_HF_SCO_CONNECTION_STATUS;
+ case BLUETOOTH_EVENT_HF_RING_INDICATOR:
+ case BLUETOOTH_EVENT_HF_CALL_TERMINATED:
+ case BLUETOOTH_EVENT_HF_CALL_STARTED:
+ case BLUETOOTH_EVENT_HF_CALL_ENDED:
+ case BLUETOOTH_EVENT_HF_VOICE_RECOGNITION_ENABLED:
+ case BLUETOOTH_EVENT_HF_VOICE_RECOGNITION_DISABLED:
+ case BLUETOOTH_EVENT_HF_CALL_WAITING:
+ case BLUETOOTH_EVENT_HF_CALL_ON_HOLD:
+ case BLUETOOTH_EVENT_HF_CALL_UNHOLD:
+ case BLUETOOTH_EVENT_HF_CALL_SWAPPED:
+ return BT_EVENT_HF_CALL_HANDLING_EVENT;
+ case BLUETOOTH_EVENT_HF_VOLUME_SPEAKER:
+ return BT_EVENT_HF_SPEAKER_GAIN_CHANGE;
+ case BLUETOOTH_EVENT_HF_CALL_STATUS:
+ return BT_EVENT_HF_CALL_STATUS_UPDATED_EVENT;
+#endif
default:
return -1;
}
@@ -1028,3 +2256,228 @@ static void __bt_convert_lower_to_upper(char *origin)
}
}
}
+
+static void bt_gatt_client_handle_destroy(bt_gatt_h gatt_handle)
+{
+ if (gatt_handle)
+ bt_gatt_destroy(gatt_handle);
+}
+
+int _bt_gatt_client_update_all(bt_gatt_client_h client)
+{
+ bt_gatt_client_s *client_s = client;
+ bluetooth_device_address_t addr_hex = { {0, } };
+ bt_gatt_handle_info_t *prim_svc = NULL;
+ int ret;
+ int i;
+ int j;
+ GSList *svc_list = NULL;
+
+ prim_svc = g_new0(bt_gatt_handle_info_t, 1);
+
+ _bt_convert_address_to_hex(&addr_hex, client_s->remote_address);
+ ret = bluetooth_gatt_get_primary_services(&addr_hex, prim_svc);
+ ret = _bt_get_error_code(ret);
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("bluetooth_gatt_get_primary_services is failed");
+ return ret;
+ }
+
+ if (prim_svc->count == 0)
+ goto done;
+
+ for (i = 0; i < prim_svc->count; i++) {
+ bt_gatt_service_s *svc = NULL;
+ bt_gatt_service_property_t property;
+
+ if (prim_svc->handle[i] == NULL)
+ continue;
+ BT_DBG("handle: %s", prim_svc->handle[i]);
+
+ memset(&property, 0x00, sizeof(property));
+
+ ret = bluetooth_gatt_get_service_property(
+ prim_svc->handle[i], &property);
+ ret = _bt_get_error_code(ret);
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("bluetooth_gatt_get_service_property is failed");
+ continue;
+ }
+
+ /* Add primary service */
+ ret = bt_gatt_service_create(property.uuid,
+ BT_GATT_SERVICE_TYPE_PRIMARY,
+ (bt_gatt_h *)&svc);
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("bt_gatt_service_create is failed");
+ continue;
+ }
+
+ svc->role = BT_GATT_ROLE_CLIENT;
+ svc->parent = (void *)client_s;
+ svc->path = g_strdup(prim_svc->handle[i]);
+
+ svc_list = g_slist_append(svc_list, svc);
+
+ if (property.include_handles.count != 0 && property.include_handles.handle) {
+ GSList *include_list = NULL;
+ /* Add included services */
+ for (j = 0; j < property.include_handles.count; j++) {
+ bt_gatt_service_s *sec_svc = NULL;
+ bt_gatt_service_property_t sec_property;
+
+ if (property.include_handles.handle[j] == NULL)
+ continue;
+
+ memset(&sec_property, 0x00, sizeof(sec_property));
+
+ ret = bluetooth_gatt_get_service_property(
+ property.include_handles.handle[j],
+ &sec_property);
+ ret = _bt_get_error_code(ret);
+ if (ret != BT_ERROR_NONE)
+ continue;
+
+ ret = bt_gatt_service_create(sec_property.uuid,
+ BT_GATT_SERVICE_TYPE_SECONDARY,
+ (bt_gatt_h *)&sec_svc);
+ if (ret != BT_ERROR_NONE)
+ continue;
+
+ sec_svc->role = BT_GATT_ROLE_CLIENT;
+ sec_svc->parent = (void *)svc;
+ sec_svc->is_included_service = true;
+ sec_svc->path = g_strdup(property.include_handles.handle[j]);
+
+ include_list = g_slist_append(include_list, sec_svc);
+ bluetooth_gatt_free_service_property(&sec_property);
+ }
+
+ g_slist_free_full(svc->included_services,
+ bt_gatt_client_handle_destroy);
+ svc->included_services = include_list;
+ }
+ if (property.char_handle.count != 0 && property.char_handle.handle) {
+
+ /* Add characteristics */
+ __bt_gatt_client_update_characteristics(property.char_handle, svc);
+ }
+ bluetooth_gatt_free_service_property(&property);
+ }
+ g_strfreev(prim_svc->handle);
+
+ g_free(prim_svc);
+
+ if (svc_list == NULL)
+ return BT_ERROR_OPERATION_FAILED;
+
+done:
+ g_slist_free_full(client_s->services,
+ bt_gatt_client_handle_destroy);
+
+ client_s->services = svc_list;
+
+ return BT_ERROR_NONE;
+}
+
+static int __bt_gatt_client_update_characteristics(bt_gatt_handle_info_t char_handles,
+ bt_gatt_service_s *service)
+{
+ GSList *chr_list = NULL;
+ int i;
+
+ for (i = 0; i < char_handles.count; i++) {
+ bt_gatt_characteristic_s *chr = NULL;
+ bt_gatt_char_property_t char_property;
+ int ret;
+
+ memset(&char_property, 0x00, sizeof(char_property));
+ ret = bluetooth_gatt_get_characteristics_property(
+ char_handles.handle[i], &char_property);
+ ret = _bt_get_error_code(ret);
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("bluetooth_gatt_get_characteristics_property is failed");
+ goto next;
+ }
+
+ ret = bt_gatt_characteristic_create(char_property.uuid, 0,
+ char_property.permission, (char *)char_property.val,
+ (int)char_property.val_len, (bt_gatt_h *)&chr);
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("bt_gatt_characteristic_create is failed");
+ goto next;
+ }
+
+ if (char_property.permission & BT_GATT_PROPERTY_WRITE_WITHOUT_RESPONSE)
+ chr->write_type = BT_GATT_WRITE_TYPE_WRITE_NO_RESPONSE;
+ else if (char_property.permission & BT_GATT_PROPERTY_WRITE)
+ chr->write_type = BT_GATT_WRITE_TYPE_WRITE;
+
+ chr->path = g_strdup(char_handles.handle[i]);
+ BT_DBG("path : %s", chr->path);
+ chr->parent = (void *)service;
+ chr->role = BT_GATT_ROLE_CLIENT;
+
+ if (char_property.char_desc_handle.count != 0 && char_property.char_desc_handle.handle) {
+
+ /* Add characteristics descriptor */
+ __bt_gatt_client_update_descriptors(char_property.char_desc_handle, chr);
+ }
+
+ chr_list = g_slist_append(chr_list, chr);
+next:
+ bluetooth_gatt_free_char_property(&char_property);
+ }
+
+ g_slist_free_full(service->characteristics,
+ bt_gatt_client_handle_destroy);
+ service->characteristics = chr_list;
+ return BT_ERROR_NONE;
+}
+
+static int __bt_gatt_client_update_descriptors(bt_gatt_handle_info_t desc_handles,
+ bt_gatt_characteristic_s *characteristic)
+
+{
+ GSList *desc_list = NULL;
+ int i;
+
+ /* Add characteristics descriptor */
+
+ for (i = 0; i < desc_handles.count; i++) {
+ bt_gatt_descriptor_s *desc = NULL;
+ bt_gatt_char_descriptor_property_t desc_property;
+ int ret;
+
+ memset(&desc_property, 0x00, sizeof(desc_property));
+ ret = bluetooth_gatt_get_char_descriptor_property(
+ desc_handles.handle[i], &desc_property);
+ ret = _bt_get_error_code(ret);
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("bluetooth_gatt_get_char_descriptor_property is failed");
+ goto next;
+ }
+
+ ret = bt_gatt_descriptor_create(desc_property.uuid, 0,
+ (char*)desc_property.val, (int)desc_property.val_len,
+ (bt_gatt_h *)&desc);
+
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("bt_gatt_characteristic_create is failed");
+ goto next;
+ }
+ desc->path = g_strdup(desc_handles.handle[i]);
+ BT_DBG("path : %s", desc->path);
+ desc->parent = (void *)characteristic;
+ desc->role = BT_GATT_ROLE_CLIENT;
+ desc_list = g_slist_append(desc_list, desc);
+
+next:
+ bluetooth_gatt_free_desc_property(&desc_property);
+ }
+
+ g_slist_free_full(characteristic->descriptors,
+ bt_gatt_client_handle_destroy);
+ characteristic->descriptors = desc_list;
+ return BT_ERROR_NONE;
+}
diff --git a/src/bluetooth-device.c b/src/bluetooth-device.c
index a242617..15ab193 100644
--- a/src/bluetooth-device.c
+++ b/src/bluetooth-device.c
@@ -20,25 +20,41 @@
#include <bluetooth-api.h>
#include "bluetooth.h"
+#include "bluetooth_internal.h"
#include "bluetooth_private.h"
-#ifdef LOG_TAG
-#undef LOG_TAG
-#endif
-#define LOG_TAG "TIZEN_N_BLUETOOTH"
-
int bt_device_create_bond(const char *device_address)
{
bluetooth_device_address_t addr_hex = { {0,} };
int error_code = BT_ERROR_NONE;
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(device_address);
_bt_convert_address_to_hex(&addr_hex, device_address);
error_code = _bt_get_error_code(bluetooth_bond_device(&addr_hex));
if (error_code != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__, _bt_convert_error_to_string(error_code), error_code);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code), error_code);
+ }
+
+ return error_code;
+}
+
+int bt_device_create_bond_by_type(const char *device_address,
+ bt_device_connection_link_type_e conn_type)
+{
+ bluetooth_device_address_t addr_hex = { {0,} };
+ int error_code = BT_ERROR_NONE;
+
+ BT_CHECK_BT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(device_address);
+
+ _bt_convert_address_to_hex(&addr_hex, device_address);
+ error_code = _bt_get_error_code(bluetooth_bond_device_by_type(&addr_hex, conn_type));
+ if (error_code != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code), error_code);
}
return error_code;
@@ -48,10 +64,11 @@ int bt_device_cancel_bonding(void)
{
int error_code = BT_ERROR_NONE;
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
error_code = _bt_get_error_code(bluetooth_cancel_bonding());
if (error_code != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__, _bt_convert_error_to_string(error_code), error_code);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code), error_code);
}
return error_code;
@@ -62,13 +79,14 @@ int bt_device_destroy_bond(const char *device_address)
bluetooth_device_address_t addr_hex = { {0,} };
int error_code = BT_ERROR_NONE;
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(device_address);
_bt_convert_address_to_hex(&addr_hex, device_address);
error_code = _bt_get_error_code(bluetooth_unbond_device(&addr_hex));
if (error_code != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__, _bt_convert_error_to_string(error_code), error_code);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code), error_code);
}
return error_code;
@@ -79,6 +97,7 @@ int bt_device_set_alias(const char *device_address, const char *alias)
bluetooth_device_address_t addr_hex = { {0,} };
int error_code = BT_ERROR_NONE;
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(device_address);
BT_CHECK_INPUT_PARAMETER(alias);
@@ -86,7 +105,7 @@ int bt_device_set_alias(const char *device_address, const char *alias)
_bt_convert_address_to_hex(&addr_hex, device_address);
error_code = _bt_get_error_code(bluetooth_set_alias(&addr_hex, alias));
if (error_code != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__, _bt_convert_error_to_string(error_code), error_code);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code), error_code);
}
return error_code;
}
@@ -97,6 +116,7 @@ int bt_device_set_authorization(const char *device_address, bt_device_authorizat
gboolean trusted = FALSE;
int error_code = BT_ERROR_NONE;
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(device_address);
@@ -106,7 +126,7 @@ int bt_device_set_authorization(const char *device_address, bt_device_authorizat
error_code = _bt_get_error_code(bluetooth_authorize_device(&addr_hex, trusted));
if (error_code != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__, _bt_convert_error_to_string(error_code), error_code);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code), error_code);
}
return error_code;
}
@@ -116,18 +136,19 @@ int bt_device_start_service_search(const char *device_address)
bluetooth_device_address_t addr_hex = { {0,} };
int ret = 0;
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(device_address);
_bt_convert_address_to_hex(&addr_hex, device_address);
ret = _bt_get_error_code(bluetooth_search_service(&addr_hex));
- // In service search, BT_ERROR_SERVICE_SEARCH_FAILED is returned instead of BT_ERROR_OPERATION_FAILED.
+ /* In service search, BT_ERROR_SERVICE_SEARCH_FAILED is returned instead of BT_ERROR_OPERATION_FAILED. */
if (ret == BT_ERROR_OPERATION_FAILED)
ret = BT_ERROR_SERVICE_SEARCH_FAILED;
if (ret != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__, _bt_convert_error_to_string(ret), ret);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
}
return ret;
}
@@ -136,73 +157,178 @@ int bt_device_cancel_service_search(void)
{
int ret = 0;
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
ret = _bt_get_error_code(bluetooth_cancel_service_search());
if (ret != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__, _bt_convert_error_to_string(ret), ret);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
}
return ret;
}
-int bt_device_set_bond_created_cb(bt_device_bond_created_cb callback, void *user_data)
+int bt_device_foreach_connected_profiles(const char *remote_address, bt_device_connected_profile callback, void *user_data)
{
- int ret = BT_ERROR_NONE;
-
+ bluetooth_device_address_t addr_hex = { {0,} };
+ gboolean is_connected = FALSE;
+ int ret;
+ int i = 0;
+ int profiles[] = {BT_PROFILE_RFCOMM, BT_PROFILE_A2DP,
+ BT_PROFILE_HSP, BT_PROFILE_HID, BT_PROFILE_NAP,
+ BT_PROFILE_AG, BT_PROFILE_GATT, BT_PROFILE_NAP_SERVER,
+ 0};
+
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(remote_address);
BT_CHECK_INPUT_PARAMETER(callback);
- _bt_set_cb(BT_EVENT_BOND_CREATED, callback, user_data);
+
+ _bt_convert_address_to_hex(&addr_hex, remote_address);
+
+ while (profiles[i] != 0) {
+ ret = _bt_get_error_code(bluetooth_is_device_connected(&addr_hex,
+ profiles[i],
+ &is_connected));
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ return ret;
+ }
+
+ if (is_connected == TRUE) {
+ if (!callback(profiles[i], user_data))
+ break;
+ }
+
+ i++;
+ }
+
+ return BT_ERROR_NONE;
+}
+
+int bt_device_is_profile_connected(const char *remote_address, bt_profile_e bt_profile,
+ bool *connected_status)
+{
+ bluetooth_device_address_t addr_hex = { {0,} };
+ int ret;
+ gboolean is_connected = FALSE;
+
+ BT_CHECK_BT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(remote_address);
+
+ _bt_convert_address_to_hex(&addr_hex, remote_address);
+
+ ret = _bt_get_error_code(bluetooth_is_device_connected(&addr_hex, bt_profile,
+ &is_connected));
+ *connected_status = is_connected ? true : false;
+
if (ret != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__, _bt_convert_error_to_string(ret), ret);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ return ret;
}
return ret;
+
}
-int bt_device_set_bond_destroyed_cb(bt_device_bond_destroyed_cb callback, void *user_data)
+int bt_device_set_bond_created_cb(bt_device_bond_created_cb callback, void *user_data)
{
- int ret = BT_ERROR_NONE;
+ BT_CHECK_BT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(callback);
+ _bt_set_cb(BT_EVENT_BOND_CREATED, callback, user_data);
+
+ return BT_ERROR_NONE;
+}
+int bt_device_set_bond_destroyed_cb(bt_device_bond_destroyed_cb callback, void *user_data)
+{
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(callback);
_bt_set_cb(BT_EVENT_BOND_DESTROYED, callback, user_data);
- if (ret != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__, _bt_convert_error_to_string(ret), ret);
- }
- return ret;
+ return BT_ERROR_NONE;
}
int bt_device_set_authorization_changed_cb(bt_device_authorization_changed_cb callback, void *user_data)
{
- int ret = BT_ERROR_NONE;
-
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(callback);
_bt_set_cb(BT_EVENT_AUTHORIZATION_CHANGED, callback, user_data);
- if (ret != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__, _bt_convert_error_to_string(ret), ret);
- }
- return ret;
+ return BT_ERROR_NONE;
}
int bt_device_set_service_searched_cb(bt_device_service_searched_cb callback, void *user_data)
{
- int ret = BT_ERROR_NONE;
-
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(callback);
_bt_set_cb(BT_EVENT_SERVICE_SEARCHED, callback, user_data);
+
+ return BT_ERROR_NONE;
+}
+
+int bt_device_get_connection_state(const char *remote_address,
+ bt_device_connection_link_type_e link_type, bool *connected)
+{
+ int ret;
+ bluetooth_device_address_t addr_hex = { {0,} };
+ bluetooth_connected_link_t connected_link = BLUETOOTH_CONNECTED_LINK_NONE;
+
+ BT_CHECK_BT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(remote_address);
+ BT_CHECK_INPUT_PARAMETER(connected);
+
+ if (link_type != BT_DEVICE_CONNECTION_LINK_BREDR &&
+ link_type != BT_DEVICE_CONNECTION_LINK_LE)
+ return BT_ERROR_INVALID_PARAMETER;
+
+ _bt_convert_address_to_hex(&addr_hex, remote_address);
+
+ ret = _bt_get_error_code(bluetooth_get_connected_link_type(&addr_hex, &connected_link));
if (ret != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__, _bt_convert_error_to_string(ret), ret);
+ BT_ERR("%s(0x%08x) : Failed to run function",
+ _bt_convert_error_to_string(ret), ret);
+ return ret;
}
- return ret;
+ if (connected_link == BLUETOOTH_CONNECTED_LINK_BREDR_LE) {
+ *connected = true;
+ return BT_ERROR_NONE;
+ }
+
+ if (link_type == BT_DEVICE_CONNECTION_LINK_BREDR) {
+ if (connected_link == BLUETOOTH_CONNECTED_LINK_BREDR)
+ *connected = true;
+ else
+ *connected = false;
+ } else if (link_type == BT_DEVICE_CONNECTION_LINK_LE) {
+ if (connected_link == BLUETOOTH_CONNECTED_LINK_LE)
+ *connected = true;
+ else
+ *connected = false;
+ }
+
+ return BT_ERROR_NONE;
+}
+
+int bt_device_set_connection_state_changed_cb(bt_device_connection_state_changed_cb callback, void *user_data)
+{
+ BT_CHECK_BT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(callback);
+ _bt_set_cb(BT_EVENT_DEVICE_CONNECTION_STATUS, callback, user_data);
+
+ return BT_ERROR_NONE;
}
int bt_device_unset_bond_created_cb(void)
{
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
_bt_unset_cb(BT_EVENT_BOND_CREATED);
return BT_ERROR_NONE;
@@ -210,6 +336,7 @@ int bt_device_unset_bond_created_cb(void)
int bt_device_unset_bond_destroyed_cb(void)
{
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
_bt_unset_cb(BT_EVENT_BOND_DESTROYED);
return BT_ERROR_NONE;
@@ -217,6 +344,7 @@ int bt_device_unset_bond_destroyed_cb(void)
int bt_device_unset_authorization_changed_cb(void)
{
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
_bt_unset_cb(BT_EVENT_AUTHORIZATION_CHANGED);
return BT_ERROR_NONE;
@@ -224,8 +352,229 @@ int bt_device_unset_authorization_changed_cb(void)
int bt_device_unset_service_searched_cb(void)
{
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
_bt_unset_cb(BT_EVENT_SERVICE_SEARCHED);
return BT_ERROR_NONE;
}
+int bt_device_unset_connection_state_changed_cb(void)
+{
+ BT_CHECK_BT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ _bt_unset_cb(BT_EVENT_DEVICE_CONNECTION_STATUS);
+ return BT_ERROR_NONE;
+}
+
+int bt_device_le_conn_update(const char *device_address,
+ const bt_le_conn_update_s *parameters)
+{
+ bluetooth_device_address_t addr_hex = { {0,} };
+ bluetooth_le_conn_update_t param= { 0 };
+ int ret = BT_ERROR_NONE;
+
+ BT_CHECK_BT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(device_address);
+ BT_CHECK_INPUT_PARAMETER(parameters);
+
+ _bt_convert_address_to_hex(&addr_hex, device_address);
+ param.interval_min = parameters->interval_min;
+ param.interval_max = parameters->interval_max;
+ param.latency = parameters->latency;
+ param.time_out = parameters->time_out;
+
+ ret = _bt_get_error_code(bluetooth_le_conn_update(&addr_hex, &param));
+
+ if (BT_ERROR_NONE != ret) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ }
+
+ return ret;
+}
+
+int bt_device_get_service_mask_from_uuid_list(char **uuids,
+ int no_of_service,
+ bt_service_class_t *service_mask_list)
+{
+ int i = 0;
+ unsigned int service = 0;
+ char **parts = NULL;
+ bt_service_class_t service_mask = 0;
+
+ BT_CHECK_BT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(uuids);
+ BT_CHECK_INPUT_PARAMETER(service_mask_list);
+
+ BT_DBG("Get service mask from uuid list");
+ BT_DBG("no_of_service = %d", no_of_service);
+
+ for (i = 0; i < no_of_service; i++) {
+ parts = g_strsplit(uuids[i], "-", -1);
+
+ if (parts == NULL || parts[0] == NULL) {
+ g_strfreev(parts);
+ continue;
+ }
+
+ service = g_ascii_strtoull(parts[0], NULL, 16);
+ g_strfreev(parts);
+
+ switch (service) {
+ case BLUETOOTH_SPP_PROFILE_UUID:
+ service_mask |= BT_SC_SPP_SERVICE_MASK;
+ break;
+
+ case BLUETOOTH_LAP_PROFILE_UUID:
+ service_mask |= BT_SC_LAP_SERVICE_MASK;
+ break;
+
+ case BLUETOOTH_DUN_PROFILE_UUID:
+ service_mask |= BT_SC_DUN_SERVICE_MASK;
+ break;
+
+ case BLUETOOTH_OBEX_IR_MC_SYNC_SERVICE_UUID:
+ service_mask |= BT_SC_SYNC_SERVICE_MASK;
+ break;
+
+ case BLUETOOTH_OBEX_OBJECT_PUSH_SERVICE_UUID:
+ service_mask |= BT_SC_OPP_SERVICE_MASK;
+ break;
+
+ case BLUETOOTH_OBEX_FILE_TRANSFER_UUID:
+ service_mask |= BT_SC_FTP_SERVICE_MASK;
+ break;
+
+ case BLUETOOTH_HS_PROFILE_UUID:
+ service_mask |= BT_SC_HSP_SERVICE_MASK;
+ break;
+
+ case BLUETOOTH_CTP_PROFILE_UUID:
+ service_mask |= BT_SC_CTP_SERVICE_MASK;
+ break;
+
+ case BLUETOOTH_AUDIO_SOURCE_UUID:
+ service_mask |= BT_SC_A2DP_SOURCE_SERVICE_MASK;
+ break;
+
+ case BLUETOOTH_AUDIO_SINK_UUID:
+ service_mask |= BT_SC_A2DP_SERVICE_MASK;
+ break;
+
+ case BLUETOOTH_VIDEO_SOURCE_UUID:
+ service_mask |= BT_SC_NONE;
+ break;
+
+ case BLUETOOTH_VIDEO_SINK_UUID:
+ service_mask |= BT_SC_NONE;
+ break;
+
+ case BLUETOOTH_AV_REMOTE_CONTROL_TARGET_UUID:
+ service_mask |= BT_SC_NONE;
+ break;
+
+ case BLUETOOTH_ADVANCED_AUDIO_PROFILE_UUID:
+ service_mask |= BT_SC_A2DP_SERVICE_MASK;
+ break;
+
+ case BLUETOOTH_AV_REMOTE_CONTROL_UUID:
+ service_mask |= BT_SC_AVRCP_SERVICE_MASK;
+ break;
+
+ case BLUETOOTH_ICP_PROFILE_UUID:
+ service_mask |= BT_SC_ICP_SERVICE_MASK;
+ break;
+
+ case BLUETOOTH_FAX_PROFILE_UUID:
+ service_mask |= BT_SC_FAX_SERVICE_MASK;
+ break;
+
+ case BLUETOOTH_HEADSET_AG_SERVICE_UUID:
+ service_mask |= BT_SC_NONE; /* BT_SC_HSP_SERVICE_MASK */
+ break;
+
+ case BLUETOOTH_PAN_PANU_PROFILE_UUID:
+ service_mask |= BT_SC_PANU_SERVICE_MASK;
+ break;
+
+ case BLUETOOTH_PAN_NAP_PROFILE_UUID:
+ service_mask |= BT_SC_NAP_SERVICE_MASK;
+ break;
+
+ case BLUETOOTH_PAN_GN_PROFILE_UUID:
+ service_mask |= BT_SC_GN_SERVICE_MASK;
+ break;
+
+ case BLUETOOTH_REFERENCE_PRINTING:
+ service_mask |= BT_SC_NONE;
+ break;
+
+ case BLUETOOTH_OBEX_IMAGING_UUID:
+ service_mask |= BT_SC_NONE;
+ break;
+
+ case BLUETOOTH_OBEX_IMAGING_RESPONDER_UUID:
+ service_mask |= BT_SC_BIP_SERVICE_MASK;
+ break;
+
+ case BLUETOOTH_HF_PROFILE_UUID:
+ service_mask |= BT_SC_HFP_SERVICE_MASK;
+ break;
+
+ case BLUETOOTH_HFG_PROFILE_UUID:
+ service_mask |= BT_SC_NONE;
+ break;
+
+ case BLUETOOTH_DIRECT_PRINTING_REFERENCE_OBJ_UUID:
+ service_mask |= BT_SC_NONE;
+ break;
+
+ case BLUETOOTH_BASIC_PRINTING:
+ service_mask |= BT_SC_NONE;
+ break;
+
+ case BLUETOOTH_HID_PROFILE_UUID:
+ service_mask |= BT_SC_HID_SERVICE_MASK;
+ break;
+
+ case BLUETOOTH_SIM_ACCESS_PROFILE_UUID:
+ service_mask |= BT_SC_SAP_SERVICE_MASK;
+ break;
+
+ case BLUETOOTH_OBEX_PBA_PROFILE_UUID:
+ service_mask |= BT_SC_PBAP_SERVICE_MASK;
+ break;
+
+ case BLUETOOTH_OBEX_BPPS_PROFILE_UUID:
+ service_mask |= BT_SC_BPP_SERVICE_MASK;
+ break;
+
+ case BLUETOOTH_PNP_INFORMATION_UUID:
+ service_mask |= BT_SC_NONE;
+ break;
+
+ case BLUETOOTH_OBEX_PRINTING_STATUS_UUID:
+ service_mask |= BT_SC_BPP_SERVICE_MASK;
+ break;
+
+ case BLUETOOTH_HCR_PROFILE_UUID:
+ service_mask |= BT_SC_NONE;
+ break;
+
+ case BLUETOOTH_OBEX_SYNCML_TRANSFER_UUID:
+ service_mask |= BT_SC_NONE;
+ break;
+
+ default:
+ break;
+ }
+
+ }
+
+ *service_mask_list = service_mask;
+ BT_DBG("service_mask = %x, service_mask_list = %x", service_mask,
+ service_mask_list);
+
+ return BT_ERROR_NONE;
+}
diff --git a/src/bluetooth-gatt.c b/src/bluetooth-gatt.c
new file mode 100755
index 0000000..aa8ae45
--- /dev/null
+++ b/src/bluetooth-gatt.c
@@ -0,0 +1,2481 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdbool.h>
+#include <math.h>
+#include <dlog.h>
+#include <bluetooth-api.h>
+
+#include "bluetooth.h"
+#include "bluetooth_private.h"
+#include "bluetooth_internal.h"
+#include "bluetooth_type_internal.h"
+
+#define BT_ADDR_STR_LEN 17
+
+static GSList *gatt_client_list = NULL;
+
+static GSList *gatt_server_list = NULL;
+static bool is_gatt_server_initialized = false;
+
+#ifdef TIZEN_GATT_DISABLE
+#define BT_CHECK_GATT_SUPPORT() \
+ { \
+ BT_CHECK_BT_SUPPORT(); \
+ LOGE("[%s] NOT_SUPPORTED(0x%08x)", __FUNCTION__, BT_ERROR_NOT_SUPPORTED); \
+ return BT_ERROR_NOT_SUPPORTED; \
+ }
+#else
+#define BT_CHECK_GATT_SUPPORT()
+#endif
+
+#define BT_CHECK_GATT_SERVER_INIT_STATUS() \
+ if (__bt_check_gatt_server_init_status() == BT_ERROR_NOT_INITIALIZED) \
+ { \
+ LOGE("[%s] NOT_INITIALIZED(0x%08x)", __FUNCTION__, BT_ERROR_NOT_INITIALIZED); \
+ return BT_ERROR_NOT_INITIALIZED; \
+ }
+
+int __bt_check_gatt_server_init_status(void)
+{
+ if (is_gatt_server_initialized != true) {
+ BT_ERR("NOT_INITIALIZED(0x%08x)", BT_ERROR_NOT_INITIALIZED);
+ return BT_ERROR_NOT_INITIALIZED;
+ }
+
+ return BT_ERROR_NONE;
+}
+
+static char *__convert_uuid_to_uuid128(const char *uuid)
+{
+ int len;
+ char *uuid128;
+
+ len = strlen(uuid);
+
+ switch (len) {
+ case 4: /* UUID 16bits */
+ uuid128 = g_strdup_printf("0000%s-0000-1000-8000-00805F9B34FB", uuid);
+ break;
+
+ case 8: /* UUID 32bits */
+ uuid128 = g_strdup_printf("%s-0000-1000-8000-00805F9B34FB", uuid);
+ break;
+
+ case 36: /* UUID 128bits */
+ uuid128 = strdup(uuid);
+ break;
+
+ default:
+ return NULL;
+ }
+
+ return uuid128;
+}
+
+static int __get_gatt_handle_by_uuid(GSList *list, const char *uuid,
+ bt_gatt_h *gatt_handle)
+{
+ GSList *l;
+ char *uuid128_a;
+ char *uuid128_b;
+
+ uuid128_a = __convert_uuid_to_uuid128(uuid);
+ if (uuid128_a == NULL) {
+ BT_ERR("Wrong type of uuid : %s", uuid);
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ for (l = list; l; l = g_slist_next(l)) {
+ bt_gatt_common_s *common = (bt_gatt_common_s *)l->data;
+
+ uuid128_b = __convert_uuid_to_uuid128(common->uuid);
+ if (g_ascii_strcasecmp(uuid128_a, uuid128_b) == 0) {
+ g_free(uuid128_b);
+ break;
+ }
+
+ g_free(uuid128_b);
+ }
+
+ if (!l)
+ return BT_ERROR_NO_DATA;
+
+ *gatt_handle = l->data;
+
+ return BT_ERROR_NONE;
+}
+
+const GSList* _bt_gatt_get_client_list(void)
+{
+ return gatt_client_list;
+}
+
+const GSList* _bt_gatt_get_server_list(void)
+{
+ return gatt_server_list;
+}
+
+#ifdef BT_ENABLE_LEGACY_GATT_CLIENT
+bool _bt_gatt_is_legacy_client_mode(void)
+{
+ if (gatt_client_list) {
+ BT_INFO("New GATT Client APIs");
+ return false;
+ }
+
+ BT_INFO("Legacy GATT Client APIs");
+ return true;
+}
+
+int bt_gatt_foreach_primary_services(const char *remote_address,
+ bt_gatt_primary_service_cb callback,
+ void *user_data)
+{
+ int i;
+ int ret;
+ bool foreach_call = true;
+ bluetooth_device_address_t addr_hex = { {0,} };
+ bt_gatt_handle_info_t *prim_svc;
+
+ BT_CHECK_GATT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(remote_address);
+ BT_CHECK_INPUT_PARAMETER(callback);
+
+ prim_svc = g_new0(bt_gatt_handle_info_t, 1);
+
+ _bt_convert_address_to_hex(&addr_hex, remote_address);
+
+ ret = _bt_get_error_code(bluetooth_gatt_get_primary_services(&addr_hex,
+ prim_svc));
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x) : Failed to run function",
+ _bt_convert_error_to_string(ret), ret);
+ g_free(prim_svc);
+ return ret;
+ }
+
+ for (i = 0; i < prim_svc->count; i++) {
+ if (prim_svc->handle[i] == NULL)
+ continue;
+
+ BT_INFO("handle: %s", prim_svc->handle[i]);
+
+ if (foreach_call == true &&
+ !callback((bt_gatt_attribute_h)prim_svc->handle[i], user_data)) {
+ foreach_call = false;
+ }
+
+ /* Application should clone the handle using API in callback */
+ /* bt_gatt_clone_attribute_handle */
+ g_free(prim_svc->handle[i]);
+ }
+
+ g_free(prim_svc->handle);
+ g_free(prim_svc);
+
+ return ret;
+}
+
+int bt_gatt_discover_characteristics(bt_gatt_attribute_h service,
+ bt_gatt_characteristics_discovered_cb callback,
+ void *user_data)
+{
+ int ret;
+
+ BT_CHECK_GATT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(service);
+ BT_CHECK_INPUT_PARAMETER(callback);
+
+ ret = _bt_get_error_code(bluetooth_gatt_discover_service_characteristics((const char *)service));
+
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ } else {
+ _bt_set_cb(BT_EVENT_GATT_CLIENT_CHARACTERISTIC_DISCOVERED_LEGACY, callback, user_data);
+ }
+
+ return ret;
+}
+
+int bt_gatt_get_service_uuid(bt_gatt_attribute_h service, char **uuid)
+{
+ int i;
+ int ret;
+ bt_gatt_service_property_t property;
+
+ BT_CHECK_GATT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(service);
+
+ memset(&property, 0x00, sizeof(bt_gatt_service_property_t));
+
+ ret = _bt_get_error_code(bluetooth_gatt_get_service_property((const char *)service, &property));
+
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ } else {
+ *uuid = g_strdup(property.uuid);
+
+ if (property.include_handles.count != 0 && property.include_handles.handle) {
+ for (i = 0; i < property.include_handles.count; i++) {
+ g_free(property.include_handles.handle[i]);
+ }
+ g_free(property.include_handles.handle);
+ }
+ if (property.char_handle.count != 0 && property.char_handle.handle) {
+ for (i = 0; i < property.char_handle.count; i++) {
+ g_free(property.char_handle.handle[i]);
+ }
+ g_free(property.char_handle.handle);
+ }
+ }
+
+ return ret;
+}
+
+int bt_gatt_foreach_included_services(bt_gatt_attribute_h service,
+ bt_gatt_included_service_cb callback,
+ void *user_data)
+{
+ int i;
+ int ret;
+ bool foreach_call = true;
+ bt_gatt_service_property_t property;
+
+ BT_CHECK_GATT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(service);
+ BT_CHECK_INPUT_PARAMETER(callback);
+
+ memset(&property, 0x00, sizeof(bt_gatt_service_property_t));
+
+ ret = _bt_get_error_code(bluetooth_gatt_get_service_property((const char *)service, &property));
+
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ } else {
+ if (property.char_handle.count != 0 && property.char_handle.handle) {
+ for (i = 0; i < property.char_handle.count; i++) {
+ g_free(property.char_handle.handle[i]);
+ }
+ g_free(property.char_handle.handle);
+ }
+ if (property.include_handles.count == 0 ||
+ property.include_handles.handle == NULL) {
+ return ret;
+ }
+
+ for (i = 0; i < property.include_handles.count; i++) {
+ if (property.include_handles.handle[i] == NULL)
+ continue;
+
+ if (foreach_call == true &&
+ !callback((bt_gatt_attribute_h)property.include_handles.handle[i],
+ user_data)) {
+ foreach_call = false;
+ }
+
+ g_free(property.include_handles.handle[i]);
+ }
+ g_free(property.include_handles.handle);
+ }
+ return ret;
+}
+
+int bt_gatt_set_characteristic_changed_cb(bt_gatt_characteristic_changed_cb callback,
+ void *user_data)
+{
+ BT_CHECK_GATT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(callback);
+
+ _bt_set_cb(BT_EVENT_GATT_CLIENT_VALUE_CHANGED_LEGACY, callback, user_data);
+
+ return BT_ERROR_NONE;
+}
+
+int bt_gatt_unset_characteristic_changed_cb()
+{
+ BT_CHECK_GATT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+
+ _bt_unset_cb(BT_EVENT_GATT_CLIENT_VALUE_CHANGED_LEGACY);
+
+ return BT_ERROR_NONE;
+}
+
+int bt_gatt_watch_characteristic_changes(bt_gatt_attribute_h service)
+{
+ int ret;
+
+ BT_CHECK_GATT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(service);
+
+ ret = _bt_get_error_code(bluetooth_gatt_watch_characteristics((const char *)service));
+
+ if (ret != BT_ERROR_NONE)
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+
+ return ret;
+}
+
+int bt_gatt_unwatch_characteristic_changes(bt_gatt_attribute_h service)
+{
+ int ret;
+
+ BT_CHECK_GATT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(service);
+
+ ret = _bt_get_error_code(bluetooth_gatt_unwatch_characteristics((const char *)service));
+
+ if (ret != BT_ERROR_NONE)
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+
+ return ret;
+}
+
+int bt_gatt_get_characteristic_declaration(bt_gatt_attribute_h characteristic,
+ char **uuid, unsigned char **value,
+ int *value_length)
+{
+ int ret;
+ bt_gatt_char_property_t property;
+
+ BT_CHECK_GATT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(characteristic);
+
+ memset(&property, 0x00, sizeof(bt_gatt_char_property_t));
+
+ ret = _bt_get_error_code(bluetooth_gatt_get_characteristics_property((const char *)characteristic, &property));
+
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ } else {
+ if (property.uuid) {
+ *uuid = g_strdup(property.uuid);
+ g_free(property.uuid);
+ }
+
+ if (property.val && property.val_len != 0) {
+ *value = g_memdup(property.val, property.val_len);
+ *value_length = property.val_len;
+ g_free(property.val);
+ }
+
+ g_free(property.name);
+
+ }
+
+ return ret;
+}
+
+int bt_gatt_set_characteristic_value(bt_gatt_attribute_h characteristic,
+ const unsigned char *value,
+ int value_length)
+{
+ int ret;
+
+ BT_CHECK_GATT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(characteristic);
+ BT_CHECK_INPUT_PARAMETER(value);
+
+ if (value_length <= 0)
+ return BT_ERROR_INVALID_PARAMETER;
+
+ ret = _bt_get_error_code(bluetooth_gatt_set_characteristics_value((const char *)characteristic,
+ (const guint8 *)value, value_length));
+
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ }
+
+ return ret;
+}
+
+int bt_gatt_set_characteristic_value_request(bt_gatt_attribute_h characteristic,
+ const unsigned char *value, int value_length,
+ bt_gatt_characteristic_write_cb callback)
+{
+ int ret;
+
+ BT_CHECK_GATT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(characteristic);
+ BT_CHECK_INPUT_PARAMETER(value);
+
+ if (value_length <= 0)
+ return BT_ERROR_INVALID_PARAMETER;
+
+ ret = _bt_get_error_code(bluetooth_gatt_set_characteristics_value_request(
+ (const char *)characteristic,
+ (const guint8 *)value, value_length));
+
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ } else {
+ _bt_set_cb(BT_EVENT_GATT_CLIENT_WRITE_CHARACTERISTIC_LEGACY, callback, characteristic);
+ }
+
+ return ret;
+}
+
+int bt_gatt_clone_attribute_handle(bt_gatt_attribute_h *clone,
+ bt_gatt_attribute_h origin)
+{
+ int error = BT_ERROR_NONE;
+
+ BT_CHECK_GATT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(origin);
+
+ *clone = g_strdup((char *)origin);
+
+ return error;
+}
+
+int bt_gatt_destroy_attribute_handle(bt_gatt_attribute_h handle)
+{
+ int error = BT_ERROR_NONE;
+
+ BT_CHECK_GATT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(handle);
+
+ g_free(handle);
+
+ return error;
+}
+
+int bt_gatt_read_characteristic_value(bt_gatt_attribute_h characteristic,
+ bt_gatt_characteristic_read_cb callback)
+{
+ int ret;
+
+ BT_CHECK_GATT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(characteristic);
+ BT_CHECK_INPUT_PARAMETER(callback);
+
+ ret = _bt_get_error_code(bluetooth_gatt_read_characteristic_value((const char *)characteristic));
+
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ } else {
+ _bt_set_cb(BT_EVENT_GATT_CLIENT_READ_CHARACTERISTIC_LEGACY, callback, NULL);
+ }
+
+ return ret;
+}
+
+int bt_gatt_discover_characteristic_descriptor(bt_gatt_attribute_h characteristic_handle,
+ bt_gatt_characteristic_descriptor_discovered_cb callback,
+ void *user_data)
+{
+ int ret;
+
+ BT_CHECK_GATT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(characteristic_handle);
+ BT_CHECK_INPUT_PARAMETER(callback);
+
+ ret = _bt_get_error_code(bluetooth_gatt_discover_characteristic_descriptor
+ ((const char *)characteristic_handle));
+
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ } else {
+ _bt_set_cb(BT_EVENT_GATT_CLIENT_CHARACTERISTIC_DESCRIPTOR_DISCOVERED_LEGACY, callback, user_data);
+ }
+
+ return ret;
+}
+#endif
+
+int bt_gatt_connect(const char *address, bool auto_connect)
+{
+ int ret;
+ bluetooth_device_address_t bd_addr = { {0,} };
+
+ BT_CHECK_GATT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(address);
+ _bt_convert_address_to_hex(&bd_addr, address);
+
+ ret = _bt_get_error_code(bluetooth_connect_le(&bd_addr, auto_connect ? TRUE : FALSE));
+
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ }
+ return ret;
+}
+
+int bt_gatt_disconnect(const char *address)
+{
+ int ret;
+ bluetooth_device_address_t bd_addr = { {0,} };
+
+ BT_CHECK_GATT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(address);
+ _bt_convert_address_to_hex(&bd_addr, address);
+
+ ret = _bt_get_error_code(bluetooth_disconnect_le(&bd_addr));
+
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ }
+ return ret;
+}
+
+int bt_gatt_set_connection_state_changed_cb(bt_gatt_connection_state_changed_cb callback, void *user_data)
+{
+ BT_CHECK_GATT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(callback);
+ _bt_set_cb(BT_EVENT_GATT_CONNECTION_STATUS, callback, user_data);
+
+ return BT_ERROR_NONE;
+}
+
+int bt_gatt_unset_connection_state_changed_cb(void)
+{
+ BT_CHECK_GATT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ _bt_unset_cb(BT_EVENT_GATT_CONNECTION_STATUS);
+ return BT_ERROR_NONE;
+}
+
+int bt_gatt_get_uuid_specification_name(const char *uuid, char **name)
+{
+ BT_CHECK_INPUT_PARAMETER(uuid);
+ BT_CHECK_INPUT_PARAMETER(name);
+
+ int i;
+ int offset = 0;
+ static struct {
+ const char *uuid;
+ const char *specification_name;
+ } bt_uuid_name[] = {
+ /* GATT Services */
+ {"1800", "Generic Access"},
+ {"1801", "Generic Attribute"},
+ {"1802", "Immediate Alert"},
+ {"1803", "Link Loss"},
+ {"1804", "Tx Power"},
+ {"1805", "Current Time Service"},
+ {"1806", "Reference Time Update Service"},
+ {"1807", "Next DST Change Service"},
+ {"1808", "Glucose"},
+ {"1809", "Health Thermometer"},
+ {"180A", "Device Information"},
+ {"180D", "Heart Rate"},
+ {"180F", "Battery Service"},
+ {"1810", "Blood Pressure"},
+ {"1811", "Alert Notification Service"},
+ {"1812", "Human Interface Device"},
+
+ /* GATT Declarations */
+ {"2800", "Primary Service Declaration"},
+ {"2801", "Secondary Service Declaration"},
+ {"2802", "Include Declaration"},
+ {"2803", "Characteristic Declaration"},
+
+ /* GATT Descriptors */
+ {"2900", "Characteristic Extended Properties"},
+ {"2901", "Characteristic User Description"},
+ {"2902", "Client Characteristic Configuration"},
+ {"2903", "Server Characteristic Configuration"},
+ {"2904", "Characteristic Format"},
+ {"2905", "Characteristic Aggregate Formate"},
+ {"2906", "Valid Range"},
+ {"2907", "External Report Reference"},
+ {"2908", "Report Reference"},
+
+ /* GATT Characteristics */
+ {"2A00", "Device Name"},
+ {"2A01", "Appearance"},
+ {"2A02", "Peripheral Privacy Flag"},
+ {"2A03", "Reconnection Address"},
+ {"2A04", "Peripheral Preferred Connection Parameters"},
+ {"2A05", "Service Changed"},
+ {"2A06", "Alert Level"},
+ {"2A07", "Tx Power Level"},
+ {"2A08", "Date Time"},
+ {"2A09", "Day of Week"},
+ {"2A0A", "Day Date Time"},
+ {"2A19", "Battery Level"},
+ {"2A1E", "Intermediate Temperature"},
+ {"2A23", "System ID"},
+ {"2A24", "Model Number String"},
+ {"2A25", "Serial Number String"},
+ {"2A26", "Firmware Revision String"},
+ {"2A27", "Hardware Revision String"},
+ {"2A28", "Software Revision String"},
+ {"2A29", "Manufacturer Name String"},
+ {"2A2A", "IEEE 11073-20601 Regulatory Certification Data List"},
+ {"2A2B", "Current Time"},
+ {"2A37", "Heart Rate Measurement"},
+ {"2A38", "Body Sensor Location"},
+ {"2A3F", "Alert Status"},
+ {"2A46", "New Alert"},
+ {"2A4A", "HID Information"},
+ {"2A4C", "HID Control Point"},
+ {"2A50", "PnP ID"},
+ {NULL, NULL}
+ };
+
+ if (strlen(uuid) >= 8)
+ offset = 4;
+
+ for (i = 0; bt_uuid_name[i].uuid; i++) {
+ if (!g_ascii_strncasecmp(uuid + offset, bt_uuid_name[i].uuid, 4)) {
+ *name = g_strdup(bt_uuid_name[i].specification_name);
+ return BT_ERROR_NONE;
+ }
+ }
+
+ *name = g_strdup("Unknown");
+ return BT_ERROR_NONE;
+}
+
+static void __bt_gatt_free_descriptor(bt_gatt_h gatt_handle)
+{
+ bt_gatt_descriptor_s *desc = (bt_gatt_descriptor_s*)gatt_handle;
+
+ g_free(desc->path);
+ g_free(desc->uuid);
+ g_free(desc->value);
+ g_free(desc);
+}
+
+static void __bt_gatt_free_characteristic(bt_gatt_h gatt_handle)
+{
+ bt_gatt_characteristic_s *chr = (bt_gatt_characteristic_s*)gatt_handle;
+
+ g_slist_free_full(chr->descriptors, __bt_gatt_free_descriptor);
+
+ g_free(chr->path);
+ g_free(chr->uuid);
+ g_free(chr->value);
+ g_free(chr);
+}
+
+static void __bt_gatt_free_service(bt_gatt_h gatt_handle)
+{
+ int ret = BT_ERROR_NONE;
+ bt_gatt_service_s *svc = (bt_gatt_service_s*)gatt_handle;
+
+ g_slist_free_full(svc->included_services, __bt_gatt_free_service);
+ g_slist_free_full(svc->characteristics, __bt_gatt_free_characteristic);
+
+ if (svc->role == BT_GATT_ROLE_SERVER) {
+ ret = _bt_get_error_code(bluetooth_gatt_unregister_service(svc->path));
+ if (ret != BT_ERROR_NONE)
+ BT_ERR("%s(0x%08x) : Failed to unregister service",
+ _bt_convert_error_to_string(ret), ret);
+ }
+
+ g_free(svc->path);
+ g_free(svc->uuid);
+ g_free(svc);
+}
+
+static void __bt_gatt_destroy_descriptor(bt_gatt_h gatt_handle)
+{
+ bt_gatt_descriptor_s *desc = (bt_gatt_descriptor_s*)gatt_handle;
+ bt_gatt_characteristic_s *parent_chr = (bt_gatt_characteristic_s*)desc->parent;
+
+ if (parent_chr)
+ parent_chr->descriptors = g_slist_remove(parent_chr->descriptors, desc);
+
+ __bt_gatt_free_descriptor(gatt_handle);
+}
+
+static void __bt_gatt_destroy_characteristic(bt_gatt_h gatt_handle)
+{
+ bt_gatt_characteristic_s *chr = (bt_gatt_characteristic_s*)gatt_handle;
+ bt_gatt_service_s *parent_svc = (bt_gatt_service_s*)chr->parent;
+
+ if (parent_svc)
+ parent_svc->characteristics = g_slist_remove(parent_svc->characteristics, chr);
+
+ __bt_gatt_free_characteristic(gatt_handle);
+}
+
+static void __bt_gatt_destroy_service(bt_gatt_h gatt_handle)
+{
+ bt_gatt_service_s *svc = (bt_gatt_service_s*)gatt_handle;
+ bt_gatt_server_s *server = NULL;
+ bt_gatt_client_s *client = NULL;
+ bt_gatt_service_s *parent_svc = NULL;
+
+ if (svc->is_included_service == FALSE) {
+ if (svc->role == BT_GATT_ROLE_SERVER) {
+ server = (bt_gatt_server_s*)svc->parent;
+ if (server)
+ server->services = g_slist_remove(server->services, svc);
+ } else {
+ client = (bt_gatt_client_s*)svc->parent;
+ if (client)
+ client->services = g_slist_remove(client->services, svc);
+ }
+ } else {
+ parent_svc = (bt_gatt_service_s*)svc->parent;
+ if (parent_svc)
+ parent_svc->included_services = g_slist_remove(parent_svc->included_services, svc);
+ }
+
+ __bt_gatt_free_service(gatt_handle);
+}
+
+static int __convert_int_to_signed_bits(int i, int size)
+{
+ if (i < 0)
+ i = (1 << (size - 1)) + (i & ((1 << (size - 1)) - 1));
+
+ return i;
+ }
+
+static int __convert_unsigned_to_signed(int value, int size)
+{
+ if ((value & (1 << (size-1))) != 0) {
+ value = -1 * ((1 << (size-1)) - (value & ((1 << (size-1)) - 1)));
+ }
+ return value;
+}
+
+static int __convert_unsigned_byte_to_int(char b)
+{
+ return b & 0xFF;
+}
+
+static int __convert_unsigned_bytes_to_int16(char b0, char b1)
+{
+ return (__convert_unsigned_byte_to_int(b0) + (__convert_unsigned_byte_to_int(b1) << 8));
+}
+
+static int __convert_unsigned_bytes_to_int32(char b0, char b1, char b2, char b3)
+{
+ return (__convert_unsigned_byte_to_int(b0) + (__convert_unsigned_byte_to_int(b1) << 8))
+ + (__convert_unsigned_byte_to_int(b2) << 16) + (__convert_unsigned_byte_to_int(b3) << 24);
+}
+
+static float __convert_bytes_to_short_float(char b0, char b1)
+{
+ int mantissa;
+ int exponent;
+ float tmp;
+ mantissa = __convert_unsigned_to_signed(__convert_unsigned_byte_to_int(b0)
+ + ((__convert_unsigned_byte_to_int(b1) & 0x0F) << 8), 12);
+ exponent = __convert_unsigned_to_signed(__convert_unsigned_byte_to_int(b1) >> 4, 4);
+ tmp = pow(10, exponent);
+
+ return (float)(mantissa * tmp);
+}
+
+float __convert_bytes_to_float(char b0, char b1, char b2, char b3)
+{
+ int mantissa;
+ float exponent;
+ mantissa = __convert_unsigned_to_signed(__convert_unsigned_byte_to_int(b0)
+ + (__convert_unsigned_byte_to_int(b1) << 8)
+ + (__convert_unsigned_byte_to_int(b2) << 16), 24);
+ exponent = pow(10, b3);
+
+ return (float)(mantissa * exponent);
+}
+
+static int __get_data_type_float_size(bt_data_type_float_e type)
+{
+ switch (type) {
+ case BT_DATA_TYPE_SFLOAT:
+ return 2;
+ case BT_DATA_TYPE_FLOAT:
+ return 4;
+ default:
+ return 0;
+ }
+ }
+
+static int __get_data_type_int_size(bt_data_type_int_e format)
+{
+ switch (format) {
+ case BT_DATA_TYPE_SINT8:
+ case BT_DATA_TYPE_UINT8:
+ return 1;
+ case BT_DATA_TYPE_SINT16:
+ case BT_DATA_TYPE_UINT16:
+ return 2;
+ case BT_DATA_TYPE_SINT32:
+ case BT_DATA_TYPE_UINT32:
+ return 4;
+ default:
+ return 0;
+ }
+ }
+
+int bt_gatt_destroy(bt_gatt_h gatt_handle)
+{
+ bt_gatt_common_s *handle = (bt_gatt_common_s*)gatt_handle;
+
+ BT_CHECK_INPUT_PARAMETER(gatt_handle);
+
+ if (handle->type == BT_GATT_TYPE_SERVICE)
+ __bt_gatt_destroy_service(gatt_handle);
+ else if (handle->type == BT_GATT_TYPE_CHARACTERISTIC)
+ __bt_gatt_destroy_characteristic(gatt_handle);
+ else if (handle->type == BT_GATT_TYPE_DESCRIPTOR)
+ __bt_gatt_destroy_descriptor(gatt_handle);
+ else {
+ BT_ERR("Type is invalid(type:%d)", handle->type);
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ return BT_ERROR_NONE;
+}
+
+int bt_gatt_get_value(bt_gatt_h gatt_handle, char **value, int *value_length)
+{
+ bt_gatt_common_s *handle = (bt_gatt_common_s*)gatt_handle;
+ bt_gatt_characteristic_s *chr = (bt_gatt_characteristic_s*)gatt_handle;
+ bt_gatt_descriptor_s *desc = (bt_gatt_descriptor_s*)gatt_handle;
+
+ BT_CHECK_GATT_SUPPORT();
+ BT_CHECK_INPUT_PARAMETER(gatt_handle);
+ BT_CHECK_INPUT_PARAMETER(value);
+ BT_CHECK_INPUT_PARAMETER(value_length);
+
+ if (handle->type == BT_GATT_TYPE_CHARACTERISTIC) {
+ *value_length = chr->value_length;
+ if (chr->value_length > 0)
+ *value = g_memdup(chr->value, chr->value_length);
+ } else if (handle->type == BT_GATT_TYPE_DESCRIPTOR) {
+ *value_length = desc->value_length;
+ if (desc->value_length > 0)
+ *value = g_memdup(desc->value, desc->value_length);
+ } else {
+ BT_ERR("Type is invalid(type:%d)", handle->type);
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ return BT_ERROR_NONE;
+}
+
+int bt_gatt_get_int_value(bt_gatt_h gatt_handle, bt_data_type_int_e type, int offset, int *value)
+{
+ char *val;
+ int val_len;
+ bt_gatt_common_s *handle = (bt_gatt_common_s*)gatt_handle;
+ bt_gatt_characteristic_s *chr = (bt_gatt_characteristic_s*)gatt_handle;
+ bt_gatt_descriptor_s *desc = (bt_gatt_descriptor_s*)gatt_handle;
+
+ BT_CHECK_GATT_SUPPORT();
+ BT_CHECK_INPUT_PARAMETER(gatt_handle);
+ BT_CHECK_INPUT_PARAMETER(value);
+
+ if (handle->type == BT_GATT_TYPE_CHARACTERISTIC) {
+ val = chr->value;
+ val_len = chr->value_length;
+ } else if (handle->type == BT_GATT_TYPE_DESCRIPTOR) {
+ val = desc->value;
+ val_len = desc->value_length;
+ } else {
+ BT_ERR("Type is invalid(type:%d)", handle->type);
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ if ((offset + __get_data_type_int_size(type)) > val_len) {
+ BT_ERR("Offset exceed the memory");
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ switch (type) {
+ case BT_DATA_TYPE_UINT8:
+ *value = __convert_unsigned_byte_to_int(val[offset]);
+ break;
+ case BT_DATA_TYPE_UINT16:
+ *value = __convert_unsigned_bytes_to_int16(val[offset], val[offset+1]);
+ break;
+
+ case BT_DATA_TYPE_UINT32:
+ *value = __convert_unsigned_bytes_to_int32(val[offset], val[offset+1],
+ val[offset+2], val[offset+3]);
+ break;
+ case BT_DATA_TYPE_SINT8:
+ *value = __convert_unsigned_to_signed(__convert_unsigned_byte_to_int(val[offset]), 8);
+ break;
+
+ case BT_DATA_TYPE_SINT16:
+ *value = __convert_unsigned_to_signed(__convert_unsigned_bytes_to_int16(val[offset],
+ val[offset+1]), 16);
+ break;
+
+ case BT_DATA_TYPE_SINT32:
+ *value = __convert_unsigned_to_signed(__convert_unsigned_bytes_to_int32(val[offset],
+ val[offset+1], val[offset+2], val[offset+3]), 32);
+ break;
+ default:
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ return BT_ERROR_NONE;
+}
+
+int bt_gatt_get_float_value(bt_gatt_h gatt_handle, bt_data_type_float_e type, int offset, float *value)
+{
+ char *val;
+ int val_len;
+ bt_gatt_common_s *handle = (bt_gatt_common_s*)gatt_handle;
+ bt_gatt_characteristic_s *chr = (bt_gatt_characteristic_s*)gatt_handle;
+ bt_gatt_descriptor_s *desc = (bt_gatt_descriptor_s*)gatt_handle;
+
+ BT_CHECK_GATT_SUPPORT();
+ BT_CHECK_INPUT_PARAMETER(gatt_handle);
+ BT_CHECK_INPUT_PARAMETER(value);
+
+ if (handle->type == BT_GATT_TYPE_CHARACTERISTIC) {
+ val = chr->value;
+ val_len = chr->value_length;
+ } else if (handle->type == BT_GATT_TYPE_DESCRIPTOR) {
+ val = desc->value;
+ val_len = desc->value_length;
+ } else {
+ BT_ERR("Type is invalid(type:%d)", handle->type);
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ if ((offset + __get_data_type_float_size(type)) > val_len) {
+ BT_ERR("Offset exceed the memory");
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ switch (type) {
+ case BT_DATA_TYPE_SFLOAT:
+ *value = __convert_bytes_to_short_float(val[offset], val[offset+1]);
+ break;
+
+ case BT_DATA_TYPE_FLOAT:
+ *value = __convert_bytes_to_float(val[offset], val[offset+1],
+ val[offset+2], val[offset+3]);
+ break;
+ default:
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ return BT_ERROR_NONE;
+}
+
+int bt_gatt_set_value(bt_gatt_h gatt_handle, const char *value, int value_length)
+{
+ int ret;
+ char **val = NULL;
+ int *val_len = NULL;
+ bt_gatt_common_s *handle = (bt_gatt_common_s*)gatt_handle;
+ bt_gatt_characteristic_s *chr = (bt_gatt_characteristic_s*)gatt_handle;
+ bt_gatt_descriptor_s *desc = (bt_gatt_descriptor_s*)gatt_handle;
+
+ BT_CHECK_GATT_SUPPORT();
+ BT_CHECK_INPUT_PARAMETER(gatt_handle);
+ BT_CHECK_INPUT_PARAMETER(value);
+
+ if (handle->type == BT_GATT_TYPE_CHARACTERISTIC) {
+ val = &chr->value;
+ val_len = &chr->value_length;
+ } else if (handle->type == BT_GATT_TYPE_DESCRIPTOR) {
+ val = &desc->value;
+ val_len = &desc->value_length;
+ } else {
+ BT_ERR("Type is invalid(type:%d)", handle->type);
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ if (handle->role == BT_GATT_ROLE_SERVER && handle->path) {
+ ret = _bt_get_error_code(bluetooth_gatt_update_characteristic(handle->path, value, value_length));
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ return ret;
+ }
+ }
+
+ g_free(*val);
+ *val = NULL;
+ if (value_length > 0)
+ *val = g_memdup(value, value_length);
+ *val_len = value_length;
+
+ return BT_ERROR_NONE;
+}
+
+int bt_gatt_set_int_value(bt_gatt_h gatt_handle, bt_data_type_int_e type, int value, int offset)
+{
+ int ret;
+ char **val = NULL;
+ int *val_len = NULL;
+ char *tmp;
+ int fmt_size;
+ int idx = offset;
+ bt_gatt_common_s *handle = (bt_gatt_common_s*)gatt_handle;
+ bt_gatt_characteristic_s *chr = (bt_gatt_characteristic_s*)gatt_handle;
+ bt_gatt_descriptor_s *desc = (bt_gatt_descriptor_s*)gatt_handle;
+
+ BT_CHECK_GATT_SUPPORT();
+ BT_CHECK_INPUT_PARAMETER(gatt_handle);
+
+ if (handle->type == BT_GATT_TYPE_CHARACTERISTIC) {
+ val = &chr->value;
+ val_len = &chr->value_length;
+ } else if (handle->type == BT_GATT_TYPE_DESCRIPTOR) {
+ val = &desc->value;
+ val_len = &desc->value_length;
+ } else {
+ BT_ERR("Type is invalid(type:%d)", handle->type);
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ if (*val_len < offset) {
+ BT_ERR("Offset is invalid");
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ fmt_size = __get_data_type_int_size(type);
+ if (*val == NULL) {
+ *val = g_malloc0(fmt_size);
+ *val_len = fmt_size;
+ } else if (*val_len == offset) {// Added
+ tmp = g_malloc0(*val_len + fmt_size);
+ /* Fix : NULL_RETURNS */
+ if (!tmp) {
+ g_free(*val);
+ return BT_ERROR_OUT_OF_MEMORY;
+ }
+ memcpy(tmp, *val, *val_len);
+ g_free(*val);
+ *val = tmp;
+ *val_len += fmt_size;
+ } else if (*val_len < offset + fmt_size) {// Overlapped
+ tmp = g_malloc0(offset + fmt_size);
+ /* Fix : NULL_RETURNS */
+ if (!tmp) {
+ g_free(*val);
+ return BT_ERROR_OUT_OF_MEMORY;
+ }
+ memcpy(tmp, *val, *val_len);
+ g_free(*val);
+ *val = tmp;
+ *val_len = offset + fmt_size;
+ }
+
+ switch (type) {
+ case BT_DATA_TYPE_SINT8:
+ value = __convert_int_to_signed_bits(value, 8);
+ case BT_DATA_TYPE_UINT8:
+ if (*val)
+ (*val)[idx] = (char)(value & 0xFF);
+ break;
+
+ case BT_DATA_TYPE_SINT16:
+ value = __convert_int_to_signed_bits(value, 16);
+ case BT_DATA_TYPE_UINT16:
+ if (*val) {
+ (*val)[idx++] = (char)(value & 0xFF);
+ (*val)[idx] = (char)((value >> 8) & 0xFF);
+ }
+ break;
+
+ case BT_DATA_TYPE_SINT32:
+ value = __convert_int_to_signed_bits(value, 32);
+ case BT_DATA_TYPE_UINT32:
+ if (*val) {
+ (*val)[idx++] = (char)(value & 0xFF);
+ (*val)[idx++] = (char)((value >> 8) & 0xFF);
+ (*val)[idx++] = (char)((value >> 16) & 0xFF);
+ (*val)[idx] = (char)((value >> 24) & 0xFF);
+ }
+ break;
+
+ default:
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ if (handle->role == BT_GATT_ROLE_SERVER && handle->path) {
+ ret = _bt_get_error_code(bluetooth_gatt_update_characteristic(handle->path, *val, *val_len));
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ return ret;
+ }
+ }
+
+ return BT_ERROR_NONE;
+}
+
+int bt_gatt_set_float_value(bt_gatt_h gatt_handle, bt_data_type_float_e type,
+ int mantissa, int exponent, int offset)
+{
+ int ret;
+ char **val = NULL;
+ int *val_len = NULL;
+ int mant;
+ int exp;
+ char *tmp;
+ int fmt_size;
+ int idx = offset;
+ bt_gatt_common_s *handle = (bt_gatt_common_s*)gatt_handle;
+ bt_gatt_characteristic_s *chr = (bt_gatt_characteristic_s*)gatt_handle;
+ bt_gatt_descriptor_s *desc = (bt_gatt_descriptor_s*)gatt_handle;
+
+ BT_CHECK_GATT_SUPPORT();
+ BT_CHECK_INPUT_PARAMETER(gatt_handle);
+
+ if (handle->type == BT_GATT_TYPE_CHARACTERISTIC) {
+ val = &chr->value;
+ val_len = &chr->value_length;
+ } else if (handle->type == BT_GATT_TYPE_DESCRIPTOR) {
+ val = &desc->value;
+ val_len = &desc->value_length;
+ } else {
+ BT_ERR("Type is invalid(type:%d)", handle->type);
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ if (*val_len < offset) {
+ BT_ERR("Offset is invalid");
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ fmt_size = __get_data_type_float_size(type);
+ if (fmt_size == 0) {
+ BT_ERR("Format is invalid");
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ if (*val == NULL) {
+ *val = g_malloc0(fmt_size);
+ /* Fix : NULL_RETURNS */
+ if (*val == NULL)
+ return BT_ERROR_OUT_OF_MEMORY;
+ *val_len = fmt_size;
+ } else if (*val_len == offset) {// Added
+ tmp = g_malloc0(*val_len + fmt_size);
+ /* Fix : NULL_RETURNS */
+ if (tmp == NULL) {
+ g_free(*val);
+ return BT_ERROR_OUT_OF_MEMORY;
+ }
+ memcpy(tmp, *val, *val_len);
+ g_free(*val);
+ *val = tmp;
+ *val_len += fmt_size;
+ } else if (*val_len < offset + fmt_size) {// Overlapped
+ tmp = g_malloc0(offset + fmt_size);
+ /* Fix : NULL_RETURNS */
+ if (tmp == NULL) {
+ g_free(*val);
+ return BT_ERROR_OUT_OF_MEMORY;
+ }
+ memcpy(tmp, *val, *val_len);
+ g_free(*val);
+ *val = tmp;
+ *val_len = offset + fmt_size;
+ }
+
+ switch (type) {
+ case BT_DATA_TYPE_FLOAT:
+ mant = __convert_int_to_signed_bits(mantissa, 24);
+ exp = __convert_int_to_signed_bits(exponent, 8);
+ (*val)[idx++] = (char)(mant & 0xFF);
+ (*val)[idx++] = (char)((mant >> 8) & 0xFF);
+ (*val)[idx++] = (char)((mant >> 16) & 0xFF);
+ (*val)[idx] = (char)(exp & 0xFF);
+ break;
+
+ case BT_DATA_TYPE_SFLOAT:
+ mant = __convert_int_to_signed_bits(mantissa, 12);
+ exp = __convert_int_to_signed_bits(exponent, 4);
+ (*val)[idx++] = (char)(mant & 0xFF);
+ (*val)[idx] = (char)((mant >> 8) & 0x0F);
+ (*val)[idx] += (char)((exp & 0x0F) << 4);
+ break;
+
+ default:
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ if (handle->role == BT_GATT_ROLE_SERVER && handle->path) {
+ ret = _bt_get_error_code(bluetooth_gatt_update_characteristic(handle->path, *val, *val_len));
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ return ret;
+ }
+ }
+
+ return BT_ERROR_NONE;
+}
+
+int bt_gatt_get_permissions(bt_gatt_h gatt_handle, int *permissions)
+{
+ bt_gatt_common_s *handle = (bt_gatt_common_s*)gatt_handle;
+ bt_gatt_characteristic_s *chr = (bt_gatt_characteristic_s*)gatt_handle;
+ bt_gatt_descriptor_s *desc = (bt_gatt_descriptor_s*)gatt_handle;
+
+ BT_CHECK_INPUT_PARAMETER(gatt_handle);
+ BT_CHECK_INPUT_PARAMETER(permissions);
+
+ if (handle->type == BT_GATT_TYPE_CHARACTERISTIC)
+ *permissions = chr->permissions;
+ else if (handle->type == BT_GATT_TYPE_DESCRIPTOR)
+ *permissions = desc->permissions;
+ else {
+ BT_ERR("Type is invalid(type:%d)", handle->type);
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ return BT_ERROR_NONE;
+}
+
+int bt_gatt_set_permissions(bt_gatt_h gatt_handle, int permissions)
+{
+ bt_gatt_common_s *handle = (bt_gatt_common_s*)gatt_handle;
+ bt_gatt_characteristic_s *chr = (bt_gatt_characteristic_s*)gatt_handle;
+ bt_gatt_descriptor_s *desc = (bt_gatt_descriptor_s*)gatt_handle;
+
+ BT_CHECK_INPUT_PARAMETER(gatt_handle);
+
+ if (handle->type == BT_GATT_TYPE_CHARACTERISTIC)
+ chr->permissions = permissions;
+ else if (handle->type == BT_GATT_TYPE_DESCRIPTOR)
+ desc->permissions = permissions;
+ else {
+ BT_ERR("Type is invalid(type:%d)", handle->type);
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ return BT_ERROR_NONE;
+}
+
+int bt_gatt_get_uuid(bt_gatt_h gatt_handle, char **uuid)
+{
+ bt_gatt_common_s *handle = (bt_gatt_common_s*)gatt_handle;
+
+ BT_CHECK_GATT_SUPPORT();
+ BT_CHECK_INPUT_PARAMETER(gatt_handle);
+ BT_CHECK_INPUT_PARAMETER(uuid);
+
+ *uuid = g_strdup(handle->uuid);
+
+ return BT_ERROR_NONE;
+}
+
+int bt_gatt_get_type(bt_gatt_h gatt_handle, bt_gatt_type_e *gatt_type)
+{
+ bt_gatt_common_s *handle = (bt_gatt_common_s*)gatt_handle;
+
+ BT_CHECK_GATT_SUPPORT();
+ BT_CHECK_INPUT_PARAMETER(gatt_handle);
+ BT_CHECK_INPUT_PARAMETER(gatt_type);
+
+ *gatt_type = handle->type;
+
+ return BT_ERROR_NONE;
+}
+
+int bt_gatt_service_create(const char *uuid, bt_gatt_service_type_e type,
+ bt_gatt_h *service)
+{
+ bt_gatt_service_s *svc;
+
+ BT_CHECK_INPUT_PARAMETER(uuid);
+ BT_CHECK_INPUT_PARAMETER(service);
+
+ svc = (bt_gatt_service_s*)g_malloc0(sizeof(bt_gatt_service_s));
+ if (svc == NULL)
+ return BT_ERROR_OUT_OF_MEMORY;
+ svc->type = BT_GATT_TYPE_SERVICE;
+ svc->role = BT_GATT_ROLE_SERVER;
+ if (strlen(uuid) == 8)
+ svc->uuid = __convert_uuid_to_uuid128(uuid);
+ else
+ svc->uuid = strdup(uuid);
+ if (svc->uuid == NULL) {
+ g_free(svc);
+ return BT_ERROR_OUT_OF_MEMORY;
+ }
+ svc->is_included_service = false;
+ svc->service_type = type;
+
+ *service = (bt_gatt_h)svc;
+
+ return BT_ERROR_NONE;
+}
+
+int bt_gatt_service_add_characteristic(bt_gatt_h service,
+ bt_gatt_h characteristic)
+{
+ bt_gatt_service_s *svc = (bt_gatt_service_s*)service;
+ bt_gatt_characteristic_s *chr = (bt_gatt_characteristic_s*)characteristic;
+
+ BT_CHECK_INPUT_PARAMETER(service);
+ BT_CHECK_INPUT_PARAMETER(characteristic);
+ if (chr->parent) {
+ BT_ERR("This characteristic is already added.");
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ svc->characteristics = g_slist_append(svc->characteristics, chr);
+ chr->parent = (void *)service;
+
+ return BT_ERROR_NONE;
+}
+
+int bt_gatt_service_add_included_service(bt_gatt_h service,
+ bt_gatt_h included_service)
+{
+ bt_gatt_service_s *svc = (bt_gatt_service_s*)service;
+ bt_gatt_service_s *included_svc = (bt_gatt_service_s*)included_service;
+
+ BT_CHECK_INPUT_PARAMETER(service);
+ BT_CHECK_INPUT_PARAMETER(included_service);
+ if (included_svc->parent) {
+ BT_ERR("This service is already added.");
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ svc->included_services = g_slist_append(svc->included_services, included_svc);
+ included_svc->parent = (void *)service;
+
+ return BT_ERROR_NONE;
+}
+
+int bt_gatt_service_get_server(bt_gatt_h service, bt_gatt_server_h *server)
+{
+ bt_gatt_service_s *svc = (bt_gatt_service_s *)service;
+
+ BT_CHECK_INPUT_PARAMETER(service);
+ BT_CHECK_INPUT_PARAMETER(server);
+
+ if (svc->is_included_service) {
+ BT_ERR("This is included service of %p", svc->parent);
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ if (svc->role != BT_GATT_ROLE_SERVER) {
+ BT_ERR("This is not server's service");
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ *server = (bt_gatt_server_h)svc->parent;
+
+ return BT_ERROR_NONE;
+}
+
+int bt_gatt_service_get_client(bt_gatt_h service, bt_gatt_client_h *client)
+{
+ bt_gatt_service_s *svc = (bt_gatt_service_s *)service;
+
+ BT_CHECK_GATT_SUPPORT();
+ BT_CHECK_INPUT_PARAMETER(service);
+ BT_CHECK_INPUT_PARAMETER(client);
+
+ if (svc->is_included_service) {
+ BT_ERR("This is included service of %p", svc->parent);
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ if (svc->role != BT_GATT_ROLE_CLIENT) {
+ BT_ERR("This is not client's service");
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ *client = (bt_gatt_client_h)svc->parent;
+
+ return BT_ERROR_NONE;
+}
+
+int bt_gatt_service_get_characteristic(bt_gatt_h service, const char *uuid,
+ bt_gatt_h *characteristic)
+{
+ bt_gatt_service_s *svc = (bt_gatt_service_s*)service;
+ bt_gatt_h gatt_handle = NULL;
+ int ret;
+
+ BT_CHECK_GATT_SUPPORT();
+ BT_CHECK_INPUT_PARAMETER(service);
+ BT_CHECK_INPUT_PARAMETER(uuid);
+ BT_CHECK_INPUT_PARAMETER(characteristic);
+
+ ret = __get_gatt_handle_by_uuid(svc->characteristics, uuid, &gatt_handle);
+ if (ret == BT_ERROR_NONE && gatt_handle != NULL) {
+ *characteristic = gatt_handle;
+ return BT_ERROR_NONE;
+ }
+
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ return ret;
+}
+
+int bt_gatt_service_foreach_characteristics(bt_gatt_h service,
+ bt_gatt_foreach_cb callback, void *user_data)
+{
+ bt_gatt_service_s *svc = (bt_gatt_service_s*)service;
+ bt_gatt_characteristic_s *chr = NULL;
+ GSList *l = NULL;
+ int total = 0;
+ int index = 1;
+
+ BT_CHECK_GATT_SUPPORT();
+ BT_CHECK_INPUT_PARAMETER(service);
+ BT_CHECK_INPUT_PARAMETER(callback);
+
+ total = g_slist_length(svc->characteristics);
+
+ for (l = svc->characteristics; l; l = g_slist_next(l)) {
+ chr = l->data;
+ if (!callback(total, index++, (bt_gatt_h)chr, user_data))
+ break;
+ }
+
+ return BT_ERROR_NONE;
+}
+
+int bt_gatt_service_get_included_service(bt_gatt_h service, const char *uuid,
+ bt_gatt_h *included_service)
+{
+ bt_gatt_service_s *svc = (bt_gatt_service_s*)service;
+ bt_gatt_h gatt_handle = NULL;
+ int ret;
+
+ BT_CHECK_GATT_SUPPORT();
+ BT_CHECK_INPUT_PARAMETER(service);
+ BT_CHECK_INPUT_PARAMETER(uuid);
+ BT_CHECK_INPUT_PARAMETER(included_service);
+
+ ret = __get_gatt_handle_by_uuid(svc->included_services, uuid, &gatt_handle);
+ if (ret == BT_ERROR_NONE && gatt_handle != NULL) {
+ *included_service = gatt_handle;
+ return BT_ERROR_NONE;
+ }
+
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ return ret;
+}
+
+int bt_gatt_service_foreach_included_services(bt_gatt_h service,
+ bt_gatt_foreach_cb callback, void *user_data)
+{
+ bt_gatt_service_s *svc = (bt_gatt_service_s*)service;
+ bt_gatt_service_s *included_svc = NULL;
+ GSList *l = NULL;
+ int total = 0;
+ int index = 1;
+
+ BT_CHECK_GATT_SUPPORT();
+ BT_CHECK_INPUT_PARAMETER(service);
+ BT_CHECK_INPUT_PARAMETER(callback);
+
+ total = g_slist_length(svc->included_services);
+
+ for (l = svc->included_services; l; l = g_slist_next(l)) {
+ included_svc = l->data;
+ if (!callback(total, index++, (bt_gatt_h)included_svc, user_data))
+ break;
+ }
+
+ return BT_ERROR_NONE;
+}
+
+int bt_gatt_characteristic_create(const char *uuid, int permissions,
+ int properties, const char *value, int value_length,
+ bt_gatt_h *characteristic)
+{
+ int ret = BT_ERROR_NONE;
+ bt_gatt_characteristic_s *chr = NULL;
+
+ BT_CHECK_INPUT_PARAMETER(uuid);
+ BT_CHECK_INPUT_PARAMETER(characteristic);
+ if (value_length > 0)
+ BT_CHECK_INPUT_PARAMETER(value);
+
+ chr = malloc(sizeof(*chr));
+ if (chr == NULL)
+ return BT_ERROR_OUT_OF_MEMORY;
+
+ memset(chr, 0x00, sizeof(*chr));
+
+ chr->type = BT_GATT_TYPE_CHARACTERISTIC;
+ chr->role = BT_GATT_ROLE_SERVER;
+ if (strlen(uuid) == 8)
+ chr->uuid = __convert_uuid_to_uuid128(uuid);
+ else
+ chr->uuid = g_strdup(uuid);
+ if (chr->uuid == NULL) {
+ ret = BT_ERROR_OUT_OF_MEMORY;
+ goto fail;
+ }
+ chr->permissions = permissions;
+ chr->properties = properties;
+ chr->write_type = BT_GATT_WRITE_TYPE_WRITE;
+ chr->value_length = value_length;
+ if (value_length > 0) {
+ chr->value = g_memdup(value, value_length);
+ if (chr->value == NULL) {
+ ret = BT_ERROR_OUT_OF_MEMORY;
+ goto fail;
+ }
+ }
+
+ *characteristic = (bt_gatt_h)chr;
+
+ return BT_ERROR_NONE;
+
+fail:
+ g_free(chr->value);
+ g_free(chr->uuid);
+ g_free(chr);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ return ret;
+}
+
+int bt_gatt_characteristic_add_descriptor(bt_gatt_h characteristic,
+ bt_gatt_h descriptor)
+{
+ bt_gatt_characteristic_s *chr = (bt_gatt_characteristic_s *)characteristic;
+ bt_gatt_descriptor_s *desc = (bt_gatt_descriptor_s *)descriptor;
+
+ BT_CHECK_INPUT_PARAMETER(characteristic);
+ BT_CHECK_INPUT_PARAMETER(descriptor);
+
+ if (chr->type != BT_GATT_TYPE_CHARACTERISTIC ||
+ desc->type != BT_GATT_TYPE_DESCRIPTOR) {
+ BT_ERR("Wrong type. chr : %d, desc : %d", chr->type, desc->type);
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ if (desc->parent) {
+ BT_ERR("Already added descriptor : %p", desc->parent);
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ chr->descriptors = g_slist_append(chr->descriptors, desc);
+ desc->parent = (void *)characteristic;
+
+ return BT_ERROR_NONE;
+}
+
+int bt_gatt_characteristic_get_service(bt_gatt_h characteristic, bt_gatt_h *service)
+{
+ bt_gatt_characteristic_s *chr = (bt_gatt_characteristic_s *)characteristic;
+
+ BT_CHECK_GATT_SUPPORT();
+ BT_CHECK_INPUT_PARAMETER(characteristic);
+ BT_CHECK_INPUT_PARAMETER(service);
+
+ *service = (bt_gatt_h)chr->parent;
+
+ return BT_ERROR_NONE;
+}
+
+int bt_gatt_characteristic_get_properties(bt_gatt_h characteristic, int *properties)
+{
+ bt_gatt_characteristic_s *chr = (bt_gatt_characteristic_s *)characteristic;
+
+ BT_CHECK_GATT_SUPPORT();
+ BT_CHECK_INPUT_PARAMETER(characteristic);
+ BT_CHECK_INPUT_PARAMETER(properties);
+
+ if (chr->type != BT_GATT_TYPE_CHARACTERISTIC) {
+ BT_ERR("Wrong type of GATT handle : %d", chr->type);
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ *properties = chr->properties;
+
+ return BT_ERROR_NONE;
+}
+
+int bt_gatt_characteristic_set_properties(bt_gatt_h characteristic, int properties)
+{
+ bt_gatt_characteristic_s *chr = (bt_gatt_characteristic_s *)characteristic;
+
+ BT_CHECK_INPUT_PARAMETER(characteristic);
+
+ if (chr->type != BT_GATT_TYPE_CHARACTERISTIC) {
+ BT_ERR("Wrong type of GATT handle : %d", chr->type);
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ chr->properties = properties;
+
+ return BT_ERROR_NONE;
+}
+
+int bt_gatt_characteristic_get_write_type(bt_gatt_h characteristic,
+ bt_gatt_write_type_e *write_type)
+{
+ bt_gatt_characteristic_s *chr = (bt_gatt_characteristic_s *)characteristic;
+
+ BT_CHECK_GATT_SUPPORT();
+ BT_CHECK_INPUT_PARAMETER(characteristic);
+ BT_CHECK_INPUT_PARAMETER(write_type);
+
+ if (chr->type != BT_GATT_TYPE_CHARACTERISTIC) {
+ BT_ERR("Wrong type of GATT handle : %d", chr->type);
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ *write_type = chr->write_type;
+
+ return BT_ERROR_NONE;
+}
+
+int bt_gatt_characteristic_set_write_type(bt_gatt_h characteristic,
+ bt_gatt_write_type_e write_type)
+{
+ bt_gatt_characteristic_s *chr = (bt_gatt_characteristic_s *)characteristic;
+
+ BT_CHECK_GATT_SUPPORT();
+ BT_CHECK_INPUT_PARAMETER(characteristic);
+
+ if (chr->type != BT_GATT_TYPE_CHARACTERISTIC) {
+ BT_ERR("Wrong type of GATT handle : %d", chr->type);
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ chr->write_type = write_type;
+
+ return BT_ERROR_NONE;
+}
+
+int bt_gatt_characteristic_get_descriptor(bt_gatt_h characteristic, const char *uuid,
+ bt_gatt_h *descriptor)
+{
+ bt_gatt_characteristic_s *chr = (bt_gatt_characteristic_s *)characteristic;
+ bt_gatt_h gatt_handle = NULL;
+ int ret;
+
+ BT_CHECK_GATT_SUPPORT();
+ BT_CHECK_INPUT_PARAMETER(characteristic);
+ BT_CHECK_INPUT_PARAMETER(uuid);
+ BT_CHECK_INPUT_PARAMETER(descriptor);
+
+ ret = __get_gatt_handle_by_uuid(chr->descriptors, uuid, &gatt_handle);
+ if (ret == BT_ERROR_NONE && gatt_handle != NULL) {
+ *descriptor = gatt_handle;
+ return BT_ERROR_NONE;
+ }
+
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ return ret;
+}
+
+int bt_gatt_characteristic_foreach_descriptors(bt_gatt_h characteristic,
+ bt_gatt_foreach_cb callback, void *user_data)
+{
+ GSList *l;
+ bt_gatt_characteristic_s *chr = (bt_gatt_characteristic_s *)characteristic;
+ int total;
+ int i;
+
+ BT_CHECK_GATT_SUPPORT();
+ BT_CHECK_INPUT_PARAMETER(characteristic);
+ BT_CHECK_INPUT_PARAMETER(callback);
+
+ if (chr->type != BT_GATT_TYPE_CHARACTERISTIC) {
+ BT_ERR("Wrong type of GATT handle : %d", chr->type);
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ total = g_slist_length(chr->descriptors);
+
+ i = 1;
+ for (l = chr->descriptors; l; l = g_slist_next(l)) {
+ if (!callback(total, i++, (bt_gatt_h)l->data, user_data))
+ break;
+ }
+
+ return BT_ERROR_NONE;
+}
+
+int bt_gatt_descriptor_create(const char *uuid, int permissions,
+ const char *value, int value_length,
+ bt_gatt_h *descriptor)
+{
+ int ret = BT_ERROR_NONE;
+ bt_gatt_descriptor_s *desc = NULL;
+
+ BT_CHECK_INPUT_PARAMETER(uuid);
+ BT_CHECK_INPUT_PARAMETER(descriptor);
+ if (value_length > 0)
+ BT_CHECK_INPUT_PARAMETER(value);
+
+ desc = malloc(sizeof(*desc));
+ if (desc == NULL)
+ return BT_ERROR_OUT_OF_MEMORY;
+
+ memset(desc, 0x00, sizeof(*desc));
+
+ desc->type = BT_GATT_TYPE_DESCRIPTOR;
+ desc->role = BT_GATT_ROLE_SERVER;
+ if (strlen(uuid) == 8)
+ desc->uuid = __convert_uuid_to_uuid128(uuid);
+ else
+ desc->uuid = g_strdup(uuid);
+ if (desc->uuid == NULL) {
+ ret = BT_ERROR_OUT_OF_MEMORY;
+ goto fail;
+ }
+ desc->permissions = permissions;
+ desc->value_length = value_length;
+ if (value_length > 0) {
+ desc->value = g_memdup(value, value_length);
+ if (desc->value == NULL) {
+ ret = BT_ERROR_OUT_OF_MEMORY;
+ goto fail;
+ }
+ }
+
+ *descriptor = (bt_gatt_h)desc;
+
+ return ret;
+
+fail:
+ g_free(desc->uuid);
+ g_free(desc->value);
+ g_free(desc);
+
+ return ret;
+}
+
+int bt_gatt_descriptor_get_characteristic(bt_gatt_h descriptor, bt_gatt_h *characteristic)
+{
+ bt_gatt_descriptor_s *desc = (bt_gatt_descriptor_s *)descriptor;
+
+ BT_CHECK_GATT_SUPPORT();
+ BT_CHECK_INPUT_PARAMETER(descriptor);
+ BT_CHECK_INPUT_PARAMETER(characteristic);
+
+ *characteristic = (bt_gatt_h)desc->parent;
+
+ return BT_ERROR_NONE;
+}
+
+int bt_gatt_server_initialize(void)
+{
+ BT_CHECK_INIT_STATUS();
+
+ int ret = BT_ERROR_NONE;
+
+ if (!is_gatt_server_initialized) {
+ ret = _bt_get_error_code(bluetooth_gatt_init());
+
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)",
+ _bt_convert_error_to_string(ret), ret);
+ return BT_ERROR_OPERATION_FAILED;
+ }
+
+ is_gatt_server_initialized = true;
+ return BT_ERROR_NONE;
+ }
+
+ BT_DBG("Gatt-service already initialized");
+
+ return ret;
+}
+
+int bt_gatt_server_deinitialize(void)
+{
+ BT_CHECK_INIT_STATUS();
+
+ int ret = BT_ERROR_NONE;
+
+ if (is_gatt_server_initialized) {
+ GSList *l;
+ for (l = gatt_server_list; l; l = g_slist_next(l)) {
+ bt_gatt_server_s *serv = l->data;
+ g_slist_free_full(serv->services, __bt_gatt_free_service);
+ g_free(serv);
+ }
+ g_slist_free(gatt_server_list);
+ gatt_server_list = NULL;
+
+ ret = _bt_get_error_code(bluetooth_gatt_deinit());
+
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)",
+ _bt_convert_error_to_string(ret), ret);
+ return BT_ERROR_OPERATION_FAILED;
+ }
+
+ is_gatt_server_initialized = false;
+ return BT_ERROR_NONE;
+ }
+
+ BT_DBG("Gatt-service is not initialized");
+
+ return ret;
+}
+
+int bt_gatt_server_create(bt_gatt_server_h *server)
+{
+ bt_gatt_server_s *serv = NULL;
+
+ BT_CHECK_INPUT_PARAMETER(server);
+
+ serv = g_malloc0(sizeof(bt_gatt_server_s));
+ if (serv == NULL)
+ return BT_ERROR_OUT_OF_MEMORY;
+
+ *server = (bt_gatt_server_h)serv;
+
+ gatt_server_list = g_slist_append(gatt_server_list, serv);
+
+ return BT_ERROR_NONE;
+}
+
+int bt_gatt_server_destroy(bt_gatt_server_h server)
+{
+ bt_gatt_server_s *serv = (bt_gatt_server_s*)server;
+
+ BT_CHECK_INPUT_PARAMETER(server);
+
+ g_slist_free_full(serv->services, __bt_gatt_free_service);
+ gatt_server_list = g_slist_remove(gatt_server_list, serv);
+ g_free(serv);
+
+ return BT_ERROR_NONE;
+}
+
+int bt_gatt_server_set_read_value_requested_cb(bt_gatt_h gatt_handle,
+ bt_gatt_server_read_value_requested_cb callback,
+ void *user_data)
+{
+ bt_gatt_characteristic_s *chr = (bt_gatt_characteristic_s*)gatt_handle;
+
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_GATT_SERVER_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(gatt_handle);
+ BT_CHECK_INPUT_PARAMETER(callback);
+
+ chr->read_requested_cb = callback;
+ chr->read_requested_user_data = user_data;
+
+ _bt_set_cb(BT_EVENT_GATT_SERVER_READ_REQUESTED, callback, user_data);
+
+ return BT_ERROR_NONE;
+}
+
+int bt_gatt_server_register_service(bt_gatt_server_h server, bt_gatt_h service)
+{
+ int ret = BT_ERROR_NONE;
+ bt_gatt_server_s *serv = (bt_gatt_server_s*)server;
+ bt_gatt_service_s *svc = (bt_gatt_service_s*)service;
+ GSList *char_l;
+
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_GATT_SERVER_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(server);
+ BT_CHECK_INPUT_PARAMETER(service);
+
+ if (g_slist_find(serv->services, svc)) {
+ BT_ERR("Already added service.");
+ return BT_ERROR_ALREADY_DONE;
+ }
+
+ ret = _bt_get_error_code(bluetooth_gatt_add_service(svc->uuid, &svc->path));
+
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ return ret;
+ }
+
+ for (char_l = svc->characteristics; char_l; char_l = g_slist_next(char_l)) {
+ GSList *desc_l;
+ bt_gatt_characteristic_s *chr = char_l->data;
+
+ ret = _bt_get_error_code(bluetooth_gatt_add_new_characteristic(svc->path, chr->uuid,
+ (bt_gatt_characteristic_property_t)chr->properties, &chr->path));
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ goto fail;
+ }
+
+ ret = _bt_get_error_code(bluetooth_gatt_set_characteristic_value(chr->path,
+ chr->value, chr->value_length));
+
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ goto fail;
+ }
+
+ for (desc_l = chr->descriptors; desc_l; desc_l = g_slist_next(desc_l)) {
+ bt_gatt_descriptor_s *desc = desc_l->data;
+
+ ret = _bt_get_error_code(bluetooth_gatt_add_descriptor(chr->path, desc->uuid, &desc->path));
+
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ goto fail;
+ }
+
+ ret = _bt_get_error_code(bluetooth_gatt_set_descriptor_value(desc->path, desc->value, desc->value_length));
+
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ goto fail;
+ }
+ }
+ }
+
+ ret = _bt_get_error_code(bluetooth_gatt_register_service(svc->path));
+
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ goto fail;
+ }
+
+ serv->services = g_slist_append(serv->services, svc);
+ svc->parent = (void *)server;
+
+ return ret;
+
+fail:
+ bluetooth_gatt_unregister_service(svc->path);
+
+ return ret;
+}
+
+int bt_gatt_server_unregister_service(bt_gatt_server_h server, bt_gatt_h service)
+{
+ bt_gatt_server_s *serv = (bt_gatt_server_s*)server;
+ bt_gatt_service_s *svc = (bt_gatt_service_s*)service;
+
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_GATT_SERVER_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(server);
+ BT_CHECK_INPUT_PARAMETER(service);
+
+ if (!g_slist_find(serv->services, svc)) {
+ BT_ERR("Service is NOT found.");
+ return BT_ERROR_SERVICE_NOT_FOUND;
+ }
+
+ __bt_gatt_destroy_service(svc);
+
+ return BT_ERROR_NONE;
+}
+
+int bt_gatt_server_unregister_all_services(bt_gatt_server_h server)
+{
+ bt_gatt_server_s *serv = (bt_gatt_server_s*)server;
+
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_GATT_SERVER_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(server);
+
+ g_slist_free_full(serv->services, __bt_gatt_free_service);
+ serv->services = NULL;
+
+ return BT_ERROR_NONE;
+}
+
+int bt_gatt_server_send_response(int request_id,
+ int offset, char *value, int value_length)
+{
+ int ret = BT_ERROR_NONE;
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(value);
+
+ if (value_length <= 0)
+ return BT_ERROR_INVALID_PARAMETER;
+
+ ret = _bt_get_error_code(bluetooth_gatt_send_response(request_id, offset, value, value_length));
+
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ }
+
+ return ret;
+}
+
+int bt_gatt_server_notify(bt_gatt_h characteristic, bool need_confirm,
+ bt_gatt_server_notification_sent_cb callback, void *user_data)
+{
+ return BT_ERROR_NONE;
+}
+
+int bt_gatt_server_set_value_changed_cb(bt_gatt_h characteristic,
+ bt_gatt_server_value_changed_cb callback,
+ void *user_data)
+{
+ bt_gatt_characteristic_s *chr = (bt_gatt_characteristic_s *)characteristic;
+
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(characteristic);
+ BT_CHECK_INPUT_PARAMETER(callback);
+
+ chr->server_value_changed_cb = callback;
+ chr->server_value_changed_user_data = user_data;
+
+ return BT_ERROR_NONE;
+}
+
+int bt_gatt_server_get_service(bt_gatt_server_h server, const char *uuid,
+ bt_gatt_h *service)
+{
+ bt_gatt_server_s *server_s = (bt_gatt_server_s *)server;
+ bt_gatt_h gatt_handle = NULL;
+ int ret;
+
+ BT_CHECK_INPUT_PARAMETER(server);
+ BT_CHECK_INPUT_PARAMETER(uuid);
+ BT_CHECK_INPUT_PARAMETER(service);
+
+ ret = __get_gatt_handle_by_uuid(server_s->services, uuid, &gatt_handle);
+ if (ret == BT_ERROR_NONE && gatt_handle != NULL) {
+ *service = gatt_handle;
+ return BT_ERROR_NONE;
+ }
+
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ return ret;
+}
+
+int bt_gatt_server_foreach_services(bt_gatt_server_h server,
+ bt_gatt_foreach_cb callback, void *user_data)
+{
+ bt_gatt_server_s *server_s = (bt_gatt_server_s *)server;
+ GSList *l = NULL;
+ int total = 0;
+ int index = 1;
+
+ BT_CHECK_INPUT_PARAMETER(server);
+ BT_CHECK_INPUT_PARAMETER(callback);
+
+ total = g_slist_length(server_s->services);
+
+ for (l = server_s->services; l; l = g_slist_next(l)) {
+ if (!callback(total, index++, (bt_gatt_h)l->data, user_data))
+ break;
+ }
+
+ return BT_ERROR_NONE;
+}
+
+int bt_gatt_client_create(const char *remote_address, bt_gatt_client_h *client)
+{
+ int ret = BT_ERROR_NONE;
+ bt_gatt_client_s *client_s;
+ GSList *l;
+
+ BT_CHECK_GATT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(remote_address);
+
+ for (l = gatt_client_list; l; l = g_slist_next(gatt_client_list)) {
+ bt_gatt_client_s *c = (bt_gatt_client_s *)l->data;
+
+ if (!g_ascii_strcasecmp(c->remote_address, remote_address)) {
+ BT_ERR("Gatt client for %s is already created",
+ remote_address);
+ return BT_ERROR_ALREADY_DONE;
+ }
+ }
+
+ client_s = g_malloc0(sizeof(*client_s));
+ if (client_s == NULL) {
+ ret = BT_ERROR_OUT_OF_MEMORY;
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ return ret;
+ }
+ memset(client_s, 0x00, sizeof(*client_s));
+
+ client_s->remote_address = g_strdup(remote_address);
+ if (client_s->remote_address == NULL) {
+ free(client_s);
+ ret = BT_ERROR_OUT_OF_MEMORY;
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ return ret;
+ }
+ client_s->services_discovered = false;
+
+ *client = (bt_gatt_client_h)client_s;
+ gatt_client_list = g_slist_append(gatt_client_list, client_s);
+
+
+ if (_bt_gatt_client_update_all(*client) == BT_ERROR_NONE)
+ client_s->services_discovered = true;
+
+ return ret;
+}
+
+int bt_gatt_client_destroy(bt_gatt_client_h client)
+{
+ bt_gatt_client_s *client_s = (bt_gatt_client_s *)client;
+
+ BT_CHECK_GATT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(client);
+
+ g_free(client_s->remote_address);
+ g_slist_free_full(client_s->services, __bt_gatt_free_service);
+ gatt_client_list = g_slist_remove(gatt_client_list, client_s);
+ g_free(client_s);
+
+ return BT_ERROR_NONE;
+}
+
+int bt_gatt_client_get_remote_address(bt_gatt_client_h client,
+ char **remote_address)
+{
+ bt_gatt_client_s *client_s = (bt_gatt_client_s *)client;
+
+ BT_CHECK_GATT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(client);
+ BT_CHECK_INPUT_PARAMETER(remote_address);
+
+ *remote_address = g_strdup(client_s->remote_address);
+
+ return BT_ERROR_NONE;
+}
+
+static bool __bt_gatt_client_is_in_progress(void)
+{
+ if (_bt_check_cb(BT_EVENT_GATT_CLIENT_WRITE_CHARACTERISTIC) ||
+ _bt_check_cb(BT_EVENT_GATT_CLIENT_WRITE_DESCRIPTOR) ||
+ _bt_check_cb(BT_EVENT_GATT_CLIENT_READ_CHARACTERISTIC) ||
+ _bt_check_cb(BT_EVENT_GATT_CLIENT_READ_DESCRIPTOR)) {
+ BT_ERR("Operation is in progress");
+ return true;
+ }
+
+ return false;
+}
+
+int bt_gatt_client_read_value(bt_gatt_h gatt_handle,
+ bt_gatt_client_request_completed_cb callback, void *user_data)
+{
+ int ret = BT_ERROR_NONE;
+ bt_gatt_common_s *c = (bt_gatt_common_s *)gatt_handle;
+ bt_gatt_client_cb_data_s *cb_data;
+
+ BT_CHECK_GATT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(gatt_handle);
+ BT_CHECK_INPUT_PARAMETER(callback);
+
+ if (__bt_gatt_client_is_in_progress()) {
+ BT_ERR("Operation is in progress");
+ return BT_ERROR_NOW_IN_PROGRESS;
+ }
+
+ cb_data = malloc(sizeof(bt_gatt_client_cb_data_s));
+ if (cb_data == NULL) {
+ BT_ERR("Cannot alloc cb_data");
+ return BT_ERROR_OPERATION_FAILED;
+ }
+
+ cb_data->gatt_handle = gatt_handle;
+ cb_data->user_data = user_data;
+
+ if (c->type == BT_GATT_TYPE_CHARACTERISTIC) {
+ bt_gatt_characteristic_s *chr = (bt_gatt_characteristic_s *)gatt_handle;
+
+ ret = _bt_get_error_code(bluetooth_gatt_read_characteristic_value(chr->path));
+ if (ret != BT_ERROR_NONE) {
+ g_free(cb_data);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ } else {
+ _bt_set_cb(BT_EVENT_GATT_CLIENT_READ_CHARACTERISTIC, callback, cb_data);
+ }
+ } else if (c->type == BT_GATT_TYPE_DESCRIPTOR) {
+ bt_gatt_descriptor_s *desc = (bt_gatt_descriptor_s *)gatt_handle;
+
+ ret = _bt_get_error_code(bluetooth_gatt_read_descriptor_value(desc->path));
+ if (ret != BT_ERROR_NONE) {
+ g_free(cb_data);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ } else {
+ _bt_set_cb(BT_EVENT_GATT_CLIENT_READ_DESCRIPTOR, callback, cb_data);
+ }
+ } else {
+ BT_ERR("Invalid handle type for read ");
+ g_free(cb_data);
+ }
+
+ return ret;
+}
+
+int bt_gatt_client_write_value(bt_gatt_h gatt_handle,
+ bt_gatt_client_request_completed_cb callback, void *user_data)
+{
+ int ret = BT_ERROR_NONE;
+ bt_gatt_common_s *c = (bt_gatt_common_s *)gatt_handle;
+ bt_gatt_client_cb_data_s *cb_data;
+
+ BT_CHECK_GATT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(gatt_handle);
+ BT_CHECK_INPUT_PARAMETER(callback);
+
+ if (__bt_gatt_client_is_in_progress()) {
+ BT_ERR("Operation is in progress");
+ return BT_ERROR_NOW_IN_PROGRESS;
+ }
+
+ cb_data = malloc(sizeof(bt_gatt_client_cb_data_s));
+ if (cb_data == NULL) {
+ BT_ERR("Cannot alloc cb_data");
+ return BT_ERROR_OPERATION_FAILED;
+ }
+
+ cb_data->gatt_handle = gatt_handle;
+ cb_data->user_data = user_data;
+
+ if (c->type == BT_GATT_TYPE_CHARACTERISTIC) {
+ bt_gatt_characteristic_s *chr = (bt_gatt_characteristic_s *)gatt_handle;
+
+ BT_DBG("path : %s", chr->path);
+ if (chr->write_type == BT_GATT_WRITE_TYPE_WRITE)
+ ret = _bt_get_error_code(bluetooth_gatt_set_characteristics_value_by_type(
+ chr->path, (guint8 *)chr->value, chr->value_length,
+ BT_GATT_PROPERTY_WRITE));
+ else if (chr->write_type == BT_GATT_WRITE_TYPE_WRITE_NO_RESPONSE)
+ ret = _bt_get_error_code(bluetooth_gatt_set_characteristics_value_by_type(
+ chr->path, (guint8 *)chr->value, chr->value_length,
+ BT_GATT_PROPERTY_WRITE_WITHOUT_RESPONSE));
+ else {
+ BT_ERR("Unknow write type : %d", chr->write_type);
+ ret = BT_ERROR_OPERATION_FAILED;
+ }
+ if (ret != BT_ERROR_NONE) {
+ g_free(cb_data);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ } else {
+ _bt_set_cb(BT_EVENT_GATT_CLIENT_WRITE_CHARACTERISTIC, callback, cb_data);
+ }
+ } else if (c->type == BT_GATT_TYPE_DESCRIPTOR) {
+ bt_gatt_descriptor_s *desc = (bt_gatt_descriptor_s *)gatt_handle;
+
+ ret = _bt_get_error_code(bluetooth_gatt_write_descriptor_value(desc->path,
+ (guint8 *)desc->value, desc->value_length));
+ if (ret != BT_ERROR_NONE) {
+ g_free(cb_data);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ } else {
+ _bt_set_cb(BT_EVENT_GATT_CLIENT_WRITE_DESCRIPTOR, callback, cb_data);
+ }
+ } else {
+ BT_ERR("Invalid handle type for write ");
+ g_free(cb_data);
+ }
+
+ return ret;
+}
+
+static const bt_gatt_client_h __find_gatt_client(const char *remote_address)
+{
+ GSList *l = NULL;
+
+ for (l = gatt_client_list; l; l = g_slist_next(l)) {
+ bt_gatt_client_s *client_s = l->data;
+
+ if (!g_strcmp0(client_s->remote_address, remote_address)) {
+ return (const bt_gatt_client_h)l->data;
+ }
+ }
+
+ return NULL;
+}
+
+static gboolean __get_bdaddr_from_path(const char *path, char *addr)
+{
+ int i;
+ char *tmp;
+
+ /*
+ * e.g.
+ * /org/bluez/hci0/dev_E7_56_2A_AA_0C_FD/service001b
+ */
+ tmp = g_strstr_len(path, strlen(path), "dev_");
+ if (tmp == NULL)
+ return FALSE;
+ tmp += 4;
+
+ for (i = 0; *tmp != '\0' && i < BT_ADDR_STR_LEN; i++, tmp++) {
+ if (*tmp == '_')
+ addr[i] = ':';
+ else
+ addr[i] = *tmp;
+ }
+ addr[i] = '\0';
+
+ BT_DBG("path : %s, addr : %s", path, addr);
+
+ return TRUE;
+}
+
+static void __value_changed_cb(char *char_path,
+ char *value, int value_length, void *user_data)
+{
+ GSList *l;
+ GSList *ll;
+ bt_gatt_client_h client;
+ bt_gatt_client_s *client_s;
+ bt_gatt_service_s *svc;
+ bt_gatt_characteristic_s *chr;
+ char remote_address[BT_ADDR_STR_LEN + 1] = { 0, };
+
+ BT_DBG("%s", char_path);
+
+ if (__get_bdaddr_from_path(char_path, remote_address) == FALSE) {
+ BT_ERR("Cannot get addr from path : %s", char_path);
+ return;
+ }
+
+ client = __find_gatt_client(remote_address);
+ if (client == NULL) {
+ BT_ERR("Cannot find client [%s]", remote_address);
+ return;
+ }
+
+ client_s = (bt_gatt_client_s *)client;
+ for (l = client_s->services; l; l = g_slist_next(l)) {
+ svc = (bt_gatt_service_s *)l->data;
+ for (ll = svc->characteristics; ll; ll = g_slist_next(ll)) {
+ chr = (bt_gatt_characteristic_s *)ll->data;
+ if (g_ascii_strcasecmp(chr->path, char_path) == 0) {
+ if (chr->value_changed_cb)
+ chr->value_changed_cb(chr, value,
+ value_length,
+ chr->value_changed_user_data);
+
+ bt_gatt_set_value(chr, value, value_length);
+ return;
+ }
+ }
+ }
+}
+
+int bt_gatt_client_set_characteristic_value_changed_cb(bt_gatt_h characteristic,
+ bt_gatt_client_characteristic_value_changed_cb callback,
+ void *user_data)
+{
+ int ret;
+ bt_gatt_characteristic_s *chr = (bt_gatt_characteristic_s *)characteristic;
+
+ BT_CHECK_GATT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(characteristic);
+ BT_CHECK_INPUT_PARAMETER(callback);
+
+ chr->value_changed_cb = callback;
+ chr->value_changed_user_data = user_data;
+
+ if (chr->properties &
+ (BT_GATT_PROPERTY_NOTIFY | BT_GATT_PROPERTY_INDICATE)) {
+ ret = _bt_get_error_code(bluetooth_gatt_watch_characteristics(
+ chr->path));
+ if (ret != BT_ERROR_NONE)
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ else
+ _bt_set_cb(BT_EVENT_GATT_CLIENT_VALUE_CHANGED,
+ __value_changed_cb, NULL);
+ } else {
+ BT_DBG("notify or indication is not supported");
+ ret = BT_ERROR_NOT_SUPPORTED;
+ }
+
+ return BT_ERROR_NONE;
+}
+
+int bt_gatt_client_unset_characteristic_value_changed_cb(bt_gatt_h characteristic)
+{
+ int ret;
+ bt_gatt_characteristic_s *chr = (bt_gatt_characteristic_s *)characteristic;
+
+ BT_CHECK_GATT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(characteristic);
+
+ if (chr->properties &
+ (BT_GATT_PROPERTY_NOTIFY | BT_GATT_PROPERTY_INDICATE)) {
+ ret = _bt_get_error_code(bluetooth_gatt_unwatch_characteristics(
+ chr->path));
+ if (ret != BT_ERROR_NONE)
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ else {
+ chr->value_changed_cb = NULL;
+ chr->value_changed_user_data = NULL;
+ }
+ } else {
+ BT_DBG("notify or indication is not supported");
+ ret = BT_ERROR_NOT_SUPPORTED;
+ }
+
+ return ret;
+}
+
+int bt_gatt_client_get_service(bt_gatt_client_h client, const char *uuid,
+ bt_gatt_h *service)
+{
+ bt_gatt_client_s *client_s = (bt_gatt_client_s *)client;
+ bt_gatt_h gatt_handle = NULL;
+ int ret;
+
+ BT_CHECK_GATT_SUPPORT();
+ BT_CHECK_INPUT_PARAMETER(client);
+ BT_CHECK_INPUT_PARAMETER(uuid);
+ BT_CHECK_INPUT_PARAMETER(service);
+
+ ret = __get_gatt_handle_by_uuid(client_s->services, uuid, &gatt_handle);
+ if (ret == BT_ERROR_NONE && gatt_handle != NULL) {
+ *service = gatt_handle;
+ return BT_ERROR_NONE;
+ }
+
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ return ret;
+}
+
+int bt_gatt_client_foreach_services(bt_gatt_client_h client,
+ bt_gatt_foreach_cb callback, void *user_data)
+{
+ bt_gatt_client_s *client_s = (bt_gatt_client_s *)client;
+ GSList *l = NULL;
+ int total = 0;
+ int index = 1;
+
+ BT_CHECK_GATT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(client);
+ BT_CHECK_INPUT_PARAMETER(callback);
+
+ total = g_slist_length(client_s->services);
+
+ for (l = client_s->services; l; l = g_slist_next(l)) {
+ if (!callback(total, index++, (bt_gatt_h)l->data, user_data))
+ break;
+ }
+
+ return BT_ERROR_NONE;
+}
diff --git a/src/bluetooth-hdp.c b/src/bluetooth-hdp.c
index 60fe951..116c62d 100644
--- a/src/bluetooth-hdp.c
+++ b/src/bluetooth-hdp.c
@@ -24,38 +24,51 @@
#include "bluetooth.h"
#include "bluetooth_private.h"
-#ifdef LOG_TAG
-#undef LOG_TAG
+#ifdef TIZEN_HDP_DISABLE
+#define BT_CHECK_HDP_SUPPORT() \
+ { \
+ BT_CHECK_BT_SUPPORT(); \
+ LOGE("[%s] NOT_SUPPORTED(0x%08x)", __FUNCTION__, BT_ERROR_NOT_SUPPORTED); \
+ return BT_ERROR_NOT_SUPPORTED; \
+ }
+#else
+#define BT_CHECK_HDP_SUPPORT()
#endif
-#define LOG_TAG "TIZEN_N_BLUETOOTH"
-
int bt_hdp_register_sink_app(unsigned short data_type, char **app_id)
{
int error = BT_ERROR_NONE;
+ char *app_handle = NULL;
+ BT_CHECK_HDP_SUPPORT();
BT_CHECK_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(app_id);
- error = bluetooth_hdp_activate(data_type, HDP_ROLE_SINK, HDP_QOS_ANY, app_id);
+ error = bluetooth_hdp_activate(data_type, HDP_ROLE_SINK, HDP_QOS_ANY, &app_handle);
error = _bt_get_error_code(error);
if (BT_ERROR_NONE != error) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__,
- _bt_convert_error_to_string(error), error);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
+ return error;
}
- return error;
+
+ *app_id = strdup(app_handle);
+ if (*app_id == NULL) {
+ return BT_ERROR_OUT_OF_MEMORY;
+ }
+
+ return BT_ERROR_NONE;
}
int bt_hdp_unregister_sink_app(const char *app_id)
{
int error = BT_ERROR_NONE;
+ BT_CHECK_HDP_SUPPORT();
BT_CHECK_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(app_id);
error = bluetooth_hdp_deactivate(app_id);
error = _bt_get_error_code(error);
if (BT_ERROR_NONE != error) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__,
- _bt_convert_error_to_string(error), error);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
}
return error;
}
@@ -64,16 +77,15 @@ int bt_hdp_send_data(unsigned int channel, const char *data, unsigned int size)
{
int error = BT_ERROR_NONE;
+ BT_CHECK_HDP_SUPPORT();
BT_CHECK_INIT_STATUS();
if (NULL == data || 0 >= size) {
- LOGE("[%s] %s)", __FUNCTION__,
- _bt_convert_error_to_string(error));
+ BT_ERR("%s", _bt_convert_error_to_string(BT_ERROR_INVALID_PARAMETER));
}
error = bluetooth_hdp_send_data(channel, data, size);
error = _bt_get_error_code(error);
if (BT_ERROR_NONE != error) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__,
- _bt_convert_error_to_string(error), error);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
}
return error;
}
@@ -82,6 +94,8 @@ int bt_hdp_connect_to_source(const char *remote_address, const char *app_id)
{
int error = BT_ERROR_NONE;
bluetooth_device_address_t addr_hex = { {0,} };
+
+ BT_CHECK_HDP_SUPPORT();
BT_CHECK_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(app_id);
BT_CHECK_INPUT_PARAMETER(remote_address);
@@ -89,8 +103,7 @@ int bt_hdp_connect_to_source(const char *remote_address, const char *app_id)
error = bluetooth_hdp_connect(app_id, HDP_QOS_ANY, &addr_hex);
error = _bt_get_error_code(error);
if (error != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__,
- _bt_convert_error_to_string(error), error);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
}
return error;
}
@@ -99,6 +112,8 @@ int bt_hdp_disconnect(const char *remote_address, unsigned int channel)
{
int error = BT_ERROR_NONE;
bluetooth_device_address_t addr_hex = { {0,} };
+
+ BT_CHECK_HDP_SUPPORT();
BT_CHECK_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(remote_address);
_bt_convert_address_to_hex(&addr_hex, remote_address);
@@ -106,8 +121,7 @@ int bt_hdp_disconnect(const char *remote_address, unsigned int channel)
error = bluetooth_hdp_disconnect(channel, &addr_hex);
error = _bt_get_error_code(error);
if (error != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__,
- _bt_convert_error_to_string(error), error);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
}
return error;
}
@@ -115,6 +129,7 @@ int bt_hdp_disconnect(const char *remote_address, unsigned int channel)
int bt_hdp_set_connection_state_changed_cb(bt_hdp_connected_cb connected_cb,
bt_hdp_disconnected_cb disconnected_cb, void *user_data)
{
+ BT_CHECK_HDP_SUPPORT();
BT_CHECK_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(connected_cb);
BT_CHECK_INPUT_PARAMETER(disconnected_cb);
@@ -126,6 +141,7 @@ int bt_hdp_set_connection_state_changed_cb(bt_hdp_connected_cb connected_cb,
int bt_hdp_unset_connection_state_changed_cb(void)
{
+ BT_CHECK_HDP_SUPPORT();
BT_CHECK_INIT_STATUS();
if ( _bt_check_cb(BT_EVENT_HDP_CONNECTED) == true)
_bt_unset_cb(BT_EVENT_HDP_CONNECTED);
@@ -138,16 +154,18 @@ int bt_hdp_unset_connection_state_changed_cb(void)
int bt_hdp_set_data_received_cb(bt_hdp_data_received_cb callback,
void *user_data)
{
+ BT_CHECK_HDP_SUPPORT();
BT_CHECK_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(callback);
- _bt_set_cb(BT_EVENT_HDP_DATA_RECIEVED, callback, user_data);
+ _bt_set_cb(BT_EVENT_HDP_DATA_RECEIVED, callback, user_data);
return BT_ERROR_NONE;
}
int bt_hdp_unset_data_received_cb(void)
{
+ BT_CHECK_HDP_SUPPORT();
BT_CHECK_INIT_STATUS();
- if ( _bt_check_cb(BT_EVENT_HDP_DATA_RECIEVED) == true)
- _bt_unset_cb(BT_EVENT_HDP_DATA_RECIEVED);
+ if ( _bt_check_cb(BT_EVENT_HDP_DATA_RECEIVED) == true)
+ _bt_unset_cb(BT_EVENT_HDP_DATA_RECEIVED);
return BT_ERROR_NONE;
}
diff --git a/src/bluetooth-hid.c b/src/bluetooth-hid.c
index 921e1bf..a00fb72 100644
--- a/src/bluetooth-hid.c
+++ b/src/bluetooth-hid.c
@@ -25,46 +25,77 @@
#include "bluetooth.h"
#include "bluetooth_private.h"
-#ifdef LOG_TAG
-#undef LOG_TAG
+static bool is_hid_host_initialized = false;
+
+#ifdef TIZEN_HID_DISABLE
+#define BT_CHECK_HID_SUPPORT() \
+ { \
+ BT_CHECK_BT_SUPPORT(); \
+ LOGE("[%s] NOT_SUPPORTED(0x%08x)", __FUNCTION__, BT_ERROR_NOT_SUPPORTED); \
+ return BT_ERROR_NOT_SUPPORTED; \
+ }
+#else
+#define BT_CHECK_HID_SUPPORT()
#endif
-#define LOG_TAG "TIZEN_N_BLUETOOTH"
+
+#define BT_CHECK_HID_HOST_INIT_STATUS() \
+ if (__bt_check_hid_host_init_status() == BT_ERROR_NOT_INITIALIZED) \
+ { \
+ LOGE("[%s] NOT_INITIALIZED(0x%08x)", __FUNCTION__, BT_ERROR_NOT_INITIALIZED); \
+ return BT_ERROR_NOT_INITIALIZED; \
+ }
+
+int __bt_check_hid_host_init_status(void)
+{
+ if (is_hid_host_initialized != true) {
+ BT_ERR("NOT_INITIALIZED(0x%08x)", BT_ERROR_NOT_INITIALIZED);
+ return BT_ERROR_NOT_INITIALIZED;
+ }
+
+ return BT_ERROR_NONE;
+}
int bt_hid_host_initialize(bt_hid_host_connection_state_changed_cb connection_cb,
void *user_data)
{
int error;
+ BT_CHECK_HID_SUPPORT();
BT_CHECK_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(connection_cb);
error = bluetooth_hid_init(_bt_hid_event_proxy, user_data);
error = _bt_get_error_code(error);
if (BT_ERROR_NONE != error) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__,
- _bt_convert_error_to_string(error), error);
- } else {
- _bt_set_cb(BT_EVENT_HID_CONNECTION_STATUS, connection_cb, user_data);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
+ return error;
}
- return error;
+
+ _bt_set_cb(BT_EVENT_HID_CONNECTION_STATUS, connection_cb, user_data);
+
+ is_hid_host_initialized = true;
+ return BT_ERROR_NONE;
}
int bt_hid_host_deinitialize()
{
int error;
+ BT_CHECK_HID_SUPPORT();
BT_CHECK_INIT_STATUS();
+ BT_CHECK_HID_HOST_INIT_STATUS();
error = bluetooth_hid_deinit();
error = _bt_get_error_code(error);
if (BT_ERROR_NONE != error) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__,
- _bt_convert_error_to_string(error), error);
- } else {
- _bt_unset_cb(BT_EVENT_HID_CONNECTION_STATUS);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
+ return error;
}
- return error;
+ _bt_unset_cb(BT_EVENT_HID_CONNECTION_STATUS);
+
+ is_hid_host_initialized = false;
+ return BT_ERROR_NONE;
}
int bt_hid_host_connect(const char *remote_address)
@@ -72,7 +103,9 @@ int bt_hid_host_connect(const char *remote_address)
int error;
bluetooth_device_address_t addr_hex = { {0,} };
+ BT_CHECK_HID_SUPPORT();
BT_CHECK_INIT_STATUS();
+ BT_CHECK_HID_HOST_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(remote_address);
_bt_convert_address_to_hex(&addr_hex, remote_address);
@@ -80,8 +113,7 @@ int bt_hid_host_connect(const char *remote_address)
error = bluetooth_hid_connect((hid_device_address_t *)&addr_hex);
error = _bt_get_error_code(error);
if (error != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__,
- _bt_convert_error_to_string(error), error);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
}
return error;
}
@@ -91,7 +123,9 @@ int bt_hid_host_disconnect(const char *remote_address)
int error;
bluetooth_device_address_t addr_hex = { {0,} };
+ BT_CHECK_HID_SUPPORT();
BT_CHECK_INIT_STATUS();
+ BT_CHECK_HID_HOST_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(remote_address);
_bt_convert_address_to_hex(&addr_hex, remote_address);
@@ -99,8 +133,7 @@ int bt_hid_host_disconnect(const char *remote_address)
error = bluetooth_hid_disconnect((hid_device_address_t *)&addr_hex);
error = _bt_get_error_code(error);
if (error != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__,
- _bt_convert_error_to_string(error), error);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
}
return error;
}
diff --git a/src/bluetooth-opp-client.c b/src/bluetooth-opp-client.c
index 817c1bd..a05321b 100644
--- a/src/bluetooth-opp-client.c
+++ b/src/bluetooth-opp-client.c
@@ -24,12 +24,36 @@
#include "bluetooth.h"
#include "bluetooth_private.h"
-#ifdef LOG_TAG
-#undef LOG_TAG
+GList *sending_files;
+static bool is_opp_client_initialized = false;
+
+#ifdef TIZEN_OPP_CLIENT_DISABLE
+#define BT_CHECK_OPP_CLIENT_SUPPORT() \
+ { \
+ BT_CHECK_BT_SUPPORT(); \
+ LOGE("[%s] NOT_SUPPORTED(0x%08x)", __FUNCTION__, BT_ERROR_NOT_SUPPORTED); \
+ return BT_ERROR_NOT_SUPPORTED; \
+ }
+#else
+#define BT_CHECK_OPP_CLIENT_SUPPORT()
#endif
-#define LOG_TAG "TIZEN_N_BLUETOOTH"
-GList *sending_files;
+#define BT_CHECK_OPP_CLIENT_INIT_STATUS() \
+ if (__bt_check_opp_client_init_status() == BT_ERROR_NOT_INITIALIZED) \
+ { \
+ LOGE("[%s] NOT_INITIALIZED(0x%08x)", __FUNCTION__, BT_ERROR_NOT_INITIALIZED); \
+ return BT_ERROR_NOT_INITIALIZED; \
+ }
+
+int __bt_check_opp_client_init_status(void)
+{
+ if (is_opp_client_initialized != true) {
+ BT_ERR("NOT_INITIALIZED(0x%08x)", BT_ERROR_NOT_INITIALIZED);
+ return BT_ERROR_NOT_INITIALIZED;
+ }
+
+ return BT_ERROR_NONE;
+}
char** __bt_opp_get_file_array(GList *file_list)
{
@@ -60,7 +84,7 @@ char** __bt_opp_get_file_array(GList *file_list)
}
for (i = 0; i < file_num; i++)
- LOGE("[%s] %s", __FUNCTION__, files[i]);
+ BT_DBG("file: %s", files[i]);
return files;
}
@@ -69,46 +93,61 @@ int bt_opp_client_initialize(void)
{
int error_code = BT_ERROR_NONE;
+ BT_CHECK_OPP_CLIENT_SUPPORT();
BT_CHECK_INIT_STATUS();
error_code = _bt_get_error_code(bluetooth_opc_init());
if (error_code != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__, _bt_convert_error_to_string(error_code), error_code);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code),
+ error_code);
+ return error_code;
}
- return error_code;
+ is_opp_client_initialized = true;
+ return BT_ERROR_NONE;
}
int bt_opp_client_deinitialize(void)
{
int error_code = BT_ERROR_NONE;
+ BT_CHECK_OPP_CLIENT_SUPPORT();
BT_CHECK_INIT_STATUS();
+ BT_CHECK_OPP_CLIENT_INIT_STATUS();
error_code = _bt_get_error_code(bluetooth_opc_deinit());
+ bt_opp_client_clear_files();
if (error_code != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__, _bt_convert_error_to_string(error_code), error_code);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code),
+ error_code);
+ return error_code;
}
- bt_opp_client_clear_files();
-
- return error_code;
+ is_opp_client_initialized = false;
+ return BT_ERROR_NONE;
}
int bt_opp_client_add_file(const char *file)
{
int error_code = BT_ERROR_NONE;
+ BT_CHECK_OPP_CLIENT_SUPPORT();
BT_CHECK_INIT_STATUS();
+ BT_CHECK_OPP_CLIENT_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(file);
+ BT_CHECK_ADAPTER_STATUS();
if (access(file, F_OK) == 0) {
sending_files = g_list_append(sending_files, strdup(file));
} else {
- error_code = BT_ERROR_INVALID_PARAMETER;
- LOGE("[%s] %s(0x%08x)", __FUNCTION__, _bt_convert_error_to_string(error_code), error_code);
+ if (errno == EACCES || errno == EPERM)
+ error_code = BT_ERROR_PERMISSION_DENIED;
+ else
+ error_code = BT_ERROR_INVALID_PARAMETER;
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code),
+ error_code);
}
return error_code;
@@ -120,7 +159,10 @@ int bt_opp_client_clear_files(void)
int file_num = 0;
char *c_file = NULL;
+ BT_CHECK_OPP_CLIENT_SUPPORT();
BT_CHECK_INIT_STATUS();
+ BT_CHECK_OPP_CLIENT_INIT_STATUS();
+ BT_CHECK_ADAPTER_STATUS();
if (sending_files) {
file_num = g_list_length(sending_files);
@@ -151,7 +193,9 @@ int bt_opp_client_push_files(const char *remote_address,
bluetooth_device_address_t addr_hex = { {0,} };
char **files = NULL;
+ BT_CHECK_OPP_CLIENT_SUPPORT();
BT_CHECK_INIT_STATUS();
+ BT_CHECK_OPP_CLIENT_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(remote_address);
_bt_convert_address_to_hex(&addr_hex, remote_address);
@@ -161,7 +205,8 @@ int bt_opp_client_push_files(const char *remote_address,
error_code = _bt_get_error_code(bluetooth_opc_push_files(&addr_hex, files));
if (error_code != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__, _bt_convert_error_to_string(error_code), error_code);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code),
+ error_code);
} else {
_bt_set_cb(BT_EVENT_OPP_CLIENT_PUSH_RESPONSED, responded_cb, user_data);
_bt_set_cb(BT_EVENT_OPP_CLIENT_PUSH_PROGRESS, progress_cb, user_data);
@@ -180,12 +225,15 @@ int bt_opp_client_cancel_push(void)
{
int error_code = BT_ERROR_NONE;
+ BT_CHECK_OPP_CLIENT_SUPPORT();
BT_CHECK_INIT_STATUS();
+ BT_CHECK_OPP_CLIENT_INIT_STATUS();
error_code = _bt_get_error_code(bluetooth_opc_cancel_push());
if (error_code != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__, _bt_convert_error_to_string(error_code), error_code);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code),
+ error_code);
}
return error_code;
diff --git a/src/bluetooth-opp-server.c b/src/bluetooth-opp-server.c
index 9526a92..9830305 100644
--- a/src/bluetooth-opp-server.c
+++ b/src/bluetooth-opp-server.c
@@ -22,10 +22,36 @@
#include "bluetooth.h"
#include "bluetooth_private.h"
-#ifdef LOG_TAG
-#undef LOG_TAG
+static bool is_opp_server_initialized = false;
+
+#ifdef TIZEN_OPP_SERVER_DISABLE
+#define BT_CHECK_OPP_SERVER_SUPPORT() \
+ { \
+ BT_CHECK_BT_SUPPORT(); \
+ LOGE("[%s] NOT_SUPPORTED(0x%08x)", __FUNCTION__, BT_ERROR_NOT_SUPPORTED); \
+ return BT_ERROR_NOT_SUPPORTED; \
+ }
+#else
+#define BT_CHECK_OPP_SERVER_SUPPORT()
#endif
-#define LOG_TAG "TIZEN_N_BLUETOOTH"
+
+
+#define BT_CHECK_OPP_SERVER_INIT_STATUS() \
+ if (__bt_check_opp_server_init_status() == BT_ERROR_NOT_INITIALIZED) \
+ { \
+ LOGE("[%s] NOT_INITIALIZED(0x%08x)", __FUNCTION__, BT_ERROR_NOT_INITIALIZED); \
+ return BT_ERROR_NOT_INITIALIZED; \
+ }
+
+int __bt_check_opp_server_init_status(void)
+{
+ if (is_opp_server_initialized != true) {
+ BT_ERR("NOT_INITIALIZED(0x%08x)", BT_ERROR_NOT_INITIALIZED);
+ return BT_ERROR_NOT_INITIALIZED;
+ }
+
+ return BT_ERROR_NONE;
+}
int bt_opp_server_initialize(const char *destination,
bt_opp_server_push_requested_cb push_requested_cb,
@@ -33,18 +59,22 @@ int bt_opp_server_initialize(const char *destination,
{
int error_code = BT_ERROR_NONE;
+ BT_CHECK_OPP_SERVER_SUPPORT();
BT_CHECK_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(destination);
- _bt_get_error_code(bluetooth_obex_server_init(destination));
+ error_code = _bt_get_error_code(bluetooth_obex_server_init(destination));
if (error_code != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__, _bt_convert_error_to_string(error_code), error_code);
- } else {
- _bt_set_cb(BT_EVENT_OPP_PUSH_REQUESTED, push_requested_cb, user_data);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code),
+ error_code);
+ return error_code;
}
- return error_code;
+ _bt_set_cb(BT_EVENT_OPP_PUSH_REQUESTED, push_requested_cb, user_data);
+
+ is_opp_server_initialized = true;
+ return BT_ERROR_NONE;
}
int bt_opp_server_initialize_by_connection_request(const char *destination,
@@ -53,25 +83,31 @@ int bt_opp_server_initialize_by_connection_request(const char *destination,
{
int error_code = BT_ERROR_NONE;
+ BT_CHECK_OPP_SERVER_SUPPORT();
BT_CHECK_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(destination);
- _bt_get_error_code(bluetooth_obex_server_init_without_agent(destination));
+ error_code = _bt_get_error_code(bluetooth_obex_server_init_without_agent(destination));
if (error_code != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__, _bt_convert_error_to_string(error_code), error_code);
- } else {
- _bt_set_cb(BT_EVENT_OPP_CONNECTION_REQUESTED, connection_requested_cb, user_data);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code),
+ error_code);
+ return error_code;
}
- return error_code;
+ _bt_set_cb(BT_EVENT_OPP_CONNECTION_REQUESTED, connection_requested_cb, user_data);
+
+ is_opp_server_initialized = true;
+ return BT_ERROR_NONE;
}
int bt_opp_server_deinitialize(void)
{
int error_code = BT_ERROR_NONE;
+ BT_CHECK_OPP_SERVER_SUPPORT();
BT_CHECK_INIT_STATUS();
+ BT_CHECK_OPP_SERVER_INIT_STATUS();
if (_bt_check_cb(BT_EVENT_OPP_CONNECTION_REQUESTED) == false) {
error_code = _bt_get_error_code(bluetooth_obex_server_deinit());
@@ -80,14 +116,17 @@ int bt_opp_server_deinitialize(void)
error_code = _bt_get_error_code(bluetooth_obex_server_deinit_without_agent());
}
- if (error_code != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__, _bt_convert_error_to_string(error_code), error_code);
- }
-
_bt_unset_cb(BT_EVENT_OPP_CONNECTION_REQUESTED);
_bt_unset_cb(BT_EVENT_OPP_PUSH_REQUESTED);
- return error_code;
+ if (error_code != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code),
+ error_code);
+ return error_code;
+ }
+
+ is_opp_server_initialized = false;
+ return BT_ERROR_NONE;
}
int bt_opp_server_accept(bt_opp_server_transfer_progress_cb progress_cb,
@@ -98,7 +137,9 @@ int bt_opp_server_accept(bt_opp_server_transfer_progress_cb progress_cb,
{
int error_code = BT_ERROR_NONE;
+ BT_CHECK_OPP_SERVER_SUPPORT();
BT_CHECK_INIT_STATUS();
+ BT_CHECK_OPP_SERVER_INIT_STATUS();
/* Unset the transfer callbacks */
_bt_unset_cb(BT_EVENT_OPP_SERVER_TRANSFER_PROGRESS);
@@ -112,7 +153,8 @@ int bt_opp_server_accept(bt_opp_server_transfer_progress_cb progress_cb,
}
if (error_code != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__, _bt_convert_error_to_string(error_code), error_code);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code),
+ error_code);
} else {
_bt_set_cb(BT_EVENT_OPP_SERVER_TRANSFER_PROGRESS, progress_cb, user_data);
_bt_set_cb(BT_EVENT_OPP_SERVER_TRANSFER_FINISHED, finished_cb, user_data);
@@ -125,7 +167,9 @@ int bt_opp_server_reject(void)
{
int error_code = BT_ERROR_NONE;
+ BT_CHECK_OPP_SERVER_SUPPORT();
BT_CHECK_INIT_STATUS();
+ BT_CHECK_OPP_SERVER_INIT_STATUS();
if (_bt_check_cb(BT_EVENT_OPP_CONNECTION_REQUESTED) == false) {
error_code = _bt_get_error_code(bluetooth_obex_server_reject_authorize());
@@ -135,7 +179,8 @@ int bt_opp_server_reject(void)
}
if (error_code != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__, _bt_convert_error_to_string(error_code), error_code);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code),
+ error_code);
}
/* Unset the transfer callbacks */
@@ -149,12 +194,15 @@ int bt_opp_server_set_destination(const char *destination)
{
int error_code = BT_ERROR_NONE;
+ BT_CHECK_OPP_SERVER_SUPPORT();
BT_CHECK_INIT_STATUS();
+ BT_CHECK_OPP_SERVER_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(destination);
error_code = _bt_get_error_code(bluetooth_obex_server_set_destination_path(destination));
if (error_code != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__, _bt_convert_error_to_string(error_code), error_code);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code),
+ error_code);
}
return error_code;
@@ -164,11 +212,14 @@ int bt_opp_server_cancel_transfer(int transfer_id)
{
int error_code = BT_ERROR_NONE;
+ BT_CHECK_OPP_SERVER_SUPPORT();
BT_CHECK_INIT_STATUS();
+ BT_CHECK_OPP_SERVER_INIT_STATUS();
error_code = _bt_get_error_code(bluetooth_obex_server_cancel_transfer(transfer_id));
if (error_code != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__, _bt_convert_error_to_string(error_code), error_code);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code),
+ error_code);
}
return error_code;
diff --git a/src/bluetooth-pan.c b/src/bluetooth-pan.c
index 2366b92..a00cd7f 100644
--- a/src/bluetooth-pan.c
+++ b/src/bluetooth-pan.c
@@ -24,23 +24,29 @@
#include "bluetooth.h"
#include "bluetooth_private.h"
-#ifdef LOG_TAG
-#undef LOG_TAG
-#endif
-#define LOG_TAG "TIZEN_N_BLUETOOTH"
-
GList *sending_files;
+#ifdef TIZEN_PAN_DISABLE
+#define BT_CHECK_PAN_SUPPORT() \
+ { \
+ BT_CHECK_BT_SUPPORT(); \
+ LOGE("[%s] NOT_SUPPORTED(0x%08x)", __FUNCTION__, BT_ERROR_NOT_SUPPORTED); \
+ return BT_ERROR_NOT_SUPPORTED; \
+ }
+#else
+#define BT_CHECK_PAN_SUPPORT()
+#endif
+
int bt_nap_activate(void)
{
int error = BT_ERROR_NONE;
+ BT_CHECK_PAN_SUPPORT();
BT_CHECK_INIT_STATUS();
error = bluetooth_network_activate_server();
error = _bt_get_error_code(error);
if (error != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__,
- _bt_convert_error_to_string(error), error);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
}
return error;
}
@@ -49,12 +55,49 @@ int bt_nap_deactivate(void)
{
int error = BT_ERROR_NONE;
+ BT_CHECK_PAN_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ error = bluetooth_network_deactivate_server();
+ error = _bt_get_error_code(error);
+ if (error != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
+ }
+ return error;
+}
+
+/* bluez don't support the disconnect API about NAP server */
+/* So we implement this, deactivate the server and re-activate the server */
+int bt_nap_disconnect_all(void)
+{
+ int error = BT_ERROR_NONE;
+
+ BT_CHECK_PAN_SUPPORT();
BT_CHECK_INIT_STATUS();
error = bluetooth_network_deactivate_server();
error = _bt_get_error_code(error);
if (error != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__,
- _bt_convert_error_to_string(error), error);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error), error);
+ } else {
+ return bt_nap_activate();
+ }
+
+ return error;
+}
+
+int bt_nap_disconnect(const char *remote_address)
+{
+ int error = BT_ERROR_INVALID_PARAMETER;
+ bluetooth_device_address_t addr_hex = { {0,} };
+
+ BT_CHECK_PAN_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(remote_address);
+ _bt_convert_address_to_hex(&addr_hex, remote_address);
+ error = bluetooth_network_server_disconnect(&addr_hex);
+ error = _bt_get_error_code(error);
+ if (error != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error),
+ error);
}
return error;
}
@@ -63,6 +106,7 @@ int bt_nap_set_connection_state_changed_cb(
bt_nap_connection_state_changed_cb callback,
void *user_data)
{
+ BT_CHECK_PAN_SUPPORT();
BT_CHECK_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(callback);
_bt_set_cb(BT_EVENT_NAP_CONNECTION_STATE_CHANGED, callback, user_data);
@@ -80,6 +124,7 @@ int bt_panu_set_connection_state_changed_cb(
bt_panu_connection_state_changed_cb callback,
void *user_data)
{
+ BT_CHECK_PAN_SUPPORT();
BT_CHECK_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(callback);
_bt_set_cb(BT_EVENT_PAN_CONNECTION_STATE_CHANGED, callback, user_data);
@@ -97,6 +142,7 @@ int bt_panu_connect(const char *remote_address, bt_panu_service_type_e type)
int error = BT_ERROR_INVALID_PARAMETER;
bluetooth_device_address_t addr_hex = { {0,} };
+ BT_CHECK_PAN_SUPPORT();
BT_CHECK_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(remote_address);
_bt_convert_address_to_hex(&addr_hex, remote_address);
@@ -105,8 +151,8 @@ int bt_panu_connect(const char *remote_address, bt_panu_service_type_e type)
BLUETOOTH_NETWORK_NAP_ROLE, NULL);
error = _bt_get_error_code(error);
if (error != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__,
- _bt_convert_error_to_string(error), error);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error),
+ error);
}
}
return error;
@@ -117,14 +163,15 @@ int bt_panu_disconnect(const char *remote_address)
int error = BT_ERROR_INVALID_PARAMETER;
bluetooth_device_address_t addr_hex = { {0,} };
+ BT_CHECK_PAN_SUPPORT();
BT_CHECK_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(remote_address);
_bt_convert_address_to_hex(&addr_hex, remote_address);
error = bluetooth_network_disconnect(&addr_hex);
error = _bt_get_error_code(error);
if (error != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__,
- _bt_convert_error_to_string(error), error);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error),
+ error);
}
return error;
}
diff --git a/src/bluetooth-pbap.c b/src/bluetooth-pbap.c
new file mode 100644
index 0000000..96d8419
--- /dev/null
+++ b/src/bluetooth-pbap.c
@@ -0,0 +1,282 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <glib.h>
+#include <dlog.h>
+#include <stdio.h>
+#include <stdbool.h>
+#include <string.h>
+#include <bluetooth-api.h>
+
+#include "bluetooth.h"
+#include "bluetooth_internal.h"
+#include "bluetooth_private.h"
+
+#ifdef TIZEN_PBAP_DISABLE
+#define BT_CHECK_PBAP_SUPPORT() \
+ { \
+ BT_CHECK_BT_SUPPORT(); \
+ LOGE("[%s] NOT_SUPPORTED(0x%08x)", __FUNCTION__, BT_ERROR_NOT_SUPPORTED); \
+ return BT_ERROR_NOT_SUPPORTED; \
+ }
+#else
+#define BT_CHECK_PBAP_SUPPORT()
+#endif
+
+int bt_pbap_init(void)
+{
+ BT_CHECK_PBAP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ int error_code = BT_ERROR_NONE;
+ error_code = _bt_get_error_code(bluetooth_pbap_init());
+ if (error_code != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code), error_code);
+ }
+
+ return error_code;
+}
+
+int bt_pbap_deinit(void)
+{
+ BT_CHECK_PBAP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ int error_code = BT_ERROR_NONE;
+ error_code = _bt_get_error_code(bluetooth_pbap_deinit());
+ if (error_code != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code), error_code);
+ }
+
+ return error_code;
+}
+
+int bt_pbap_connect(const char *address, bt_pbap_enabled_cb callback, void *user_data)
+{
+ bluetooth_device_address_t addr_hex = { {0,} };
+ int error_code = BT_ERROR_NONE;
+
+ BT_CHECK_PBAP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(address);
+ BT_CHECK_INPUT_PARAMETER(callback);
+
+ _bt_convert_address_to_hex(&addr_hex, address);
+ _bt_set_cb(BT_EVENT_PBAP_CONNECTION_STATUS, callback, user_data);
+
+ error_code = _bt_get_error_code(bluetooth_pbap_connect(&addr_hex));
+ if (error_code != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code), error_code);
+ _bt_unset_cb(BT_EVENT_PBAP_CONNECTION_STATUS);
+ }
+
+ return error_code;
+}
+
+int bt_pbap_disconnect(const char *address, bt_pbap_enabled_cb callback, void *user_data)
+{
+ bluetooth_device_address_t addr_hex = { {0,} };
+ int error_code = BT_ERROR_NONE;
+
+ BT_CHECK_PBAP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(address);
+ BT_CHECK_INPUT_PARAMETER(callback);
+
+ _bt_convert_address_to_hex(&addr_hex, address);
+ _bt_set_cb(BT_EVENT_PBAP_CONNECTION_STATUS, callback, user_data);
+
+ error_code = _bt_get_error_code(bluetooth_pbap_disconnect(&addr_hex));
+ if (error_code != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code), error_code);
+ _bt_unset_cb(BT_EVENT_PBAP_CONNECTION_STATUS);
+ }
+
+ return error_code;
+}
+
+int bt_pbap_get_phonebook_size(const char *address, bt_pbap_addressbook_source_e source,
+ bt_pbap_folder_type_e type, bt_pbap_phonebook_size_cb callback, void *user_data)
+{
+ bluetooth_device_address_t addr_hex = { {0,} };
+ bt_pbap_folder_t folder = { 0, };
+ int error_code = BT_ERROR_NONE;
+
+ BT_CHECK_PBAP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(address);
+ BT_CHECK_INPUT_PARAMETER(callback);
+
+ folder.addressbook = source;
+ folder.folder_type = type;
+ _bt_convert_address_to_hex(&addr_hex, address);
+ _bt_set_cb(BT_EVENT_PBAP_PHONEBOOK_SIZE, callback, user_data);
+ error_code = _bt_get_error_code(bluetooth_pbap_get_phonebook_size(&addr_hex, &folder));
+ if (error_code != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code), error_code);
+ _bt_unset_cb(BT_EVENT_PBAP_PHONEBOOK_SIZE);
+ }
+
+ return error_code;
+}
+
+int bt_pbap_get_phonebook(const char *address, bt_pbap_addressbook_source_e source,
+ bt_pbap_folder_type_e type, bt_pbap_filter_vcard_format_e format,
+ bt_pbap_filter_sort_order_e order, unsigned short offset,
+ unsigned short maxlistcount, long long unsigned fields,
+ bt_pbap_phonebook_pull_cb callback, void *user_data)
+{
+ bluetooth_device_address_t addr_hex = { {0,} };
+ bt_pbap_pull_parameters_t app_param = { 0, };
+ bt_pbap_folder_t folder = { 0, };
+ int error_code = BT_ERROR_NONE;
+
+ BT_CHECK_PBAP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(address);
+ BT_CHECK_INPUT_PARAMETER(callback);
+
+ /* To get size of phonebook, a separate API is provided
+ * Hence, passing maxlistcount as 0 is restricted. */
+ if (maxlistcount <= 0)
+ return BT_ERROR_INVALID_PARAMETER;
+
+ /* Maximum value of maxlistcount is 65535 */
+ if (maxlistcount > 65535)
+ maxlistcount = 65535;
+
+ app_param.format = format;
+ app_param.order = order;
+ app_param.offset = offset;
+ app_param.maxlist = maxlistcount;
+ app_param.fields = fields;
+
+ folder.addressbook = source;
+ folder.folder_type = type;
+
+ _bt_convert_address_to_hex(&addr_hex, address);
+ _bt_set_cb(BT_EVENT_PBAP_PHONEBOOK_PULL, callback, user_data);
+ error_code = _bt_get_error_code(bluetooth_pbap_get_phonebook(&addr_hex, &folder, &app_param));
+ if (error_code != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code), error_code);
+ _bt_unset_cb(BT_EVENT_PBAP_PHONEBOOK_PULL);
+ }
+
+ return error_code;
+}
+
+int bt_pbap_get_list(const char *address, bt_pbap_addressbook_source_e source,
+ bt_pbap_folder_type_e type, bt_pbap_filter_sort_order_e order,
+ unsigned short offset, unsigned short maxlistcount,
+ bt_pbap_list_vcards_cb callback, void *user_data)
+{
+ bluetooth_device_address_t addr_hex = { {0,} };
+ bt_pbap_list_parameters_t app_param = { 0, };
+ bt_pbap_folder_t folder = { 0, };
+ int error_code = BT_ERROR_NONE;
+
+ BT_CHECK_PBAP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(address);
+ BT_CHECK_INPUT_PARAMETER(callback);
+
+ _bt_convert_address_to_hex(&addr_hex, address);
+ app_param.order = order;
+ app_param.offset = offset;
+ app_param.maxlist = maxlistcount;
+
+ folder.addressbook = source;
+ folder.folder_type = type;
+
+ _bt_set_cb(BT_EVENT_PBAP_VCARD_LIST, callback, user_data);
+ error_code = _bt_get_error_code(bluetooth_pbap_get_list(&addr_hex, &folder, &app_param));
+ if (error_code != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code), error_code);
+ _bt_unset_cb(BT_EVENT_PBAP_VCARD_LIST);
+ }
+
+ return error_code;
+}
+
+int bt_pbap_pull_vcard(const char *address, bt_pbap_addressbook_source_e source,
+ bt_pbap_folder_type_e type, int index,
+ bt_pbap_filter_vcard_format_e format, long long unsigned fields,
+ bt_pbap_get_vcard_cb callback, void *user_data)
+{
+ bluetooth_device_address_t addr_hex = { {0,} };
+ bt_pbap_pull_vcard_parameters_t app_param = { 0, };
+ bt_pbap_folder_t folder = { 0, };
+
+ int error_code = BT_ERROR_NONE;
+
+ BT_CHECK_PBAP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(address);
+ BT_CHECK_INPUT_PARAMETER(callback);
+
+ _bt_convert_address_to_hex(&addr_hex, address);
+ app_param.format = format;
+ app_param.fields = fields;
+ app_param.index = index;
+
+ folder.addressbook = source;
+ folder.folder_type = type;
+
+ _bt_set_cb(BT_EVENT_PBAP_VCARD_PULL, callback, user_data);
+ error_code = _bt_get_error_code(bluetooth_pbap_pull_vcard(&addr_hex, &folder, &app_param));
+ if (error_code != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code), error_code);
+ _bt_unset_cb(BT_EVENT_PBAP_VCARD_PULL);
+ }
+
+ return error_code;
+}
+
+int bt_pbap_phonebook_search(const char *address,
+ bt_pbap_addressbook_source_e source, bt_pbap_folder_type_e type,
+ bt_pbap_search_field_e search_attribute, const char *search_value,
+ bt_pbap_filter_sort_order_e order,
+ unsigned short offset, unsigned short maxlistcount,
+ bt_pbap_search_list_cb callback, void *user_data)
+{
+ bluetooth_device_address_t addr_hex = { {0,} };
+ bt_pbap_folder_t folder = { 0, };
+ bt_pbap_search_parameters_t app_param = { 0, };
+ int error_code = BT_ERROR_NONE;
+
+ BT_CHECK_PBAP_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(address);
+ BT_CHECK_INPUT_PARAMETER(callback);
+
+ _bt_convert_address_to_hex(&addr_hex, address);
+ folder.addressbook = source;
+ folder.folder_type = type;
+
+ app_param.order = order;
+ app_param.offset = offset;
+ app_param.maxlist = maxlistcount;
+ app_param.search_attribute = search_attribute;
+ strncpy(app_param.search_value, search_value,
+ BLUETOOTH_PBAP_MAX_SEARCH_VALUE_LENGTH -1 );
+
+ _bt_set_cb(BT_EVENT_PBAP_PHONEBOOK_SEARCH, callback, user_data);
+ error_code = _bt_get_error_code(bluetooth_pbap_phonebook_search(&addr_hex, &folder, &app_param));
+ if (error_code != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code), error_code);
+ _bt_unset_cb(BT_EVENT_PBAP_PHONEBOOK_SEARCH);
+ }
+
+ return error_code;
+}
diff --git a/src/bluetooth-socket.c b/src/bluetooth-socket.c
index e0563be..52c6a69 100644
--- a/src/bluetooth-socket.c
+++ b/src/bluetooth-socket.c
@@ -14,6 +14,8 @@
* limitations under the License.
*/
+#include <errno.h>
+#include <tizen.h>
#include <dlog.h>
#include <stdio.h>
#include <bluetooth-api.h>
@@ -21,16 +23,11 @@
#include "bluetooth.h"
#include "bluetooth_private.h"
-#ifdef LOG_TAG
-#undef LOG_TAG
-#endif
-#define LOG_TAG "TIZEN_N_BLUETOOTH"
-
-
int bt_socket_create_rfcomm(const char *uuid, int *socket_fd)
{
int ret = 0;
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(uuid);
BT_CHECK_INPUT_PARAMETER(socket_fd);
@@ -38,7 +35,7 @@ int bt_socket_create_rfcomm(const char *uuid, int *socket_fd)
ret = bluetooth_rfcomm_create_socket(uuid);
if (ret < 0) {
ret = _bt_get_error_code(ret);
- LOGE("[%s] %s(0x%08x)", __FUNCTION__, _bt_convert_error_to_string(ret), ret);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
return ret;
} else {
*socket_fd = ret;
@@ -50,10 +47,12 @@ int bt_socket_destroy_rfcomm(int socket_fd)
{
int error_code = BT_ERROR_NONE;
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
error_code = _bt_get_error_code(bluetooth_rfcomm_remove_socket(socket_fd));
if (error_code != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__, _bt_convert_error_to_string(error_code), error_code);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code),
+ error_code);
}
return error_code;
@@ -61,6 +60,7 @@ int bt_socket_destroy_rfcomm(int socket_fd)
int bt_socket_is_service_used(const char* service_uuid, bool *used)
{
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(service_uuid);
BT_CHECK_INPUT_PARAMETER(used);
@@ -74,10 +74,12 @@ int bt_socket_listen_and_accept_rfcomm(int socket_fd, int max_pending_connection
{
int error_code = BT_ERROR_NONE;
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
error_code = _bt_get_error_code(bluetooth_rfcomm_listen_and_accept(socket_fd, max_pending_connections));
if (error_code != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__, _bt_convert_error_to_string(error_code), error_code);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code),
+ error_code);
}
return error_code;
@@ -87,25 +89,29 @@ int bt_socket_listen(int socket_fd, int max_pending_connections)
{
int error_code = BT_ERROR_NONE;
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
error_code = _bt_get_error_code(bluetooth_rfcomm_listen(socket_fd, max_pending_connections));
if (error_code != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__, _bt_convert_error_to_string(error_code), error_code);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code),
+ error_code);
}
return error_code;
}
-int bt_socket_accept(int socket_fd, int *connected_socket_fd)
+int bt_socket_accept(int socket_fd)
{
int error_code = BT_ERROR_NONE;
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
- error_code = _bt_get_error_code(bluetooth_rfcomm_accept_connection(socket_fd, connected_socket_fd));
+ error_code = _bt_get_error_code(bluetooth_rfcomm_accept_connection(socket_fd));
if (error_code != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__, _bt_convert_error_to_string(error_code), error_code);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code),
+ error_code);
}
return error_code;
@@ -115,11 +121,68 @@ int bt_socket_reject(int socket_fd)
{
int error_code = BT_ERROR_NONE;
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
error_code = _bt_get_error_code(bluetooth_rfcomm_reject_connection(socket_fd));
if (error_code != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__, _bt_convert_error_to_string(error_code), error_code);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code),
+ error_code);
+ }
+
+ return error_code;
+}
+
+int bt_socket_create_rfcomm_ex(const char *uuid, const char *bus_name, const char *object_path)
+{
+ int error_code = BT_ERROR_NONE;
+
+ BT_CHECK_BT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(uuid);
+ BT_CHECK_INPUT_PARAMETER(bus_name);
+ BT_CHECK_INPUT_PARAMETER(object_path);
+
+ error_code = bluetooth_rfcomm_create_socket_ex(uuid, bus_name, object_path);
+ if (error_code != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code),
+ error_code);
+ }
+
+ return error_code;
+}
+
+int bt_socket_destroy_rfcomm_ex(const char *uuid)
+{
+ int error_code = BT_ERROR_NONE;
+
+ BT_CHECK_BT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(uuid);
+
+ error_code = _bt_get_error_code(bluetooth_rfcomm_remove_socket_ex(uuid));
+ if (error_code != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code),
+ error_code);
+ }
+
+ return error_code;
+}
+
+int bt_socket_listen_and_accept_rfcomm_ex(const char *uuid, int max_pending_connections, const char* bus_name, const char *object_path)
+{
+ int error_code = BT_ERROR_NONE;
+
+ BT_CHECK_BT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(uuid);
+ BT_CHECK_INPUT_PARAMETER(bus_name);
+ BT_CHECK_INPUT_PARAMETER(object_path);
+
+ error_code = _bt_get_error_code(bluetooth_rfcomm_listen_and_accept_ex(uuid, max_pending_connections, bus_name, object_path));
+ if (error_code != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code),
+ error_code);
}
return error_code;
@@ -130,6 +193,7 @@ int bt_socket_connect_rfcomm(const char *remote_address, const char *remote_port
bluetooth_device_address_t addr_hex = { {0,} };
int error_code = BT_ERROR_NONE;
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(remote_address);
BT_CHECK_INPUT_PARAMETER(remote_port_uuid);
@@ -138,7 +202,8 @@ int bt_socket_connect_rfcomm(const char *remote_address, const char *remote_port
error_code = _bt_get_error_code(bluetooth_rfcomm_connect(&addr_hex, remote_port_uuid));
if (error_code != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__, _bt_convert_error_to_string(error_code), error_code);
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code),
+ error_code);
}
return error_code;
@@ -146,32 +211,43 @@ int bt_socket_connect_rfcomm(const char *remote_address, const char *remote_port
int bt_socket_disconnect_rfcomm(int socket_fd)
{
- int ret = BT_ERROR_NONE;
+ int error_code = BT_ERROR_NONE;
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
- ret = _bt_get_error_code(bluetooth_rfcomm_disconnect(socket_fd));
- if (ret != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__, _bt_convert_error_to_string(ret), ret);
+ error_code = _bt_get_error_code(bluetooth_rfcomm_disconnect(socket_fd));
+ if (error_code != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code),
+ error_code);
}
- return ret;
+ return error_code;
}
int bt_socket_send_data(int socket_fd, const char *data, int length)
{
int ret = 0;
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
- ret = bluetooth_rfcomm_write(socket_fd, data, length);
- if (ret == BLUETOOTH_ERROR_NOT_IN_OPERATION) {
- LOGE("[%s] OPERATION_FAILED(0x%08x)", __FUNCTION__, BT_ERROR_OPERATION_FAILED);
- return BT_ERROR_OPERATION_FAILED;
- }
- ret = _bt_get_error_code(ret);
- if (ret != BT_ERROR_NONE) {
- LOGE("[%s] %s(0x%08x)", __FUNCTION__, _bt_convert_error_to_string(ret), ret);
+ ret = bluetooth_rfcomm_write(socket_fd, data, length);
+ if (ret <= 0) {
+ if (ret == -1) {
+ /* write fail case */
+ if (errno == EACCES || errno == EPERM)
+ set_last_result(BT_ERROR_PERMISSION_DENIED);
+ else if (errno == EAGAIN || errno == EWOULDBLOCK)
+ set_last_result(BT_ERROR_AGAIN);
+ else
+ set_last_result(BT_ERROR_OPERATION_FAILED);
+ } else {
+ ret = _bt_get_error_code(ret);
+ set_last_result(ret);
+ }
+
+ BT_ERR("Write failed, ret = %d", ret);
}
return ret;
@@ -179,6 +255,7 @@ int bt_socket_send_data(int socket_fd, const char *data, int length)
int bt_socket_set_data_received_cb(bt_socket_data_received_cb callback, void *user_data)
{
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(callback);
_bt_set_cb(BT_EVENT_DATA_RECEIVED, callback, user_data);
@@ -187,6 +264,7 @@ int bt_socket_set_data_received_cb(bt_socket_data_received_cb callback, void *us
int bt_socket_unset_data_received_cb(void)
{
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
_bt_unset_cb(BT_EVENT_DATA_RECEIVED);
return BT_ERROR_NONE;
@@ -194,6 +272,7 @@ int bt_socket_unset_data_received_cb(void)
int bt_socket_set_connection_requested_cb(bt_socket_connection_requested_cb callback, void *user_data)
{
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(callback);
_bt_set_cb(BT_EVENT_RFCOMM_CONNECTION_REQUESTED, callback, user_data);
@@ -202,6 +281,7 @@ int bt_socket_set_connection_requested_cb(bt_socket_connection_requested_cb call
int bt_socket_unset_connection_requested_cb(void)
{
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
_bt_unset_cb(BT_EVENT_RFCOMM_CONNECTION_REQUESTED);
return BT_ERROR_NONE;
@@ -209,6 +289,7 @@ int bt_socket_unset_connection_requested_cb(void)
int bt_socket_set_connection_state_changed_cb(bt_socket_connection_state_changed_cb callback, void *user_data)
{
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(callback);
_bt_set_cb(BT_EVENT_CONNECTION_STATE_CHANGED, callback, user_data);
@@ -217,6 +298,7 @@ int bt_socket_set_connection_state_changed_cb(bt_socket_connection_state_changed
int bt_socket_unset_connection_state_changed_cb(void)
{
+ BT_CHECK_BT_SUPPORT();
BT_CHECK_INIT_STATUS();
_bt_unset_cb(BT_EVENT_CONNECTION_STATE_CHANGED);
return BT_ERROR_NONE;
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 7715cac..e5a75bd 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -15,3 +15,11 @@ FOREACH(src ${sources})
ADD_EXECUTABLE(${src_name} ${src})
TARGET_LINK_LIBRARIES(${src_name} ${fw_name} ${${fw_test}_LDFLAGS})
ENDFOREACH()
+
+INSTALL(TARGETS bt_unit_test DESTINATION bin)
+INSTALL(TARGETS bt_onoff DESTINATION bin)
+INSTALL(TARGETS bt_infinite_spp_test DESTINATION bin)
+INSTALL(FILES capi.network.bluetooth.test.rule DESTINATION /etc/smack/accesses2.d/)
+INSTALL(FILES capi.network.bluetooth.infinite.spp.test.rule DESTINATION /etc/smack/accesses2.d/)
+
+ADD_SUBDIRECTORY(gatt_profile_test_suite)
diff --git a/test/bt_chat_client.c b/test/bt_chat_client.c
deleted file mode 100644
index bfdd5e8..0000000
--- a/test/bt_chat_client.c
+++ /dev/null
@@ -1,453 +0,0 @@
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-#include <bluetooth.h>
-#include <dlog.h>
-#include <glib.h>
-#include <string.h>
-
-#ifdef LOG_TAG
-#undef LOG_TAG
-#endif
-#define LOG_TAG "BT_CHAT_CLIENT"
-
-/**
- * Variables
- **/
-static GMainLoop* g_mainloop = NULL;
-static bt_adapter_state_e bt_state = BT_ADAPTER_DISABLED;
-static int socket_fd = -1;
-static char* bt_address = NULL;
-static char* server_name = "chat_server";
-static char quit_command[5] = "Quit";
-static int bonding_state = BT_ERROR_OPERATION_FAILED;
-
-
-/**
- * Callback functions
- **/
-gboolean timeout_func(gpointer data)
-{
- LOGE("[%s] Callback: Timeout.", __FUNCTION__);
- g_main_loop_quit((GMainLoop*)data);
- return FALSE;
-}
-
-void bt_state_changed_impl(int result, bt_adapter_state_e adapter_state, void* user_data)
-{
- if(adapter_state == BT_ADAPTER_ENABLED)
- {
- if(result == BT_ERROR_NONE)
- {
- LOGI("[%s] Callback: BT was enabled successfully.", __FUNCTION__);
- bt_state = BT_ADAPTER_ENABLED;
- }
- else
- {
- LOGE("[%s] Callback: Failed to enable BT.", __FUNCTION__);
- }
- }
-
- if(g_mainloop)
- {
- g_main_loop_quit(g_mainloop);
- }
-}
-
-void bt_socket_connection_state_changed_impl(int result, bt_socket_connection_state_e connection_state,
- bt_socket_connection_s *connection, void *user_data)
-{
- if(result == BT_ERROR_NONE)
- {
- LOGI("[%s] Callback: Result is BT_ERROR_NONE.", __FUNCTION__);
- }
- else
- {
- LOGI("[%s] Callback: Result is not BT_ERROR_NONE.", __FUNCTION__);
- }
-
- if(connection_state == BT_SOCKET_CONNECTED)
- {
- LOGI("[%s] Callback: Connected.", __FUNCTION__);
- if(result == BT_ERROR_NONE && connection != NULL)
- {
- socket_fd = connection->socket_fd;
- LOGI("[%s] Callback: Socket of connection - %d.", __FUNCTION__, socket_fd);
- LOGI("[%s] Callback: Role of connection - %d.", __FUNCTION__, connection->local_role);
- LOGI("[%s] Callback: Address of connection - %s.", __FUNCTION__, connection->remote_address);
-
- if(bt_socket_send_data(socket_fd, quit_command, strlen(quit_command)) == BT_ERROR_NONE)
- {
- LOGI("[%s] Callback: Send quit command.", __FUNCTION__);
- }
- else
- {
- LOGE("[%s] Callback: bt_socket_send_data() failed.", __FUNCTION__);
- if(g_mainloop)
- {
- g_main_loop_quit(g_mainloop);
- }
- }
- }
- else
- {
- LOGI("[%s] Callback: Failed to connect", __FUNCTION__);
- if(g_mainloop)
- {
- g_main_loop_quit(g_mainloop);
- }
- }
- }
- else
- {
- LOGI("[%s] Callback: Disconnected.", __FUNCTION__);
- }
-}
-
-void bt_socket_data_received_impl(bt_socket_received_data_s *data, void *user_data)
-{
- if(socket_fd == data->socket_fd)
- {
- if(data->data_size > 0)
- {
- if(!strncmp(data->data, quit_command, data->data_size))
- {
- LOGI("[%s] Callback: Quit command.", __FUNCTION__);
- if(g_mainloop)
- {
- g_main_loop_quit(g_mainloop);
- }
- }
- }
- else
- {
- LOGE("[%s] Callback: No data.", __FUNCTION__);
- }
- }
- else
- {
- LOGI("[%s] Callback: Another socket - %d.", __FUNCTION__, data->socket_fd);
- }
-}
-
-bool bt_adapter_bonded_device_impl(bt_device_info_s *device_info, void *user_data)
-{
- int i = 0;
- if(device_info != NULL)
- {
- if(device_info->remote_name != NULL && !strcmp(device_info->remote_name, (char*)user_data))
- {
- LOGI("[%s] Callback: chat_server is found in bonded list.", __FUNCTION__);
- if( device_info->remote_address != NULL )
- {
- LOGI("[%s] Callback: Address of chat_server - %s.", __FUNCTION__, device_info->remote_address);
- bt_address = strdup(device_info->remote_address);
- LOGI("[%s] Callback: The number of service_count - %d.", __FUNCTION__, device_info->service_count);
- if(device_info->service_count <= 0)
- {
- bonding_state = BT_ERROR_SERVICE_SEARCH_FAILED;
- }
- else
- {
- bonding_state = BT_ERROR_NONE;
- for(i=0; i<device_info->service_count; i++)
- {
- LOGI("[%s] Callback: service[%d] - %s", __FUNCTION__, i+1, device_info->service_uuid[i]);
- }
- LOGI("[%s] Callback: is_bonded - %d.", __FUNCTION__, device_info->is_bonded);
- LOGI("[%s] Callback: is_connected - %d.", __FUNCTION__, device_info->is_connected);
- LOGI("[%s] Callback: is_authorized - %d.", __FUNCTION__, device_info->is_authorized);
- }
- }
- else
- {
- LOGE("[%s] Callback: Address of chat_server is NULL.", __FUNCTION__);
- }
-
- return false;
- }
- }
-
- return true;
-}
-
-void bt_adapter_device_discovery_state_changed_impl(int result, bt_adapter_device_discovery_state_e discovery_state,
- bt_adapter_device_discovery_info_s *discovery_info, void *user_data)
-{
- if(discovery_state == BT_ADAPTER_DEVICE_DISCOVERY_FOUND)
- {
- if(discovery_info->remote_address != NULL && !strcmp(discovery_info->remote_name, server_name))
- {
- LOGI("[%s] Callback: chat_server is found.", __FUNCTION__);
- LOGI("[%s] Callback: Address of chat_server - %s.", __FUNCTION__, discovery_info->remote_address);
- LOGI("[%s] Callback: Device major class - %d.", __FUNCTION__, discovery_info->bt_class.major_device_class);
- LOGI("[%s] Callback: Device minor class - %d.", __FUNCTION__, discovery_info->bt_class.minor_device_class);
- LOGI("[%s] Callback: Service major class - %d.", __FUNCTION__, discovery_info->bt_class.major_service_class_mask);
- bt_address = strdup(discovery_info->remote_address);
- LOGI("[%s] Callback: is_bonded - %d.", __FUNCTION__, discovery_info->is_bonded);
- bt_adapter_stop_device_discovery();
- }
- else
- {
- LOGE("[%s] Callback: Another device is found.", __FUNCTION__);
- }
- }
- else if(discovery_state == BT_ADAPTER_DEVICE_DISCOVERY_FINISHED)
- {
- LOGI("[%s] Callback: device discovery finished.", __FUNCTION__);
- if(g_mainloop)
- {
- g_main_loop_quit(g_mainloop);
- }
- }
-}
-
-void bt_device_bond_created_impl(int result, bt_device_info_s *device_info, void *user_data)
-{
- if(device_info != NULL && !strcmp(device_info->remote_address, bt_address))
- {
- bonding_state = result;
- if(result == BT_ERROR_NONE)
- {
- LOGI("[%s] Callback: A bond with chat_server is created.", __FUNCTION__);
- LOGI("[%s] Callback: The number of service - %d.", __FUNCTION__, device_info->service_count);
-
- int i = 0;
- for(i=0; i<device_info->service_count; i++)
- {
- LOGI("[%s] Callback: service[%d] - %s", __FUNCTION__, i+1, device_info->service_uuid[i]);
- }
- LOGI("[%s] Callback: is_bonded - %d.", __FUNCTION__, device_info->is_bonded);
- LOGI("[%s] Callback: is_connected - %d.", __FUNCTION__, device_info->is_connected);
- }
- else
- {
- LOGE("[%s] Callback: Creating a bond is failed.", __FUNCTION__);
- }
- }
- else
- {
- LOGE("[%s] Callback: A bond with another device is created.", __FUNCTION__);
- }
-
- if(g_mainloop)
- {
- g_main_loop_quit(g_mainloop);
- }
-}
-
-void bt_device_service_searched_impl(int result, bt_device_sdp_info_s* sdp_info, void* user_data)
-{
- if(sdp_info != NULL && !strcmp(sdp_info->remote_address, bt_address))
- {
- bonding_state = result;
- if(result == BT_ERROR_NONE)
- {
- LOGI("[%s] Callback: Services of chat_service are found.", __FUNCTION__);
- LOGI("[%s] Callback: The number of service - %d.", __FUNCTION__, sdp_info->service_count);
-
- int i = 0;
- for(i = 0; i < sdp_info->service_count; i++)
- {
- LOGI("[%s] Callback: service[%d] - %s", __FUNCTION__, i+1, sdp_info->service_uuid[i]);
- }
- }
- }
- else
- {
- LOGE("[%s] Callback: Services of another device are found.", __FUNCTION__);
- }
-
- if(g_mainloop)
- {
- g_main_loop_quit(g_mainloop);
- }
-}
-
-
-
-
-int main()
-{
- g_mainloop = g_main_loop_new(NULL, FALSE);
- const char* my_uuid="11011101-0000-1000-8000-00805F9B34FB";
- int timeout_id = -1;
-
- LOGI("[%s] Client starts.", __FUNCTION__);
-
- if(bt_initialize() != BT_ERROR_NONE)
- {
- LOGE("[%s] bt_initialize() failed.", __FUNCTION__);
- return -1;
- }
-
- if(bt_adapter_get_state(&bt_state) != BT_ERROR_NONE)
- {
- LOGE("[%s] bt_adapter_get_state() failed.", __FUNCTION__);
- return -1;
- }
-
- // Enable BT
- if(bt_state == BT_ADAPTER_DISABLED)
- {
- if(bt_adapter_set_state_changed_cb(bt_state_changed_impl, NULL) != BT_ERROR_NONE)
- {
- LOGE("[%s] bt_adapter_set_state_changed_cb() failed.", __FUNCTION__);
- return -1;
- }
-
- if(bt_adapter_enable() == BT_ERROR_NONE)
- {
- LOGI("[%s] bt_adapter_state_changed_cb will be called.", __FUNCTION__);
- timeout_id = g_timeout_add (60000, timeout_func, g_mainloop);
- g_main_loop_run(g_mainloop);
- g_source_remove(timeout_id);
- }
- else
- {
- LOGE("[%s] bt_adapter_enable() failed.", __FUNCTION__);
- return -1;
- }
- }
- else
- {
- LOGI("[%s] BT was already enabled.", __FUNCTION__);
- }
-
- // Device discovery
- if(bt_state == BT_ADAPTER_ENABLED)
- {
- if(bt_adapter_foreach_bonded_device(bt_adapter_bonded_device_impl, server_name) != BT_ERROR_NONE)
- {
- LOGE("[%s] bt_adapter_foreach_bonded_device() failed.", __FUNCTION__);
- return -1;
- }
-
- if(bt_address == NULL)
- {
- if(bt_adapter_set_device_discovery_state_changed_cb(bt_adapter_device_discovery_state_changed_impl, NULL)
- != BT_ERROR_NONE )
- {
- LOGE("[%s] bt_adapter_set_device_discovery_state_changed_cb() failed.", __FUNCTION__);
- return -1;
- }
-
- if(bt_adapter_start_device_discovery() == BT_ERROR_NONE)
- {
- LOGI("[%s] bt_adapter_device_discovery_state_changed_cb will be called.", __FUNCTION__);
- g_main_loop_run(g_mainloop);
- }
- else
- {
- LOGE("[%s] bt_adapter_start_device_discovery() failed.", __FUNCTION__);
- return -1;
- }
- }
- else
- {
- LOGI("[%s] chat_server is found in bonded device list.", __FUNCTION__);
- }
- }
- else
- {
- LOGE("[%s] BT is not enabled.", __FUNCTION__);
- return -1;
- }
-
- // Create bond with a server
- if(bonding_state == BT_ERROR_SERVICE_SEARCH_FAILED)
- {
- if(bt_device_set_service_searched_cb(bt_device_service_searched_impl, NULL) != BT_ERROR_NONE)
- {
- LOGE("[%s] bt_device_set_service_searched_cb() failed.", __FUNCTION__);
- return -1;
- }
-
- if(bt_device_start_service_search(bt_address) == BT_ERROR_NONE)
- {
- LOGI("[%s] bt_device_service_searched_cb will be called.", __FUNCTION__);
- g_main_loop_run(g_mainloop);
- }
- else
- {
- LOGE("[%s] bt_device_start_service_search() failed.", __FUNCTION__);
- return -1;
- }
- }
- else if(bonding_state != BT_ERROR_NONE)
- {
- if(bt_device_set_bond_created_cb(bt_device_bond_created_impl, NULL) != BT_ERROR_NONE)
- {
- LOGE("[%s] bt_device_set_bond_created_cb() failed.", __FUNCTION__);
- return -1;
- }
-
- if(bt_device_create_bond(bt_address) == BT_ERROR_NONE)
- {
- LOGI("[%s] bt_device_bond_created_cb will be called.", __FUNCTION__);
- g_main_loop_run(g_mainloop);
- }
- else
- {
- LOGE("[%s] bt_device_create_bond() failed.", __FUNCTION__);
- return -1;
- }
- }
-
- // Connecting socket as a client
- if( bonding_state == BT_ERROR_NONE )
- {
- if( bt_socket_set_connection_state_changed_cb(bt_socket_connection_state_changed_impl, NULL) != BT_ERROR_NONE )
- {
- LOGE("[%s] bt_socket_set_connection_state_changed_cb() failed.", __FUNCTION__);
- return -1;
- }
-
- if( bt_socket_set_data_received_cb(bt_socket_data_received_impl, NULL) != BT_ERROR_NONE )
- {
- LOGE("[%s] bt_socket_set_data_received_cb() failed.", __FUNCTION__);
- return -1;
- }
-
- if( bt_socket_connect_rfcomm(bt_address, my_uuid) == BT_ERROR_NONE )
- {
- LOGI("[%s] bt_socket_connection_state_changed_cb will be called.", __FUNCTION__);
- g_main_loop_run(g_mainloop);
- }
- else
- {
- LOGE("[%s] bt_socket_connect_rfcomm() failed.", __FUNCTION__);
- return -1;
- }
-
- if( bt_socket_disconnect_rfcomm(socket_fd) != BT_ERROR_NONE )
- {
- LOGE("[%s] bt_socket_disconnect_rfcomm() failed.", __FUNCTION__);
- return -1;
- }
- }
- else
- {
- LOGE("[%s] Bond is not created.", __FUNCTION__);
- return -1;
- }
-
- bt_deinitialize();
-
- LOGI("[%s] Client ends.", __FUNCTION__);
- return 0;
-}
diff --git a/test/bt_chat_server.c b/test/bt_chat_server.c
deleted file mode 100644
index 95493a1..0000000
--- a/test/bt_chat_server.c
+++ /dev/null
@@ -1,281 +0,0 @@
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-#include <bluetooth.h>
-#include <dlog.h>
-#include <glib.h>
-#include <string.h>
-
-#ifdef LOG_TAG
-#undef LOG_TAG
-#endif
-#define LOG_TAG "BT_CHAT_SERVER"
-
-/**
- * Variables
- **/
-static GMainLoop* g_mainloop = NULL;
-static bt_adapter_visibility_mode_e visibility_mode = BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE;
-static bt_adapter_state_e bt_state = BT_ADAPTER_DISABLED;
-static int service_socket = -1;
-static int connected_socket = -1;
-static char* quit_command = "Quit";
-
-
-/**
- * Callback functions
- **/
-gboolean timeout_func(gpointer data)
-{
- LOGE("[%s] Timeout.", __FUNCTION__);
- if(g_mainloop)
- {
- g_main_loop_quit((GMainLoop*)data);
- }
-
- return FALSE;
-}
-
-void bt_state_changed_impl(int result, bt_adapter_state_e adapter_state, void* user_data)
-{
- if( adapter_state == BT_ADAPTER_ENABLED )
- {
- if( result == BT_ERROR_NONE )
- {
- LOGI("[%s] Callback: BT was enabled successfully.", __FUNCTION__);
- bt_state = BT_ADAPTER_ENABLED;
- }
- else
- {
- LOGE("[%s] Callback: Failed to enable BT.", __FUNCTION__);
- }
- }
-
- if(g_mainloop)
- {
- g_main_loop_quit(g_mainloop);
- }
-}
-
-void bt_socket_connection_state_changed_impl(int result, bt_socket_connection_state_e connection_state,
- bt_socket_connection_s *connection, void *user_data)
-{
- if( result == BT_ERROR_NONE )
- {
- LOGI("[%s] Callback: Result is BT_ERROR_NONE.", __FUNCTION__);
- }
- else
- {
- LOGI("[%s] Callback: Result is not BT_ERROR_NONE.", __FUNCTION__);
- }
-
- if( connection_state == BT_SOCKET_CONNECTED )
- {
- LOGI("[%s] Callback: Connected.", __FUNCTION__);
- if( connection != NULL )
- {
- connected_socket = connection->socket_fd;
- LOGI("[%s] Callback: Socket of connection - %d.", __FUNCTION__, connected_socket);
- LOGI("[%s] Callback: Role of connection - %d.", __FUNCTION__, connection->local_role);
- LOGI("[%s] Callback: Address of connection - %s.", __FUNCTION__, connection->remote_address);
- }
- else
- {
- LOGI("[%s] Callback: No connection data", __FUNCTION__);
- }
- }
- else
- {
- LOGI("[%s] Callback: Disconnected.", __FUNCTION__);
- LOGI("[%s] Callback: Socket of connection - %d.", __FUNCTION__, connected_socket);
- LOGI("[%s] Callback: Role of connection - %d.", __FUNCTION__, connection->local_role);
- LOGI("[%s] Callback: Address of connection - %s.", __FUNCTION__, connection->remote_address);
- }
-}
-
-void bt_socket_data_received_impl(bt_socket_received_data_s *data, void *user_data)
-{
- if( data->data_size > 0 )
- {
- if( !strncmp(data->data, quit_command, data->data_size) )
- {
- LOGI("[%s] Callback: Quit command.", __FUNCTION__);
- if(g_mainloop)
- {
- g_main_loop_quit(g_mainloop);
- }
- }
-
- if( bt_socket_send_data(connected_socket, quit_command, strlen(quit_command)) == BT_ERROR_NONE )
- {
- LOGI("[%s] Callback: Send quit command.", __FUNCTION__);
- }
- else
- {
- LOGE("[%s] Callback: bt_socket_send_data() failed.", __FUNCTION__);
- }
- }
- else
- {
- LOGE("[%s] Callback: No data.", __FUNCTION__);
- }
-}
-
-
-int main()
-{
- g_mainloop = g_main_loop_new(NULL, FALSE);
- const char* my_uuid="11011101-0000-1000-8000-00805F9B34FB";
- int timeout_id = -1;
-
- LOGI("[%s] Server starts.", __FUNCTION__);
-
- if(bt_initialize() != BT_ERROR_NONE)
- {
- LOGE("[%s] bt_initialize() failed.", __FUNCTION__);
- return -1;
- }
-
- if(bt_adapter_get_state(&bt_state) != BT_ERROR_NONE)
- {
- LOGE("[%s] bt_adapter_get_state() failed.", __FUNCTION__);
- return -1;
- }
-
- // Enable BT
- if(bt_state == BT_ADAPTER_DISABLED)
- {
- if(bt_adapter_set_state_changed_cb(bt_state_changed_impl, NULL) != BT_ERROR_NONE)
- {
- LOGE("[%s] bt_adapter_set_state_changed_cb() failed.", __FUNCTION__);
- return -1;
- }
-
- if(bt_adapter_enable() == BT_ERROR_NONE)
- {
- LOGI("[%s] bt_adapter_state_changed_cb will be called.", __FUNCTION__);
- timeout_id = g_timeout_add (60000, timeout_func, g_mainloop);
- g_main_loop_run(g_mainloop);
- g_source_remove(timeout_id);
- }
- else
- {
- LOGE("[%s] bt_adapter_enable() failed.", __FUNCTION__);
- return -1;
- }
- }
- else
- {
- LOGI("[%s] BT was already enabled.", __FUNCTION__);
- }
-
- // Set name as "chat_server"
- if(bt_state == BT_ADAPTER_ENABLED)
- {
- char* name = NULL;
- if(bt_adapter_get_name(&name) != BT_ERROR_NONE)
- {
- LOGE("[%s] bt_adapter_get_name() failed.", __FUNCTION__);
- return -1;
- }
-
- if(strncmp(name, "chat_server", strlen(name)) != 0)
- {
- if(bt_adapter_set_name("chat_server") != BT_ERROR_NONE)
- {
- if (NULL != name)
- free(name);
- LOGE("[%s] bt_adapter_set_name() failed.", __FUNCTION__);
- return -1;
- }
- }
- if (NULL != name)
- free(name);
- }
- else
- {
- LOGE("[%s] BT is not enabled.", __FUNCTION__);
- return -1;
- }
- // Set visibility as BT_ADAPTER_VISIBILITY_MODE_GENERAL_DISCOVERABLE
- if(bt_adapter_get_visibility(&visibility_mode) != BT_ERROR_NONE)
- {
- LOGE("[%s] bt_adapter_get_visibility() failed.", __FUNCTION__);
- return -1;
- }
-
- if(visibility_mode != BT_ADAPTER_VISIBILITY_MODE_GENERAL_DISCOVERABLE)
- {
- if(bt_adapter_set_visibility(BT_ADAPTER_VISIBILITY_MODE_GENERAL_DISCOVERABLE, 0) != BT_ERROR_NONE)
- {
- LOGE("[%s] bt_adapter_set_visibility() failed.", __FUNCTION__);
- return -1;
- }
- visibility_mode = BT_ADAPTER_VISIBILITY_MODE_GENERAL_DISCOVERABLE;
- }
- else
- {
- LOGI("[%s] Visibility mode was already set as BT_ADAPTER_VISIBILITY_MODE_GENERAL_DISCOVERABLE.", __FUNCTION__);
- }
-
- // Connecting socket as a server
- if(bt_socket_create_rfcomm(my_uuid, &service_socket) != BT_ERROR_NONE)
- {
- LOGE("[%s] bt_socket_create_rfcomm() failed.", __FUNCTION__);
- return -1;
- }
- LOGI("[%s] socket is created - %d.", __FUNCTION__, service_socket);
-
- if(bt_socket_set_connection_state_changed_cb(bt_socket_connection_state_changed_impl, NULL) != BT_ERROR_NONE)
- {
- LOGE("[%s] bt_socket_set_connection_state_changed_cb() failed.", __FUNCTION__);
- return -1;
- }
-
- if(bt_socket_set_data_received_cb(bt_socket_data_received_impl, NULL) != BT_ERROR_NONE)
- {
- LOGE("[%s] bt_socket_set_data_received_cb() failed.", __FUNCTION__);
- return -1;
- }
-
- if(bt_socket_listen_and_accept_rfcomm(service_socket, 5) == BT_ERROR_NONE)
- {
- LOGI("[%s] bt_socket_connection_state_changed_cb will be called.", __FUNCTION__);
- g_main_loop_run(g_mainloop);
- }
- else
- {
- LOGE("[%s] bt_socket_listen_and_accept_rfcomm() failed.", __FUNCTION__);
- return -1;
- }
-
- sleep(5); // Wait for completing delivery
- if(bt_socket_destroy_rfcomm(service_socket) != BT_ERROR_NONE)
- {
- LOGE("[%s] bt_socket_destroy_rfcomm() failed.", __FUNCTION__);
- return -1;
- }
- else
- {
- LOGE("[%s] bt_socket_destroy_rfcomm() succeeded.", __FUNCTION__);
- }
-
- bt_deinitialize();
-
- LOGI("[%s] Server ends.", __FUNCTION__);
- return 0;
-}
diff --git a/test/bt_infinite_spp_test.c b/test/bt_infinite_spp_test.c
new file mode 100644
index 0000000..cde3b6e
--- /dev/null
+++ b/test/bt_infinite_spp_test.c
@@ -0,0 +1,512 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdio.h>
+#include <dlog.h>
+#include <glib.h>
+#include <sys/time.h>
+#include <bluetooth.h>
+
+#undef LOG_TAG
+#define LOG_TAG "BT_SPP_TEST"
+
+#define BT_DBG(fmt, args...) \
+ SLOGD(fmt, ##args)
+#define BT_INFO(fmt, args...) \
+ SLOGI(fmt, ##args)
+#define BT_ERR(fmt, args...) \
+ SLOGE(fmt, ##args)
+
+typedef enum
+{
+ BT_SPP_TEST_ROLE_SERVER = 0x00,
+ BT_SPP_TEST_ROLE_CLIENT,
+} bt_spp_test_role_e;
+
+#define BT_INFINITE_SPP_TEST_REMOTE_ADDRESS_FILE_PATH "/opt/usr/media/Others/.bt_dump/spp_test_addr"
+#define BT_INFINITE_SPP_TEST_RESULT_FILE_PATH "/opt/usr/media/Others/.bt_dump/spp_result.log"
+
+bool __bt_connect_spp(void);
+static gboolean __bt_send_data(gpointer user_data);
+bool __bt_verify_data(char *data, int data_size);
+bool __bt_bond_remote_device(void);
+bool __bt_is_paired(void);
+
+static GMainLoop* g_mainloop = NULL;
+
+static bt_spp_test_role_e spp_role = BT_SPP_TEST_ROLE_SERVER;
+static char remote_addr[18] = {0,};
+static bt_adapter_state_e bt_state = BT_ADAPTER_DISABLED;
+
+const char *spp_secure_uuid = "fa87c0d0-afac-11de-8a39-0800200c9a66";
+static int server_fd = -1;
+static int socket_fd = -1;
+static bool is_receive_complete = false;
+
+static int packet_size = 65536;
+static char *buf = NULL;
+static int total_count = 32;
+static int sent_count = 0;
+static int receive_count = 0;
+static int receive_index = 0;
+
+static struct timeval start_time = {0,};
+static struct timeval end_time = {0,};
+static struct timeval diff_time = {0,};
+
+static int sum_time_ms = 0;
+static int avg_time_ms = 0;
+static int total_test_count = 0;
+
+void __bt_create_log_dump(void)
+{
+ char *argv[] = {NULL};
+
+ execv("/usr/bin/all_log_dump.sh", argv);
+
+ if (g_mainloop)
+ g_main_loop_quit(g_mainloop);
+ else
+ exit(0);
+}
+
+static void __bt_socket_data_received_cb(bt_socket_received_data_s *data, void *user_data)
+{
+ if (data == NULL) {
+ BT_ERR("data is NULL");
+ return;
+ }
+ BT_INFO("FD = %d, Buffer len = %d", data->socket_fd, data->data_size);
+
+ if (__bt_verify_data(data->data, data->data_size) == false)
+ __bt_create_log_dump();
+
+ if (is_receive_complete == true)
+ g_idle_add(__bt_send_data, NULL);
+}
+
+static void __bt_device_bond_created_cb(int result, bt_device_info_s *device_info, void *user_data)
+{
+ if (result != BT_ERROR_NONE) {
+ BT_ERR("result[0x%X]", result);
+ return;
+ }
+
+ if (strcmp(device_info->remote_address, remote_addr) == 0) {
+ if (__bt_connect_spp() == false)
+ BT_ERR("__bt_connect_spp() failed.");
+ }
+}
+
+static bool __bt_adapter_bonded_device_cb(bt_device_info_s *device_info, void *user_data)
+{
+ bool *is_paired = (bool*)user_data;
+
+ if (strcmp(device_info->remote_address, remote_addr) == 0) {
+ BT_INFO("remote_addr is exist.");
+ *is_paired = true;
+ return false;
+ }
+
+ return true;
+}
+
+void __bt_adapter_state_changed_cb(int result, bt_adapter_state_e adapter_state, void *user_data)
+{
+ BT_INFO("result [0x%04x] state = %d", result, adapter_state);
+
+ if (result == BT_ERROR_NONE) {
+ bt_state = adapter_state;
+ if (adapter_state == BT_ADAPTER_ENABLED) {
+ if (__bt_is_paired() == true)
+ __bt_connect_spp();
+ else
+ __bt_bond_remote_device();
+ }
+ }
+}
+
+void __bt_socket_connection_state_changed_cb(int result, bt_socket_connection_state_e connection_state, bt_socket_connection_s *connection, void *user_data)
+{
+ if (connection_state == BT_SOCKET_CONNECTED) {
+ BT_INFO("RFCOMM connected, result [0x%04x] Fd = %d, device add = %s, Role = %s",
+ result, connection->socket_fd, connection->remote_address,
+ (connection->local_role == BT_SOCKET_SERVER) ? "SERVER" : "CLIENT");
+
+ if (connection->socket_fd > 0) {
+ socket_fd = connection->socket_fd;
+ if (spp_role == BT_SPP_TEST_ROLE_CLIENT)
+ g_idle_add(__bt_send_data, NULL);
+ } else {
+ BT_ERR("socket_fd is INVALID");
+ }
+ } else {
+ BT_INFO("RFCOMM disconnected, result [0x%04x] Fd = %d, device add = %s",
+ result, connection->socket_fd, connection->remote_address);
+ __bt_create_log_dump();
+ }
+}
+
+void __bt_spp_calc_speed(void)
+{
+ int total_time_ms;
+ FILE *fp = NULL;
+ static char str_speed[30] = "\0";
+ int speed;
+
+ diff_time.tv_sec = end_time.tv_sec - start_time.tv_sec;
+ diff_time.tv_usec = end_time.tv_usec - start_time.tv_usec;
+
+ if(diff_time.tv_usec < 0)
+ {
+ diff_time.tv_sec = diff_time.tv_sec - 1;
+ diff_time.tv_usec = diff_time.tv_usec + 1000000;
+ }
+
+ fp = fopen(BT_INFINITE_SPP_TEST_RESULT_FILE_PATH, "a+");
+ /* Fix : NULL_RETURNS */
+ if (fp == NULL) {
+ BT_ERR("Cannot open file: %s\n", BT_INFINITE_SPP_TEST_RESULT_FILE_PATH);
+ return;
+ }
+ total_time_ms = (diff_time.tv_sec * 1000);
+ total_time_ms += diff_time.tv_usec / 1000;
+
+ speed = (packet_size * total_count * 8) / total_time_ms;
+
+ BT_INFO("%s @ %d kbps", "2MB", speed);
+ sprintf(str_speed, "%s @ %d kbps", "2MB", speed);
+ fprintf(fp, "%s\n", str_speed);
+
+ total_test_count++;
+ sum_time_ms += total_time_ms;
+ if (total_test_count % 10 == 0) {
+ avg_time_ms = sum_time_ms / total_test_count;
+ speed = (packet_size * total_count * 8) / avg_time_ms;
+ BT_INFO("[AVG(%d times)] %d kbps", total_test_count, speed);
+ sprintf(str_speed, "[AVG(%d times)] %d kbps", total_test_count, speed);
+ fprintf(fp, "%s\n", str_speed);
+ }
+
+ if (total_test_count == 1000) {
+ sum_time_ms = 0;
+ avg_time_ms = 0;
+ total_test_count = 0;
+ }
+
+ fclose(fp);
+}
+
+void __bt_make_data(void)
+{
+ int i;
+ int j;
+ char w = 0x20;
+
+ memset(buf, 0x00, packet_size);
+ for (i = 0; i < packet_size / 256; i++) {
+ for (j = 0; j < 256; j++) {
+ buf[i * 256 + j] = w;
+ }
+
+ w++;
+ if (w > 0x7e)
+ w = 0x20;
+ }
+}
+
+bool __bt_verify_data(char *data, int data_size)
+{
+ int i;
+
+ if (receive_count == 0 && receive_index == 0)
+ gettimeofday(&start_time, NULL);
+
+ for (i = 0; i < data_size; i++) {
+ if (data[i] != buf[receive_index]) {
+ BT_ERR("data error. rcv_cnt=%d, data[%d]=%d, buf[%d]=%d", receive_count, i, data[i], receive_index, buf[receive_index]);
+ return false;
+ }
+
+ receive_index++;
+ if (receive_index == packet_size) {
+ receive_index = 0;
+ receive_count++;
+
+ if (receive_count == total_count)
+ is_receive_complete = true;
+ }
+ }
+
+ if (is_receive_complete == true) {
+ gettimeofday(&end_time, NULL);
+ __bt_spp_calc_speed();
+ receive_count = 0;
+ receive_index = 0;
+ }
+
+ return true;
+}
+
+static gboolean __bt_send_data(gpointer user_data)
+{
+ int ret = BT_ERROR_NONE;
+ int write = 0;
+ int state = 0;
+ struct timeval tv_write_timeout = {0, };
+ fd_set wfds;
+ int fail_count = 0;
+
+ tv_write_timeout.tv_sec = 1;
+
+ is_receive_complete = false;
+
+ if (sent_count == 0)
+ gettimeofday(&start_time, NULL);
+
+ while (write < packet_size) {
+ FD_ZERO(&wfds);
+ FD_SET(socket_fd, &wfds);
+ state = select(socket_fd + 1, NULL, &wfds, NULL, &tv_write_timeout);
+ if (state == -1) {
+ BT_ERR("select() error.[0x%X]", ret);
+ __bt_create_log_dump();
+ return FALSE;
+ } else {
+ if (FD_ISSET(socket_fd, &wfds)) {
+ ret = bt_socket_send_data(socket_fd, buf + write, packet_size - write);
+ if(ret <= 0) {
+ BT_ERR("bt_socket_send_data() failed.[0x%X]", ret);
+ __bt_create_log_dump();
+ return FALSE;
+ } else {
+ write += ret;
+ }
+ fail_count = 0;
+ } else {
+ BT_ERR("socket is NOT ready.(fail_count = %d)", fail_count);
+ if (fail_count++ == 10) {
+ BT_ERR("__bt_send_data failed.");
+ __bt_create_log_dump();
+ return FALSE;
+ }
+ }
+ }
+ }
+
+ sent_count++;
+ if (sent_count == total_count) {
+ BT_INFO("Last packet.");
+ gettimeofday(&end_time, NULL);
+ __bt_spp_calc_speed();
+ sent_count = 0;
+ } else {
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+bool __bt_connect_spp(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ if (spp_role == BT_SPP_TEST_ROLE_SERVER) {
+ if (server_fd < 0) {
+ ret = bt_socket_create_rfcomm(spp_secure_uuid, &server_fd);
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("bt_socket_create_rfcomm() failed.[0x%X]", ret);
+ return false;
+ }
+ }
+
+ ret = bt_socket_listen_and_accept_rfcomm(server_fd, 1);
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("bt_socket_listen_and_accept_rfcomm() failed.[0x%X]", ret);
+ return false;
+ }
+ } else {
+ ret = bt_socket_connect_rfcomm(remote_addr, spp_secure_uuid);
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("bt_socket_connect_rfcomm() failed.[0x%X]", ret);
+ bt_socket_destroy_rfcomm(server_fd);
+ return false;
+ }
+ }
+
+ return true;
+}
+
+bool __bt_bond_remote_device(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_device_set_bond_created_cb(__bt_device_bond_created_cb, NULL);
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("bt_device_set_bond_created_cb() failed.[0x%X]", ret);
+ return false;
+ }
+
+ if (spp_role == BT_SPP_TEST_ROLE_CLIENT) {
+ ret = bt_device_create_bond(remote_addr);
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("bt_device_create_bond() failed.[0x%X]", ret);
+ return false;
+ }
+ }
+
+ return true;
+}
+
+bool __bt_is_paired(void)
+{
+ int ret = BT_ERROR_NONE;
+ bool is_paired = false;
+
+ ret = bt_adapter_foreach_bonded_device(__bt_adapter_bonded_device_cb, &is_paired);
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("bt_adapter_foreach_bonded_device() failed.[0x%X]", ret);
+ return false;
+ }
+
+ return is_paired;
+}
+
+bool __bt_init(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ ret = bt_initialize();
+ if(ret != BT_ERROR_NONE) {
+ BT_ERR("bt_initialize() failed.[0x%X]", ret);
+ return false;
+ }
+
+ ret = bt_adapter_get_state(&bt_state);
+ if(ret != BT_ERROR_NONE) {
+ BT_ERR("bt_adapter_get_state() failed.[0x%X]", ret);
+ return false;
+ }
+
+ ret = bt_adapter_set_state_changed_cb(__bt_adapter_state_changed_cb, NULL);
+ if(ret != BT_ERROR_NONE) {
+ BT_ERR("bt_adapter_get_state() failed.[0x%X]", ret);
+ return false;
+ }
+
+ ret = bt_socket_set_connection_state_changed_cb(__bt_socket_connection_state_changed_cb, NULL);
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("bt_socket_set_connection_state_changed_cb() failed.[0x%X]", ret);
+ return false;
+ }
+
+ ret = bt_socket_set_data_received_cb(__bt_socket_data_received_cb, NULL);
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("bt_socket_set_data_received_cb() failed.[0x%X]", ret);
+ return false;
+ }
+
+ if (buf == NULL) {
+ buf = malloc(packet_size);
+ if (buf == NULL) {
+ BT_ERR("Out of memory");
+ return false;
+ }
+ __bt_make_data();
+ }
+
+ return true;
+}
+
+void __bt_deinit(void)
+{
+ int ret = BT_ERROR_NONE;
+
+ if (buf)
+ free(buf);
+
+ if (server_fd >= 0)
+ bt_socket_destroy_rfcomm(server_fd);
+
+ ret = bt_socket_unset_data_received_cb();
+ if (ret != BT_ERROR_NONE)
+ BT_ERR("bt_socket_unset_data_received_cb() failed.[0x%X]", ret);
+
+ ret = bt_socket_unset_connection_state_changed_cb();
+ if (ret != BT_ERROR_NONE)
+ BT_ERR("bt_socket_unset_connection_state_changed_cb() failed.[0x%X]", ret);
+
+ ret = bt_device_unset_bond_created_cb();
+ if (ret != BT_ERROR_NONE)
+ BT_ERR("bt_device_unset_bond_created_cb() failed.[0x%X]", ret);
+
+ ret = bt_deinitialize();
+ if(ret != BT_ERROR_NONE)
+ BT_ERR("bt_deinitialize() failed.[0x%X]", ret);
+}
+
+bool __bt_set_remote_address(void)
+{
+ FILE *fp = NULL;
+
+ if ((fp = fopen(BT_INFINITE_SPP_TEST_REMOTE_ADDRESS_FILE_PATH, "r")) == NULL) {
+ BT_ERR("remote_addr file is NOT exist.");
+ return false;
+ }
+
+ if (fgets(remote_addr, 18, fp) == NULL) {
+ BT_ERR("remote_addr is INVALID.");
+ fclose(fp);
+ return false;
+ }
+
+ fclose(fp);
+ return true;
+}
+
+int main(int argc, char *argv[])
+{
+ if (argc == 2 && strcmp(argv[1], "client") == 0)
+ spp_role = BT_SPP_TEST_ROLE_CLIENT;
+ BT_INFO("SPP test role is %s", spp_role==BT_SPP_TEST_ROLE_SERVER?"SERVER":"CLIENT");
+
+ if (__bt_set_remote_address() == false)
+ return -1;
+
+ if (__bt_init() == false)
+ goto fail;
+
+ if (bt_state == BT_ADAPTER_ENABLED) {
+ if (__bt_is_paired() == true) {
+ if (__bt_connect_spp() == false)
+ goto fail;
+ } else {
+ if (__bt_bond_remote_device() == false)
+ goto fail;
+ }
+ }
+
+ g_mainloop = g_main_loop_new(NULL, FALSE);
+ g_main_loop_run(g_mainloop);
+
+fail:
+ if (g_mainloop)
+ g_main_loop_unref(g_mainloop);
+
+ __bt_deinit();
+
+ return 0;
+}
diff --git a/test/bt_infinite_spp_test_client.service b/test/bt_infinite_spp_test_client.service
new file mode 100644
index 0000000..f425cb8
--- /dev/null
+++ b/test/bt_infinite_spp_test_client.service
@@ -0,0 +1,11 @@
+[Unit]
+Description=BT SPP test infinitely
+PartOf=bluetooth-hciattach@bt.service
+
+[Service]
+Type=oneshot
+ExecStart=/usr/bin/bt_infinite_spp_test client
+RemainAfterExit=yes
+
+[Install]
+RequiredBy=bluetooth-hciattach@bt.service
diff --git a/test/bt_infinite_spp_test_server.service b/test/bt_infinite_spp_test_server.service
new file mode 100644
index 0000000..917658b
--- /dev/null
+++ b/test/bt_infinite_spp_test_server.service
@@ -0,0 +1,11 @@
+[Unit]
+Description=BT SPP test infinitely
+PartOf=bluetooth-hciattach@bt.service
+
+[Service]
+Type=oneshot
+ExecStart=/usr/bin/bt_infinite_spp_test
+RemainAfterExit=yes
+
+[Install]
+RequiredBy=bluetooth-hciattach@bt.service
diff --git a/test/bt_onoff.c b/test/bt_onoff.c
new file mode 100644
index 0000000..f95106a
--- /dev/null
+++ b/test/bt_onoff.c
@@ -0,0 +1,131 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @file bt_onoff.c
+ * @brief This is the source file for bt activation/deactivation.
+ */
+
+#include <stdio.h>
+#include <glib.h>
+
+#include "bluetooth.h"
+
+#define PRT(format, args...) printf("%s:%d() "format, __FUNCTION__, __LINE__, ##args)
+#define TC_PRT(format, args...) PRT(format"\n", ##args)
+
+GMainLoop *main_loop = NULL;
+static guint onoff_timer = 0;
+
+static void __bt_adapter_state_changed_cb(int result, bt_adapter_state_e adapter_state, void *user_data)
+{
+ TC_PRT("state(%d), error(%d)", adapter_state, result);
+
+ if (onoff_timer)
+ g_source_remove(onoff_timer);
+ onoff_timer = 0;
+
+ if (result != BT_ERROR_NONE) {
+ char *argv[] = {NULL};
+ execv("all_log_dump.sh", argv);
+ }
+
+ if (main_loop)
+ g_main_loop_quit(main_loop);
+ else
+ exit(0);
+}
+
+static gboolean __bt_onoff_timeout_cb(gpointer data)
+{
+ TC_PRT("Timed out");
+
+ char *argv[] = {NULL};
+ execv("all_log_dump.sh", argv);
+
+ if (main_loop)
+ g_main_loop_quit(main_loop);
+ else
+ exit(0);
+
+ return FALSE;
+}
+
+int main(int argc, char* argv[])
+{
+ int ret;
+ bt_adapter_state_e state;
+
+ if(bt_initialize() != BT_ERROR_NONE)
+ {
+ TC_PRT("bt_initialize() failed.");
+ return -1;
+ }
+ if (bt_adapter_set_state_changed_cb(__bt_adapter_state_changed_cb, NULL) != BT_ERROR_NONE)
+ {
+ TC_PRT("bt_adapter_set_state_changed_cb() failed.");
+ goto DONE;
+ }
+
+ main_loop = g_main_loop_new(NULL, FALSE);
+
+ bt_adapter_get_state(&state);
+ ret = bt_adapter_get_state(&state);
+ TC_PRT("state(%d), error(%d)", state, ret);
+
+ onoff_timer = g_timeout_add(20000, (GSourceFunc)__bt_onoff_timeout_cb, NULL);
+
+ if (argc <= 1) {
+ if (state == BT_ADAPTER_DISABLED)
+ ret = bt_adapter_enable();
+ else
+ ret = bt_adapter_disable();
+ TC_PRT("bt_adapter_%s() error(%d)", state==BT_ADAPTER_DISABLED?"enable":"disable", ret);
+ } else {
+ if (argv[1][0] == '0') {
+ if (state == BT_ADAPTER_DISABLED) {
+ TC_PRT("Already disabled");
+ goto DONE;
+ } else {
+ ret = bt_adapter_disable();
+ TC_PRT("bt_adapter_disable() error(%d)", ret);
+ if (ret != BT_ERROR_NONE)
+ goto DONE;
+ }
+ } else {
+ if (state == BT_ADAPTER_ENABLED) {
+ TC_PRT("Already eabled");
+ goto DONE;
+ } else {
+ ret = bt_adapter_enable();
+ TC_PRT("bt_adapter_enable() error(%d)", ret);
+ if (ret != BT_ERROR_NONE)
+ goto DONE;
+ }
+ }
+ }
+
+ g_main_loop_run(main_loop);
+
+DONE:
+ if (onoff_timer)
+ g_source_remove(onoff_timer);
+ onoff_timer = 0;
+ bt_adapter_unset_state_changed_cb();
+ bt_deinitialize();
+
+ return 0;
+}
diff --git a/test/bt_unit_test.c b/test/bt_unit_test.c
index 2ce27f4..8415988 100644
--- a/test/bt_unit_test.c
+++ b/test/bt_unit_test.c
@@ -28,88 +28,767 @@
#include <stdio.h>
#include <string.h>
+#include <fcntl.h>
+#include <unistd.h>
#include <glib.h>
-#include <dbus/dbus-glib.h>
+#include <ctype.h>
+#include <time.h>
#include "bluetooth.h"
-
-#define BUFFER_LEN 10
-#define PRT(format, args...) printf("%s:%d() "format, __FUNCTION__, __LINE__, ##args)
-#define TC_PRT(format, args...) PRT(format"\n", ##args)
+#include "bluetooth_internal.h"
+#include "bluetooth_private.h"
+#include "bluetooth-telephony-api.h"
+#include "bt_unit_test.h"
const char *spp_uuid = "00001101-0000-1000-8000-00805F9B34FB";
const char *opp_uuid = "00001105-0000-1000-8000-00805f9b34fb";
+const char *custom_uuid = "fa87c0d0-afac-11de-8a39-0800200c9a66";
+
+static bt_unit_test_table_e current_tc_table;
+static char remote_addr[18] = "F6:FB:8F:D8:C8:7C";
+static bool input_automated_test_delay = false;
+
+static bool need_to_set_params = false;
+static int g_test_id = -1;
+static tc_params_t g_test_param = {0,};
static int server_fd;
static int client_fd;
+static int custom_server_fd;
+static int custom_client_fd;
-GMainLoop *main_loop = NULL;
+static int bt_onoff_cnt = 0;
+static int bt_onoff_cnt_success = 0;
+static int bt_onoff_cnt_fail = 0;
+static time_t bt_onoff_timer;
+
+static gboolean is_sub_index = FALSE;
+#ifdef BT_ENABLE_LEGACY_GATT_CLIENT
+int service_index;
+int char_service_index;
+static int selected_service_index = -1;
+static int selected_char_index = 0;
+#endif
+static bt_advertiser_h advertiser = NULL;
+static bt_advertiser_h advertiser_list[3] = {NULL, };
+static int advertiser_index = 0;
+
+bt_gatt_client_h client = NULL;
+
+bt_gatt_server_h server = NULL;
typedef struct {
- const char *tc_name;
- int tc_code;
-} tc_table_t;
+ bt_gatt_h svc;
+ bt_gatt_h chr;
+ bt_gatt_h desc;
+} gatt_handle_t;
+gatt_handle_t battery_h;
+gatt_handle_t heart_rate_h;
+gatt_handle_t thermometer_h;
+gatt_handle_t custom_h;
+
+#ifdef BT_ENABLE_LEGACY_GATT_CLIENT
+bt_gatt_attribute_h service_clone[MAX_SERVICES];
+bt_gatt_attribute_h characteristics[MAX_SERVICES];
+bt_gatt_attribute_h characteristics_services[MAX_SERVICES];
+#endif
+
+static unsigned char *hash = NULL;
+static unsigned char *randomizer = NULL;
+int hash_len;
+int rand_len;
+
+bt_call_list_h call_list;
+GMainLoop *main_loop = NULL;
+
+tc_table_t tc_main[] = {
+ /* Categories */
+ {"SET ADDRESS" , BT_UNIT_TEST_FUNCTION_SET_ADDRESS},
+ {"bt_initialize" , BT_UNIT_TEST_FUNCTION_INITIALIZE},
+ {"bt_deinitialize" , BT_UNIT_TEST_FUNCTION_DEINITIALIZE},
+ {"Adapter" , BT_UNIT_TEST_TABLE_ADAPTER},
+ {"Adapter LE" , BT_UNIT_TEST_TABLE_ADAPTER_LE},
+ {"Device" , BT_UNIT_TEST_TABLE_DEVICE},
+ {"Socket" , BT_UNIT_TEST_TABLE_SOCKET},
+ {"Opp" , BT_UNIT_TEST_TABLE_OPP},
+ {"Audio(ag, a2dp, call)" , BT_UNIT_TEST_TABLE_AUDIO},
+ {"Pan(nap, panu)" , BT_UNIT_TEST_TABLE_PAN},
+ {"Gatt" , BT_UNIT_TEST_TABLE_GATT},
+ {"Avrcp" , BT_UNIT_TEST_TABLE_AVRCP},
+ {"Hid" , BT_UNIT_TEST_TABLE_HID},
+#ifdef TIZEN_WEARABLE
+ {"HF Role" , BT_UNIT_TEST_TABLE_HF},
+ {"PBAP Client" , BT_UNIT_TEST_TABLE_PBAP_CLIENT},
+#endif
+ {"Automated test" , BT_UNIT_TEST_TABLE_AUTOMATED_TEST},
+ {"Initialize All" , BT_UNIT_TEST_FUNCTION_INITIALIZE_ALL},
+ {"FINISH" , BT_UNIT_TEST_TABLE_FINISH},
+ {NULL , 0x0000},
+};
+
+tc_table_t tc_adapter[] = {
+ /* Adapter functions */
+ {"BACK" , BT_UNIT_TEST_FUNCTION_BACK},
+ {"bt_adapter_get_state" , BT_UNIT_TEST_FUNCTION_ADAPTER_GET_STATE},
+ {"bt_adapter_enable" , BT_UNIT_TEST_FUNCTION_ADAPTER_ENABLE},
+ {"bt_adapter_disable" , BT_UNIT_TEST_FUNCTION_ADAPTER_DISABLE},
+ {"bt_adapter_recover" , BT_UNIT_TEST_FUNCTION_ADAPTER_RECOVER},
+ {"bt_adapter_start_device_discovery" , BT_UNIT_TEST_FUNCTION_ADAPTER_START_DEVICE_DISCOVERY},
+ {"bt_adapter_stop_device_discovery" , BT_UNIT_TEST_FUNCTION_ADAPTER_STOP_DEVICE_DISCOVERY},
+ {"bt_adapter_is_discovering" , BT_UNIT_TEST_FUNCTION_ADAPTER_IS_DISCOVERING},
+ {"bt_adapter_foreach_bonded_device" , BT_UNIT_TEST_FUNCTION_ADAPTER_FOREACH_BONDED_DEVICE},
+ {"bt_adapter_get_bonded_device_info" , BT_UNIT_TEST_FUNCTION_ADAPTER_GET_BONDED_DEVICE_INFO},
+ {"bt_adapter_is_service_used" , BT_UNIT_TEST_FUNCTION_ADAPTER_IS_SERVICE_USED},
+ {"bt_adapter_get_visibility" , BT_UNIT_TEST_FUNCTION_ADAPTER_GET_VISIBILITY},
+ {"bt_adapter_set_device_discovery_state_changed_cb" , BT_UNIT_TEST_FUNCTION_ADAPTER_SET_DEVICE_DISCOVERY_STATE_CHANGED_CB},
+ {"bt_adapter_unset_device_discovery_state_changed_cb" , BT_UNIT_TEST_FUNCTION_ADAPTER_UNSET_DEVICE_DISCOVERY_STATE_CHANGED_CB},
+ {"bt_adapter_get_local_oob_data" , BT_UNIT_TEST_FUNCTION_ADAPTER_GET_LOCAL_OOB_DATA},
+ {"bt_adapter_set_remote_oob_data" , BT_UNIT_TEST_FUNCTION_ADAPTER_SET_LOCAL_OOB_DATA},
+ {"bt_adapter_remove_remote_oob_data" , BT_UNIT_TEST_FUNCTION_ADAPTER_REMOVE_REMOTE_OOB_DATA},
+ {"bt_adapter_set_visibility_mode_changed_cb" , BT_UNIT_TEST_FUNCTION_ADAPTER_SET_VISIBILITY_MODE_CHANGED_CB},
+ {"bt_adapter_unset_visibility_mode_changed_cb" , BT_UNIT_TEST_FUNCTION_ADAPTER_UNSET_VISIBILITY_MODE_CHANGED_CB},
+ {"bt_adapter_set_visibility_duration_changed_cb" , BT_UNIT_TEST_FUNCTION_ADAPTER_SET_VISIBILITY_DURATION_CHANGED_CB},
+ {"bt_adapter_unset_visibility_duration_changed_cb" , BT_UNIT_TEST_FUNCTION_ADAPTER_UNSET_VISIBILITY_DURATION_CHANGED_CB},
+ {"bt_adapter_set_connectable_changed_cb" , BT_UNIT_TEST_FUNCTION_ADAPTER_SET_CONNECTABLE_CHANGED_CB},
+ {"bt_adapter_unset_connectable_changed_cb" , BT_UNIT_TEST_FUNCTION_ADAPTER_UNSET_CONNECTABLE_CHANGED_CB},
+ {"bt_adapter_get_connectable" , BT_UNIT_TEST_FUNCTION_ADAPTER_GET_CONNECTABLE},
+ {"bt_adapter_set_connectable" , BT_UNIT_TEST_FUNCTION_ADAPTER_SET_CONNECTABLE},
+ {"bt_adapter_get_version" , BT_UNIT_TEST_FUNCTION_ADAPTER_GET_VERSION},
+ {"bt_adapter_get_local_info" , BT_UNIT_TEST_FUNCTION_ADAPTER_GET_LOCAL_INFO},
+ {"bt_adapter_set_manufacturer_data_changed_cb" , BT_UNIT_TEST_FUNCTION_ADAPTER_SET_MANUFACTURER_DATA_CHANGED_CB},
+ {"bt_adapter_unset_manufacturer_data_changed_cb" , BT_UNIT_TEST_FUNCTION_ADAPTER_UNSET_MANUFACTURER_DATA_CHANGED_CB},
+ {"bt_adapter_set_manufacturer_data" , BT_UNIT_TEST_FUNCTION_ADAPTER_SET_MANUFACTURER_DATA},
+ {"Select this menu to set parameters and then select the function again." , BT_UNIT_TEST_FUNCTION_ACTIVATE_FLAG_TO_SET_PARAMETERS},
+ {NULL , 0x0000},
+};
-tc_table_t tc_table[] = {
+tc_table_t tc_adapter_le[] = {
/* Adapter functions */
- {"bt_initialize" , 1},
- {"bt_deinitialize" , 2},
- {"bt_adapter_get_state" , 3},
- {"bt_adapter_enable" , 4},
- {"bt_adapter_disable" , 5},
- {"bt_adapter_start_device_discovery" , 6},
- {"bt_adapter_stop_device_discovery" , 7},
- {"bt_adapter_is_discovering" , 8},
- {"bt_adapter_get_bonded_device_info" , 9},
- {"bt_adapter_is_service_used" , 10},
- {"bt_adapter_set_device_discovery_state_changed_cb" , 11},
- {"bt_adapter_unset_device_discovery_state_changed_cb" , 12},
+ {"BACK" , BT_UNIT_TEST_FUNCTION_BACK},
+ {"bt_adapter_le_get_state" , BT_UNIT_TEST_FUNCTION_ADAPTER_LE_GET_STATE},
+ {"bt_adapter_le_enable" , BT_UNIT_TEST_FUNCTION_ADAPTER_LE_ENABLE},
+ {"bt_adapter_le_disable" , BT_UNIT_TEST_FUNCTION_ADAPTER_LE_DISABLE},
+ {"bt_adapter_le_set_scan_mode" , BT_UNIT_TEST_FUNCTION_ADAPTER_LE_SET_SCAN_MODE},
+ {"bt_adapter_le_start_scan" , BT_UNIT_TEST_FUNCTION_ADAPTER_LE_START_SCAN},
+ {"bt_adapter_le_stop_scan" , BT_UNIT_TEST_FUNCTION_ADAPTER_LE_STOP_SCAN},
+#ifndef TIZEN_WEARABLE
+ {"bt_adapter_le_start_device_discovery" , BT_UNIT_TEST_FUNCTION_ADAPTER_LE_START_DEVICE_DISCOVERY},
+ {"bt_adapter_le_stop_device_discovery" , BT_UNIT_TEST_FUNCTION_ADAPTER_LE_STOP_DEVICE_DISCOVERY},
+#endif
+ {"bt_adapter_le_add_advertising_data" , BT_UNIT_TEST_FUNCTION_ADAPTER_LE_ADD_ADVERTISING_DATA},
+ {"bt_adapter_le_set_advertising_mode" , BT_UNIT_TEST_FUNCTION_ADAPTER_LE_SET_ADVERTISING_MODE},
+ {"bt_adapter_le_set_advertising_filter_policy" , BT_UNIT_TEST_FUNCTION_ADAPTER_LE_SET_ADVERTISING_FILTER_POLICY},
+ {"bt_adapter_le_set_advertising_connectable" , BT_UNIT_TEST_FUNCTION_ADAPTER_LE_SET_ADVERTISING_CONNECTABLE},
+ {"bt_adapter_le_start_advertising_new" , BT_UNIT_TEST_FUNCTION_ADAPTER_LE_START_ADVERTISING_NEW},
+#ifndef TIZEN_WEARABLE
+ {"bt_adapter_le_start_advertising" , BT_UNIT_TEST_FUNCTION_ADAPTER_LE_START_ADVERTISING},
+#endif
+ {"bt_adapter_le_stop_advertising" , BT_UNIT_TEST_FUNCTION_ADAPTER_LE_STOP_ADVERTISING},
+ {"bt_adapter_le_add_white_list" , BT_UNIT_TEST_FUNCTION_ADAPTER_LE_ADD_WHITE_LIST},
+ {"bt_adapter_le_remove_white_list" , BT_UNIT_TEST_FUNCTION_ADAPTER_LE_REMOVE_WHITE_LIST},
+#ifndef TIZEN_WEARABLE
+ {"bt_adapter_le_clear_white_list" , BT_UNIT_TEST_FUNCTION_ADAPTER_LE_CLEAR_WHITE_LIST},
+#endif
+ {"bt_adapter_le_enable_privacy" , BT_UNIT_TEST_FUNCTION_ADAPTER_LE_ENABLE_PRIVACY},
+ {"Register scan filter (Device Address)" , BT_UNIT_TEST_FUNCTION_ADAPTER_LE_REGISTER_SCAN_FILTER_DEVICE_ADDRESS},
+ {"Register scan filter (Service UUID)" , BT_UNIT_TEST_FUNCTION_ADAPTER_LE_REGISTER_SCAN_FILTER_SERVICE_UUID},
+ {"Register scan filter (Service Solicitation UUID)" , BT_UNIT_TEST_FUNCTION_ADAPTER_LE_REGISTER_SCAN_FILTER_SERVICE_SOLICITATION_UUID},
+ {"Unregister all scan filters" , BT_UNIT_TEST_FUNCTION_ADAPTER_LE_UNREGISTER_ALL_SCAN_FILTERS},
+#ifndef TIZEN_WEARABLE
+ {"bt_adapter_le_set_device_discovery_state_changed_cb" , BT_UNIT_TEST_FUNCTION_ADAPTER_LE_SET_DEVICE_DISCOVERY_STATE_CHANGED_CB},
+ {"bt_adapter_le_unset_device_discovery_state_changed_cb" , BT_UNIT_TEST_FUNCTION_ADAPTER_LE_UNSET_DEVICE_DISCOVERY_STATE_CHANGED_CB},
+#endif
+ {"Select this menu to set parameters and then select the function again." , BT_UNIT_TEST_FUNCTION_ACTIVATE_FLAG_TO_SET_PARAMETERS},
+ {NULL , 0x0000},
+};
+tc_table_t tc_device[] = {
+ /* Device functions */
+ {"BACK" , BT_UNIT_TEST_FUNCTION_BACK},
+ {"bt_device_set_authorization (true)" , BT_UNIT_TEST_FUNCTION_DEVICE_SET_AUTHORIZATION_TRUE},
+ {"bt_device_set_authorization (false)" , BT_UNIT_TEST_FUNCTION_DEVICE_SET_AUTHORIZATION_FALSE},
+ {"bt_device_set_authorization_changed_cb" , BT_UNIT_TEST_FUNCTION_DEVICE_SET_AUTHORIZATION_CHANGED_CB},
+ {"bt_device_unset_authorization_changed_cb" , BT_UNIT_TEST_FUNCTION_DEVICE_UNSET_AUTHORIZATION_CHANGED_CB},
+ {"bt_device_set_connection_state_changed_cb" , BT_UNIT_TEST_FUNCTION_DEVICE_SET_CONNECTION_STAET_CHANGED_CB},
+ {"bt_device_unset_connection_state_changed_cb" , BT_UNIT_TEST_FUNCTION_DEVICE_UNSET_CONNECTION_STAET_CHANGED_CB},
+ {"bt_device_foreach_connected_profiles" , BT_UNIT_TEST_FUNCTION_DEVICE_FOREACH_CONNECTED_PROFILES},
+ {"bt_device_is_profile_connected" , BT_UNIT_TEST_FUNCTION_DEVICE_IS_PROFILE_CONNECTED},
+ {"bt_device_set_bond_created_cb" , BT_UNIT_TEST_FUNCTION_DEVICE_SET_BOND_CREATED_CB},
+ {"bt_device_set_bond_destroyed_cb" , BT_UNIT_TEST_FUNCTION_DEVICE_SET_BOND_DESTROYED_CB},
+ {"bt_device_create_bond" , BT_UNIT_TEST_FUNCTION_DEVICE_CREATE_BOND},
+ {"bt_device_create_bond_by_type" , BT_UNIT_TEST_FUNCTION_DEVICE_CREATE_BOND_BY_TYPE},
+ {"bt_device_destroy_bond" , BT_UNIT_TEST_FUNCTION_DEVICE_DESTROY_BOND},
+ {"Select this menu to set parameters and then select the function again." , BT_UNIT_TEST_FUNCTION_ACTIVATE_FLAG_TO_SET_PARAMETERS},
+ {NULL , 0x0000},
+};
+
+tc_table_t tc_socket[] = {
/* Socket functions */
- {"bt_socket_create_rfcomm" , 50},
- {"bt_socket_destroy_rfcomm" , 51},
- {"bt_socket_listen_and_accept_rfcomm" , 52},
- {"bt_socket_listen" , 53},
- {"bt_socket_accept" , 54},
- {"bt_socket_reject" , 55},
- {"bt_socket_connect_rfcomm" , 56},
- {"bt_socket_disconnect_rfcomm" , 57},
- {"bt_socket_send_data" , 58},
- {"bt_socket_set_data_received_cb" , 59},
- {"bt_socket_unset_data_received_cb" , 60},
- {"bt_socket_set_connection_requested_cb" , 61},
- {"bt_socket_unset_connection_requested_cb" , 62},
- {"bt_socket_set_connection_state_changed_cb" , 63},
- {"bt_socket_unset_connection_state_changed_cb" , 64},
+ {"BACK" , BT_UNIT_TEST_FUNCTION_BACK},
+ {"bt_socket_create_rfcomm" , BT_UNIT_TEST_FUNCTION_SOCKET_CREATE_RFCOMM},
+ {"bt_socket_destroy_rfcomm" , BT_UNIT_TEST_FUNCTION_SOCKET_DESTROY_RFCOMM},
+ {"bt_socket_listen_and_accept_rfcomm" , BT_UNIT_TEST_FUNCTION_SOCKET_LISTEN_AND_ACCEPT_RFCOMM},
+ {"bt_socket_listen" , BT_UNIT_TEST_FUNCTION_SOCKET_LISTEN},
+ {"bt_socket_accept" , BT_UNIT_TEST_FUNCTION_SOCKET_ACCEPT},
+ {"bt_socket_reject" , BT_UNIT_TEST_FUNCTION_SOCKET_REJECT},
+ {"bt_socket_connect_rfcomm" , BT_UNIT_TEST_FUNCTION_SOCKET_CONNECT_RFCOMM},
+ {"bt_socket_disconnect_rfcomm" , BT_UNIT_TEST_FUNCTION_SOCKET_DISCONNECT_RFCOMM},
+ {"bt_socket_send_data" , BT_UNIT_TEST_FUNCTION_SOCKET_SEND_DATA},
+ {"bt_socket_create_rfcomm with custom uuid" , BT_UNIT_TEST_FUNCTION_SOCKET_CREATE_RFCOMM_CUSTOM_UUID},
+ {"bt_socket_destroy_rfcomm with custom uuid" , BT_UNIT_TEST_FUNCTION_SOCKET_DESTROY_RFCOMM_CUSTOM_UUID},
+ {"bt_socket_listen_and_accept_rfcomm with custom uuid" , BT_UNIT_TEST_FUNCTION_SOCKET_LISTEN_AND_ACCEPT_RFCOMM_CUSTOM_UUID},
+ {"bt_socket_connect_rfcomm with custom uuid" , BT_UNIT_TEST_FUNCTION_SOCKET_CONNECT_RFCOMM_CUSTOM_UUID},
+ {"bt_socket_disconnect_rfcomm with custom uuid" , BT_UNIT_TEST_FUNCTION_SOCKET_DISCONNECT_RFCOMM_CUSTOM_UUID},
+ {"bt_socket_send_data with custom uuid" , BT_UNIT_TEST_FUNCTION_SOCKET_SEND_DATA_CUSTOM_UUID},
+ {"bt_socket_set_data_received_cb" , BT_UNIT_TEST_FUNCTION_SOCKET_SET_DATA_RECEIVED_CB},
+ {"bt_socket_unset_data_received_cb" , BT_UNIT_TEST_FUNCTION_SOCKET_UNSET_DATA_RECEIVED_CB},
+ {"bt_socket_set_connection_requested_cb" , BT_UNIT_TEST_FUNCTION_SOCKET_SET_CONNECTION_REQUESTED_CB},
+ {"bt_socket_unset_connection_requested_cb" , BT_UNIT_TEST_FUNCTION_SOCKET_UNSET_CONNECTION_REQUESTED_CB},
+ {"bt_socket_set_connection_state_changed_cb" , BT_UNIT_TEST_FUNCTION_SOCKET_SET_CONNECTION_STATE_CHANGED_CB},
+ {"bt_socket_unset_connection_state_changed_cb" , BT_UNIT_TEST_FUNCTION_SOCKET_UNSET_CONNECTION_STATE_CHANGED_CB},
+ {"Select this menu to set parameters and then select the function again." , BT_UNIT_TEST_FUNCTION_ACTIVATE_FLAG_TO_SET_PARAMETERS},
+ {NULL , 0x0000},
+};
+tc_table_t tc_opp[] = {
/* OPP functions */
- {"bt_opp_client_initialize" , 70},
- {"bt_opp_client_deinitialize" , 71},
- {"bt_opp_client_add_file" , 72},
- {"bt_opp_client_clear_files" , 73},
- {"bt_opp_client_push_files" , 74},
- {"bt_opp_client_cancel_push" , 75},
-
- /* -----------------------------------------*/
- {"Finish" , 0x00ff},
+ {"BACK" , BT_UNIT_TEST_FUNCTION_BACK},
+ {"bt_opp_client_initialize" , BT_UNIT_TEST_FUNCTION_OPP_CLIENT_INITIALIZE},
+ {"bt_opp_client_deinitialize" , BT_UNIT_TEST_FUNCTION_OPP_CLIENT_DEINITIALIZE},
+ {"bt_opp_client_add_file" , BT_UNIT_TEST_FUNCTION_OPP_CLIENT_ADD_FILE},
+ {"bt_opp_client_clear_files" , BT_UNIT_TEST_FUNCTION_OPP_CLIENT_CLEAR_FILES},
+ {"bt_opp_client_push_files" , BT_UNIT_TEST_FUNCTION_OPP_CLIENT_PUSH_FILES},
+ {"bt_opp_client_cancel_push" , BT_UNIT_TEST_FUNCTION_OPP_CLIENT_CANCEL_PUSH},
+ {"Select this menu to set parameters and then select the function again." , BT_UNIT_TEST_FUNCTION_ACTIVATE_FLAG_TO_SET_PARAMETERS},
+ {NULL , 0x0000},
+};
+
+tc_table_t tc_audio[] = {
+ /* AG functions */
+ {"BACK" , BT_UNIT_TEST_FUNCTION_BACK},
+ {"bt_audio_initialize" , BT_UNIT_TEST_FUNCTION_AUDIO_INITIALIZE},
+ {"bt_audio_deinitialize" , BT_UNIT_TEST_FUNCTION_AUDIO_DEINITIALIZE},
+ {"bt_audio_connect" , BT_UNIT_TEST_FUNCTION_AUDIO_CONNECT},
+ {"bt_audio_disconnect" , BT_UNIT_TEST_FUNCTION_AUDIO_DISCONNECT},
+ {"bt_audio_source_connect" , BT_UNIT_TEST_FUNCTION_AUDIO_SOURCE_CONNECT},
+ {"bt_audio_source_disconnect" , BT_UNIT_TEST_FUNCTION_AUDIO_SOURCE_DISCONNECT},
+ {"bt_audio_set_connection_state_changed_cb" , BT_UNIT_TEST_FUNCTION_AUDIO_SET_CONNECTION_STATE_CHANGED_CB},
+ {"bt_audio_unset_connection_state_changed_cb" , BT_UNIT_TEST_FUNCTION_AUDIO_UNSET_CONNECTION_STATE_CHANGED_CB},
+ {"bt_a2dp_source_audio_set_connection_state_cb", BT_UNIT_TEST_FUNCTION_A2DP_AUDIO_SET_CONNECTION_STATE_CB},
+ {"bt_a2dp_source_audio_unset_connection_state_cb", BT_UNIT_TEST_FUNCTION_A2DP_AUDIO_UNSET_CONNECTION_STATE_CB},
+ {"bt_ag_open_sco" , BT_UNIT_TEST_FUNCTION_AG_OPEN_SCO},
+ {"bt_ag_close_sco" , BT_UNIT_TEST_FUNCTION_AG_CLOSE_SCO},
+ {"bt_ag_is_sco_opened" , BT_UNIT_TEST_FUNCTION_AG_IS_SCO_OPENED},
+ {"bt_ag_set_sco_state_changed_cb" , BT_UNIT_TEST_FUNCTION_AG_SET_SCO_STATE_CHANGED_CB},
+ {"bt_ag_unset_sco_state_changed_cb" , BT_UNIT_TEST_FUNCTION_AG_UNSET_SCO_STATE_CHANGED_CB},
+ {"bt_ag_is_connected" , BT_UNIT_TEST_FUNCTION_AG_IS_CONNECTED},
+ {"BT_AG_CALL_EVENT_IDLE" , BT_UNIT_TEST_FUNCTION_AG_CALL_EVENT_IDLE},
+ {"BT_AG_CALL_EVENT_ANSWERED" , BT_UNIT_TEST_FUNCTION_AG_CALL_EVENT_ANSWERED},
+ {"BT_AG_CALL_EVENT_DIALING" , BT_UNIT_TEST_FUNCTION_AG_CALL_EVENT_DIALING},
+ {"BT_AG_CALL_EVENT_ALERTING" , BT_UNIT_TEST_FUNCTION_AG_CALL_EVENT_ALERTING},
+ {"BT_AG_CALL_EVENT_INCOMING" , BT_UNIT_TEST_FUNCTION_AG_CALL_EVENT_INCOMING},
+ {"bt_call_list_create" , BT_UNIT_TEST_FUNCTION_CALL_LIST_CREATE},
+ {"bt_call_list_destroy" , BT_UNIT_TEST_FUNCTION_CALL_LIST_DESTROY},
+ {"bt_call_list_reset" , BT_UNIT_TEST_FUNCTION_CALL_LIST_RESET},
+ {"bt_call_list_add" , BT_UNIT_TEST_FUNCTION_CALL_LIST_ADD},
+ {"bt_ag_notify_call_list" , BT_UNIT_TEST_FUNCTION_AG_NOTIFY_CALL_LIST},
+ {"bt_ag_set_call_handling_event_cb" , BT_UNIT_TEST_FUNCTION_AG_SET_CALL_HANDLING_EVENT_CB},
+ {"bt_ag_is_nrec_enabled" , BT_UNIT_TEST_FUNCTION_AG_IS_NREC_ENABLED},
+
+ /* A2DP SCMS-T functions */
+ {"Select this menu to set parameters and then select the function again." , BT_UNIT_TEST_FUNCTION_ACTIVATE_FLAG_TO_SET_PARAMETERS},
+ {NULL , 0x0000},
+};
+
+tc_table_t tc_pan[] = {
+ /* Network functions */
+ {"BACK" , BT_UNIT_TEST_FUNCTION_BACK},
+ {"bt_nap_activate" , BT_UNIT_TEST_FUNCTION_NAP_ACTIVATE},
+ {"bt_nap_deactivate" , BT_UNIT_TEST_FUNCTION_NAP_DEACTIVATE},
+ {"bt_nap_disconnect_all" , BT_UNIT_TEST_FUNCTION_NAP_DISCONNECT_ALL},
+ {"bt_nap_disconnect" , BT_UNIT_TEST_FUNCTION_NAP_DISCONNECT},
+ {"bt_panu_set_connection_state_changed_cb" , BT_UNIT_TEST_FUNCTION_PANU_SET_CONNECTION_STATE_CHANGED_CB},
+ {"bt_panu_connect" , BT_UNIT_TEST_FUNCTION_PANU_CONNECT},
+ {"Select this menu to set parameters and then select the function again." , BT_UNIT_TEST_FUNCTION_ACTIVATE_FLAG_TO_SET_PARAMETERS},
+ {NULL , 0x0000},
+};
+
+tc_table_t tc_gatt[] = {
+ /* Gatt functions */
+ {"BACK" , BT_UNIT_TEST_FUNCTION_BACK},
+ {"bt_gatt_connect" , BT_UNIT_TEST_FUNCTION_GATT_CONNECT},
+ {"bt_gatt_disconnect" , BT_UNIT_TEST_FUNCTION_GATT_DISCONNECT},
+ {"bt_gatt_set_connection_state_changed_cb" , BT_UNIT_TEST_FUNCTION_SET_GATT_CONNECTION_STATE_CHANGED_CB},
+ {"bt_gatt_unset_connection_state_changed_cb" , BT_UNIT_TEST_FUNCTION_UNSET_GATT_CONNECTION_STATE_CHANGED_CB},
+ {"bt_gatt_client_create" , BT_UNIT_TEST_FUNCTION_GATT_CLIENT_CREATE},
+ {"bt_gatt_client_destroy" , BT_UNIT_TEST_FUNCTION_GATT_CLIENT_DESTROY},
+ {"bt_gatt_client_get_remote_address" , BT_UNIT_TEST_FUNCTION_GATT_CLIENT_GET_REMOTE_ADDRESS},
+ {"bt_gatt_client_print_all" , BT_UNIT_TEST_FUNCTION_GATT_CLIENT_PRINT_ALL},
+ {"bt_gatt_client_read_value" , BT_UNIT_TEST_FUNCTION_GATT_CLIENT_READ_VALUE},
+ {"bt_gatt_client_write_value" , BT_UNIT_TEST_FUNCTION_GATT_CLIENT_WRITE_VALUE},
+ {"bt_gatt_client_set_char_value_changed_cb" , BT_UNIT_TEST_FUNCTION_GATT_CLIENT_SET_CHAR_VALUE_CHANGED_CB},
+ {"bt_gatt_client_unset_char_value_changed_cb" , BT_UNIT_TEST_FUNCTION_GATT_CLIENT_UNSET_CHAR_VALUE_CHANGED_CB},
+ {"bt_gatt_client_foreach_services" , BT_UNIT_TEST_FUNCTION_GATT_CLIENT_FOREACH_SERVICES},
+ {"bt_gatt_server_initialize" , BT_UNIT_TEST_FUNCTION_GATT_SERVER_INITIALIZE},
+ {"bt_gatt_server_deinitilaize" , BT_UNIT_TEST_FUNCTION_GATT_SERVER_DEINITIALIZE},
+ {"bt_gatt_server_unregister_all_services" , BT_UNIT_TEST_FUNCTION_GATT_SERVER_UNREGISTER_ALL_SERVICES},
+ {"Register Battery Service" , BT_UNIT_TEST_FUNCTION_GATT_SERVER_REGISTER_BATTERY_SVC},
+ {"Change Battery Level" , BT_UNIT_TEST_FUNCTION_GATT_SERVER_CHANGE_BATTERY_LEVEL},
+ {"Register Heart Rate Service" , BT_UNIT_TEST_FUNCTION_GATT_SERVER_REGISTER_HEART_RATE_SVC},
+ {"Notify Heart Rate Measurement" , BT_UNIT_TEST_FUNCTION_GATT_SERVER_NOTIFY_HEART_RATE_MEASUREMENT},
+ {"Register Thermometer Service" , BT_UNIT_TEST_FUNCTION_GATT_SERVER_REGISTER_THERMOMETER_SVC},
+ {"Change Thermometer Measurement" , BT_UNIT_TEST_FUNCTION_GATT_SERVER_CHANGE_THERMOMETER_MEASUREMENT},
+ {"Register Device Information Service" , BT_UNIT_TEST_FUNCTION_GATT_SERVER_REGISTER_DEVICE_INFORMATION_SVC},
+ {"Register Link Loss Service" , BT_UNIT_TEST_FUNCTION_GATT_SERVER_REGISTER_LINK_LOSS_SVC},
+ {"Register Custom Service" , BT_UNIT_TEST_FUNCTION_GATT_SERVER_REGISTER_CUSTOM_SVC},
+ {"Change Custom Value" , BT_UNIT_TEST_FUNCTION_GATT_SERVER_CHANGE_CUSTOM_VAL},
+ {"ANCS (Pair)" , BT_UNIT_TEST_FUNCTION_ANCS_PAIR},
+ {"ANCS (Watch notification)" , BT_UNIT_TEST_FUNCTION_ANCS_WATCH},
+ {"ANCS (Positive action)" , BT_UNIT_TEST_FUNCTION_ANCS_POSITIVE_ACTION},
+ {"ANCS (Negative action)" , BT_UNIT_TEST_FUNCTION_ANCS_NEGATIVE_ACTION},
+ {"ANCS (Get Noti. Attr.)" , BT_UNIT_TEST_FUNCTION_ANCS_GET_NOTI_ATTR},
+#ifdef BT_ENABLE_LEGACY_GATT_CLIENT
+ {"bt_gatt_foreach_primary_services" , BT_UNIT_TEST_FUNCTION_GATT_FOREACH_PRIMARY_SERVICES},
+ {"bt_gatt_discover_characteristics" , BT_UNIT_TEST_FUNCTION_GATT_DISCOVER_CHARACTERISTICS},
+ {"bt_gatt_discover_characteristic_descriptor" , BT_UNIT_TEST_FUNCTION_GATT_DISCOVER_CHARACTERISTIC_DESCRIPTORS},
+ {"bt_gatt_get_service_uuid" , BT_UNIT_TEST_FUNCTION_GATT_GET_SERVICE_UUID},
+ {"bt_gatt_foreach_included_services" , BT_UNIT_TEST_FUNCTION_GATT_FOREACH_INCLUDED_SERVICES},
+ {"bt_gatt_set_characteristic_changed_cb" , BT_UNIT_TEST_FUNCTION_GATT_SET_CHARACTERISTIC_CHANGED_CB},
+ {"bt_gatt_unset_characteristic_changed_cb" , BT_UNIT_TEST_FUNCTION_GATT_UNSET_CHARACTERISTIC_CHANGED_CB},
+ {"bt_gatt_get_characteristic_declaration" , BT_UNIT_TEST_FUNCTION_GATT_GET_CHARACTERISTIC_DECLARATION},
+ {"bt_gatt_set_characteristic_value" , BT_UNIT_TEST_FUNCTION_GATT_SET_CHARACTERISTIC_VALUE},
+ {"bt_gatt_set_characteristic_value_request" , BT_UNIT_TEST_FUNCTION_GATT_SET_CHARACTERISTIC_VALUE_REQUEST},
+ {"bt_gatt_read_characteristic_value" , BT_UNIT_TEST_FUNCTION_GATT_READ_CHARACTERISTIC_VALUE},
+ {"bt_gatt_watch_characteristic_changes" , BT_UNIT_TEST_FUNCTION_GATT_WATCH_CHARACTERISTIC_CHANGES},
+ {"bt_gatt_unwatch_characteristic_changes" , BT_UNIT_TEST_FUNCTION_GATT_UNWATCH_CHARACTERISTIC_CHANGES},
+#endif
+ {"Select this menu to set parameters and then select the function again." , BT_UNIT_TEST_FUNCTION_ACTIVATE_FLAG_TO_SET_PARAMETERS},
+ {NULL , 0x0000},
+};
+
+tc_table_t tc_avrcp[] = {
+ /* AVRCP functions */
+ {"BACK" , BT_UNIT_TEST_FUNCTION_BACK},
+ {"bt_avrcp_target_initialize" , BT_UNIT_TEST_FUNCTION_AVRCP_TARGET_INITIALIZE},
+ {"bt_avrcp_target_deinitialize" , BT_UNIT_TEST_FUNCTION_AVRCP_TARGET_DEINITIALIZE},
+ {"bt_avrcp_set_equalizer_state_changed_cb" , BT_UNIT_TEST_FUNCTION_AVRCP_SET_EQUALIZER_STATE_CHANGED_CB},
+ {"bt_avrcp_set_repeat_mode_changed_cb" , BT_UNIT_TEST_FUNCTION_AVRCP_SET_REPEAT_MODE_CHANGED_CB},
+ {"bt_avrcp_set_shuffle_mode_changed_cb" , BT_UNIT_TEST_FUNCTION_AVRCP_SET_SHUFFLE_MODE_CHANGED_CB},
+ {"bt_avrcp_set_scan_mode_changed_cb" , BT_UNIT_TEST_FUNCTION_AVRCP_SET_SCAN_MODE_CHANGED_CB},
+ {"bt_avrcp_unset_equalizer_state_changed_cb" , BT_UNIT_TEST_FUNCTION_AVRCP_UNSET_EQUALIZER_STATE_CHANGED_CB},
+ {"bt_avrcp_unset_repeat_mode_changed_cb" , BT_UNIT_TEST_FUNCTION_AVRCP_UNSET_REPEAT_MODE_CHANGED_CB},
+ {"bt_avrcp_unset_shuffle_mode_changed_cb" , BT_UNIT_TEST_FUNCTION_AVRCP_UNSET_SHUFFLE_MODE_CHANGED_CB},
+ {"bt_avrcp_unset_scan_mode_changed_cb" , BT_UNIT_TEST_FUNCTION_AVRCP_UNSET_SCAN_MODE_CHANGED_CB},
+ {"bt_avrcp_control_initialize" , BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_INITIALIZE},
+ {"bt_avrcp_control_deinitialize" , BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_DEINITIALIZE},
+ {"bt_avrcp_control_connect" , BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_CONNECT},
+ {"bt_avrcp_control_disconnect" , BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_DISCONNECT},
+ {"bt_avrcp_control_player_PLAY" , BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_PLAY},
+ {"bt_avrcp_control_player_STOP" , BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_STOP},
+ {"bt_avrcp_control_player_PAUSE" , BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_PAUSE},
+ {"bt_avrcp_control_player_FF" , BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_FF},
+ {"bt_avrcp_control_player_RW" , BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_RW},
+ {"bt_avrcp_control_player_NEXT" , BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_NEXT},
+ {"bt_avrcp_control_player_PREV" , BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_PREV},
+ {"bt_avrcp_control_player_GET_REPEAT" , BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_GET_REPEAT},
+ {"bt_avrcp_control_player_SET_REPEAT" , BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_SET_REPEAT},
+ {"bt_avrcp_control_player_GET_SHUFFLE" , BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_GET_SHUFFLE},
+ {"bt_avrcp_control_player_SET_SHUFFLE" , BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_SET_SHUFFLE},
+ {"bt_avrcp_control_player_GET_POSITION" , BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_GET_POSITION},
+ {"bt_avrcp_control_player_GET_PLAY STATUS" , BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_GET_PLAY_STATUS},
+ {"bt_avrcp_control_player_GET_TRACK_INFO" ,BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_GET_TRACK_INFO},
+ {"bt_avrcp_set_song_position_changed_cb" , BT_UNIT_TEST_FUNCTION_AVRCP_SET_SONG_POSITION_CHANGED_CB},
+ {"bt_avrcp_set_play_status_changed_cb" , BT_UNIT_TEST_FUNCTION_AVRCP_SET_PLAY_STATE_CHANGED_CB},
+ {"bt_avrcp_set_track_info_changed_cb" , BT_UNIT_TEST_FUNCTION_AVRCP_SET_TRACK_INFO_CHANGED_CB},
+ {"bt_avrcp_unset_song_position_changed_cb" , BT_UNIT_TEST_FUNCTION_AVRCP_UNSET_SONG_POSITION_CHANGED_CB},
+ {"bt_avrcp_unset_play_status_changed_cb" , BT_UNIT_TEST_FUNCTION_AVRCP_UNSET_PLAY_STATE_CHANGED_CB},
+ {"bt_avrcp_unset_track_info_changed_cb" , BT_UNIT_TEST_FUNCTION_AVRCP_UNSET_TRACK_INFO_CHANGED_CB},
+ {"Select this menu to set parameters and then select the function again." , BT_UNIT_TEST_FUNCTION_ACTIVATE_FLAG_TO_SET_PARAMETERS},
+ {NULL , 0x0000},
+};
+
+tc_table_t tc_hid[] = {
+ /* HID functions */
+ {"BACK" , BT_UNIT_TEST_FUNCTION_BACK},
+ {"bt_hid_host_initialize" , BT_UNIT_TEST_FUNCTION_HID_HOST_INITIALIZE},
+ {"bt_hid_host_deinitialize" , BT_UNIT_TEST_FUNCTION_HID_HOST_DEINITIALIZE},
+ {"bt_hid_host_connect" , BT_UNIT_TEST_FUNCTION_HID_HOST_CONNECT},
+ {"bt_hid_host_disconnect" , BT_UNIT_TEST_FUNCTION_HID_HOST_DISCONNECT},
+ {"Select this menu to set parameters and then select the function again." , BT_UNIT_TEST_FUNCTION_ACTIVATE_FLAG_TO_SET_PARAMETERS},
+ {NULL , 0x0000},
+};
+
+#ifdef TIZEN_WEARABLE
+tc_table_t tc_hf[] = {
+ /* Handsfree role functions */
+ {"BACK" , BT_UNIT_TEST_FUNCTION_BACK},
+ {"bt_hf_initialize" , BT_UNIT_TEST_FUNCTION_HF_INITIALIZE},
+ {"bt_hf_deinitialize" , BT_UNIT_TEST_FUNCTION_HF_DEINITIALIZE},
+ {"(CALL Handling) bt_hf_notify_call_event(answer)" , BT_UNIT_TEST_FUNCTION_HF_NOTIFY_CALL_ANSWER},
+ {"(CALL Handling) bt_hf_notify_call_event(initiate)" , BT_UNIT_TEST_FUNCTION_HF_NOTIFY_CALL_INIT},
+ {"(CALL Handling) bt_hf_notify_call_event(terminate)" , BT_UNIT_TEST_FUNCTION_HF_NOTIFY_CALL_TERM},
+ {"(CALL Status) bt_hf_get_call_status_info_list" , BT_UNIT_TEST_FUNCTION_HF_GET_CALL_STATUS_INFO_LIST},
+ {"(CALL Status) bt_hf_set_call_handling_event_cb()" , BT_UNIT_TEST_FUNCTION_HF_SET_CALL_EVENT_CB},
+ {"(CALL Status) bt_hf_unset_call_handling_event_cb" , BT_UNIT_TEST_FUNCTION_HF_UNSET_CALL_EVENT_CB},
+ {"(CALL Status) bt_hf_set_call_status_updated_event_cb" , BT_UNIT_TEST_FUNCTION_HF_SET_CALL_STATUS_UPDATED_EVENT_CB},
+ {"(CALL Status) bt_hf_unset_call_status_updated_event_cb" , BT_UNIT_TEST_FUNCTION_HF_UNSET_CALL_STATUS_UPDATED_EVENT_CB},
+ {"(Volume) bt_hf_notify_speaker_gain" , BT_UNIT_TEST_FUNCTION_HF_NOTIFY_SPEAKER_GAIN},
+ {"(Volume) bt_hf_set_speaker_gain_changed_cb" , BT_UNIT_TEST_FUNCTION_HF_SET_SPEAKER_GAIN_CB},
+ {"(Volume) bt_hf_unset_speaker_gain_changed_cb" , BT_UNIT_TEST_FUNCTION_HF_UNSET_SPEAKER_GAIN_CB},
+ {"(Voice-recog) bt_hf_notify_voice_recognition_state(true)" , BT_UNIT_TEST_FUNCTION_HF_NOTIFY_VOICE_REC_TRUE},
+ {"(Voice-recog) bt_hf_notify_voice_recognition_state(false)" , BT_UNIT_TEST_FUNCTION_HF_NOTIFY_VOICE_REC_FALSE},
+ {"(SCO) bt_hf_is_sco_opened" , BT_UNIT_TEST_FUNCTION_HF_IS_SCO_OPENED},
+ {"(SCO) bt_hf_get_codec_id" , BT_UNIT_TEST_FUNCTION_HF_GET_CODEC_ID},
+ {"(SCO) bt_hf_set_sco_state_changed_cb()" , BT_UNIT_TEST_FUNCTION_HF_SET_SCO_CHANGED_CB},
+ {"(SCO) bt_hf_unset_sco_state_changed_cb()" , BT_UNIT_TEST_FUNCTION_HF_UNSET_SCO_CHANGED_CB},
+ {"Select this menu to set parameters and then select the function again." , BT_UNIT_TEST_FUNCTION_ACTIVATE_FLAG_TO_SET_PARAMETERS},
+ {NULL , 0x0000},
+};
+
+tc_table_t tc_pbap_client[] = {
+ /* PBAP Functions*/
+ {"BACK" , BT_UNIT_TEST_FUNCTION_BACK},
+ {"bt_pbap_init()", BT_UNIT_TEST_FUNCTION_PBAP_CLIENT_INITIALIZE},
+ {"bt_pbap_deinit()", BT_UNIT_TEST_FUNCTION_PBAP_CLIENT_DEINITIALIZE},
+ {"bt_pbap_connect()", BT_UNIT_TEST_FUNCTION_PBAP_CLIENT_CONNECT},
+ {"bt_pbap_disconnect()", BT_UNIT_TEST_FUNCTION_PBAP_CLIENT_DISCONNECT},
+ {"bt_pbap_get_phonebook_size()", BT_UNIT_TEST_FUNCTION_PBAP_CLIENT_GETSIZE},
+ {"bt_pbap_get_phonebook()", BT_UNIT_TEST_FUNCTION_PBAP_CLIENT_PHONEBOOKPULL},
+ {"bt_pbap_get_list()", BT_UNIT_TEST_FUNCTION_PBAP_CLIENT_VCARDLIST},
+ {"bt_pbap_pull_vcard()", BT_UNIT_TEST_FUNCTION_PBAP_CLIENT_VCARDPULL},
+ {"bt_pbap_phonebook_search()", BT_UNIT_TEST_FUNCTION_PBAP_CLIENT_PHONEBOOKSEARCH},
+ {"bt_pbap_get_list() Maxlist=0", BT_UNIT_TEST_FUNCTION_PBAP_CLIENT_VCARDLIST_MAXLIST_ZERO},
+
+ {"Select this menu to set parameters and then select the function again." , BT_UNIT_TEST_FUNCTION_ACTIVATE_FLAG_TO_SET_PARAMETERS},
+ {NULL , 0x0000},
+};
+#endif
+
+tc_table_t tc_automated_test[] = {
+ /* Automated test Functions*/
+ {"BACK" , BT_UNIT_TEST_FUNCTION_BACK},
+ {"On/Off repeat test()" , BT_UNIT_TEST_FUNCTION_ON_OFF_REPEAT_TEST},
+ {"On/Off repeat(1sec delay) test()" , BT_UNIT_TEST_FUNCTION_ON_OFF_REPEAT_TEST_1_SEC_DELAY},
+ {"On/Off repeat(Nsec delay) test()" , BT_UNIT_TEST_FUNCTION_ON_OFF_REPEAT_TEST_N_SEC_DELAY},
{NULL , 0x0000},
};
+static void __bt_initialize_all(void);
+
+void __bt_gatt_client_value_changed_cb(bt_gatt_h chr, char *value, int len,
+ void *user_data);
+
void tc_usage_print(void)
{
int i = 0;
+ tc_table_t* tc_table = NULL;
+
+ switch (current_tc_table) {
+ case BT_UNIT_TEST_TABLE_SET_ADDRESS:
+ TC_PRT("Key 0 : usage BACK");
+ TC_PRT("Input the address of remote device.(e.g., F6:FB:8F:D8:C8:7C)\n\n");
+ return;
+ case BT_UNIT_TEST_TABLE_ADAPTER:
+ tc_table = tc_adapter;
+ break;
+ case BT_UNIT_TEST_TABLE_ADAPTER_LE:
+ tc_table = tc_adapter_le;
+ break;
+ case BT_UNIT_TEST_TABLE_DEVICE:
+ tc_table = tc_device;
+ break;
+ case BT_UNIT_TEST_TABLE_SOCKET:
+ tc_table = tc_socket;
+ break;
+ case BT_UNIT_TEST_TABLE_OPP:
+ tc_table = tc_opp;
+ break;
+ case BT_UNIT_TEST_TABLE_AUDIO:
+ tc_table = tc_audio;
+ break;
+ case BT_UNIT_TEST_TABLE_PAN:
+ tc_table = tc_pan;
+ break;
+ case BT_UNIT_TEST_TABLE_GATT:
+ tc_table = tc_gatt;
+ break;
+ case BT_UNIT_TEST_TABLE_AVRCP:
+ tc_table = tc_avrcp;
+ break;
+ case BT_UNIT_TEST_TABLE_HID:
+ tc_table = tc_hid;
+ break;
+#ifdef TIZEN_WEARABLE
+ case BT_UNIT_TEST_TABLE_HF:
+ tc_table = tc_hf;
+ break;
+ case BT_UNIT_TEST_TABLE_PBAP_CLIENT:
+ tc_table = tc_pbap_client;
+ break;
+#endif
+ case BT_UNIT_TEST_TABLE_AUTOMATED_TEST:
+ if (input_automated_test_delay == true) {
+ TC_PRT("Input the delay for automated test.(e.g., 10)\n\n");
+ return;
+ }
+ tc_table = tc_automated_test;
+ break;
+ case BT_UNIT_TEST_FUNCTION_INITIALIZE_ALL:
+ __bt_initialize_all();
+ TC_PRT("Key 0 : usage BACK");
+ return;
+ case BT_UNIT_TEST_TABLE_MAIN:
+ default:
+ tc_table = tc_main;
+ break;
+ }
while (tc_table[i].tc_name) {
- if (tc_table[i].tc_code != 0x00ff) {
- TC_PRT("Key %d : usage %s", tc_table[i].tc_code,
- tc_table[i].tc_name);
- } else {
- TC_PRT("Key %d : usage %s\n\n", 0x00ff,
+ TC_PRT("Key %d : usage %s", tc_table[i].tc_code,
tc_table[i].tc_name);
+ i++;
+ }
+ printf("\n\n");
+}
+
+static void __bt_free_test_param(tc_params_t *param)
+{
+ int i = 0;
+
+ for (i = 0; i < param->param_count; i++)
+ g_free(param->params[i]);
+ g_free(param->params);
+ param->params = NULL;
+ param->param_count = 0;
+}
+
+static const char* __bt_get_error_message(bt_error_e err)
+{
+ const char* err_str = NULL;
+
+ switch (err) {
+ case BT_ERROR_NONE:
+ err_str = "BT_ERROR_NONE";
+ break;
+ case BT_ERROR_CANCELLED:
+ err_str = "BT_ERROR_CANCELLED";
+ break;
+ case BT_ERROR_INVALID_PARAMETER:
+ err_str = "BT_ERROR_INVALID_PARAMETER";
+ break;
+ case BT_ERROR_OUT_OF_MEMORY:
+ err_str = "BT_ERROR_OUT_OF_MEMORY";
+ break;
+ case BT_ERROR_RESOURCE_BUSY:
+ err_str = "BT_ERROR_RESOURCE_BUSY";
+ break;
+ case BT_ERROR_TIMED_OUT:
+ err_str = "BT_ERROR_TIMED_OUT";
+ break;
+ case BT_ERROR_NOW_IN_PROGRESS:
+ err_str = "BT_ERROR_NOW_IN_PROGRESS";
+ break;
+ case BT_ERROR_NOT_INITIALIZED:
+ err_str = "BT_ERROR_NOT_INITIALIZED";
+ break;
+ case BT_ERROR_NOT_ENABLED:
+ err_str = "BT_ERROR_NOT_ENABLED";
+ break;
+ case BT_ERROR_ALREADY_DONE:
+ err_str = "BT_ERROR_ALREADY_DONE";
+ break;
+ case BT_ERROR_OPERATION_FAILED:
+ err_str = "BT_ERROR_OPERATION_FAILED";
+ break;
+ case BT_ERROR_NOT_IN_PROGRESS:
+ err_str = "BT_ERROR_NOT_IN_PROGRESS";
+ break;
+ case BT_ERROR_REMOTE_DEVICE_NOT_BONDED:
+ err_str = "BT_ERROR_REMOTE_DEVICE_NOT_BONDED";
+ break;
+ case BT_ERROR_AUTH_REJECTED:
+ err_str = "BT_ERROR_AUTH_REJECTED";
+ break;
+ case BT_ERROR_AUTH_FAILED:
+ err_str = "BT_ERROR_AUTH_FAILED";
+ break;
+ case BT_ERROR_REMOTE_DEVICE_NOT_FOUND:
+ err_str = "BT_ERROR_REMOTE_DEVICE_NOT_FOUND";
+ break;
+ case BT_ERROR_SERVICE_SEARCH_FAILED:
+ err_str = "BT_ERROR_SERVICE_SEARCH_FAILED";
+ break;
+ case BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED:
+ err_str = "BT_ERROR_REMOTE_DEVICE_NOT_CONNECTED";
+ break;
+ case BT_ERROR_PERMISSION_DENIED:
+ err_str = "BT_ERROR_PERMISSION_DENIED";
+ break;
+ case BT_ERROR_SERVICE_NOT_FOUND:
+ err_str = "BT_ERROR_SERVICE_NOT_FOUND";
+ break;
+ case BT_ERROR_NOT_SUPPORTED:
+ err_str = "BT_ERROR_NOT_SUPPORTED";
+ break;
+ default:
+ err_str = "NOT Defined";
+ break;
+ }
+
+ return err_str;
+}
+
+#ifdef BT_ENABLE_LEGACY_GATT_CLIENT
+static gboolean __select_index_cb(GIOChannel *chan,
+ GIOCondition cond,
+ gpointer data)
+{
+ char buf[BUFFER_LEN] = { 0 };
+ unsigned int len = 0;
+ int *index = data;
+
+ memset(buf, 0, sizeof(buf));
+
+ if (g_io_channel_read_chars(chan, buf, sizeof(buf),
+ &len, NULL) == G_IO_STATUS_ERROR) {
+ TC_PRT("IO Channel read error");
+ is_sub_index = FALSE;
+ return FALSE;
+ }
+
+ *index = atoi(buf);
+ is_sub_index = FALSE;
+
+ return FALSE;
+}
+
+static void __select_index(void *data, const char *str)
+{
+ GIOChannel *key_io;
+
+ is_sub_index = TRUE;
+
+ if (str)
+ TC_PRT("%s ", str);
+
+ key_io = g_io_channel_unix_new(fileno(stdin));
+
+ g_io_channel_set_encoding(key_io, NULL, NULL);
+ g_io_channel_set_flags(key_io, G_IO_FLAG_NONBLOCK, NULL);
+
+ g_io_add_watch(key_io, G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL,
+ __select_index_cb, data);
+
+ g_io_channel_unref(key_io);
+}
+
+static void __bt_free_gatt_services(void)
+{
+ int i;
+
+ for (i = 0; i < service_index; i++) {
+ bt_gatt_destroy_attribute_handle(service_clone[i]);
+ service_clone[i] = NULL;
+ }
+
+ service_index = 0;
+}
+
+static void __bt_free_gatt_characteristics(void)
+{
+ int i;
+
+ for (i = 0; i < MAX_SERVICES; i++) {
+ if (characteristics[i] == NULL)
+ return;
+
+ bt_gatt_destroy_attribute_handle(characteristics[i]);
+ characteristics[i] = NULL;
+ }
+}
+
+static void __bt_free_gatt_characteristics_services(void)
+{
+ int i;
+
+ for (i = 0; i < char_service_index; i++) {
+ bt_gatt_destroy_attribute_handle(characteristics_services[i]);
+ characteristics_services[i] = NULL;
+ }
+ char_service_index = 0;
+}
+#endif
+
+void __bt_adapter_state_changed_cb(int result, bt_adapter_state_e adapter_state, void *user_data)
+{
+ TC_PRT("__bt_adapter_state_changed_cb");
+ TC_PRT("result: %s", __bt_get_error_message(result));
+ TC_PRT("state: %s",
+ (adapter_state == BT_ADAPTER_ENABLED)?
+ "ENABLED" : "DISABLED");
+}
+
+static void __bt_adapter_device_visibility_mode_changed_cb(int result,
+ bt_adapter_visibility_mode_e visibility_mode,
+ void *user_data)
+{
+ TC_PRT("result: %s", __bt_get_error_message(result));
+ TC_PRT("visibility_mode: %d", visibility_mode);
+}
+
+static void __bt_adapter_device_visibility_duration_changed_cb(int duration,
+ void *user_data)
+{
+ TC_PRT("visibility_duration: %d", duration);
+}
+
+static void __bt_adapter_connectable_changed_cb(int result,
+ bool connectable, void *user_data)
+{
+ if (result != BT_ERROR_NONE) {
+ TC_PRT("connectable change is failed : [0x%04x]", result);
+ return;
+ }
+
+ TC_PRT("%s", connectable ? "Connectable" : "Non-connectable");
+}
+
+static void __bt_adapter_manufacturer_data_changed_cb(char *data,
+ int len, void *user_data)
+{
+ int i;
+
+ TC_PRT("manufacturer data is changed");
+ for (i = 0; i < len; i++) {
+ TC_PRT("[%d] %02x", i, data[i]);
+ }
+}
+
+static bool __bt_adapter_bonded_device_cb(bt_device_info_s *device_info, void *user_data)
+{
+ int i;
+
+ TC_PRT("remote_address: %s", device_info->remote_address);
+ TC_PRT("remote_name: %s", device_info->remote_name);
+ TC_PRT("service_count: %d", device_info->service_count);
+
+ if (device_info->service_uuid == NULL) {
+ TC_PRT("No uuids");
+ } else {
+ for (i = 0; i < device_info->service_count; i++) {
+ TC_PRT("uuid: %s", device_info->service_uuid[i]);
}
+ }
- i++;
+ if (device_info->manufacturer_data_len > 0) {
+ TC_PRT("manufacturer specific data(len:%d)", device_info->manufacturer_data_len);
+ printf("data [");
+ for (i = 0; i < device_info->manufacturer_data_len; i++)
+ printf("%02x ", device_info->manufacturer_data[i]);
+ printf("]\n");
}
+
+ return true;
}
static void __bt_adapter_device_discovery_state_changed_cb(int result,
@@ -134,12 +813,199 @@ static void __bt_adapter_device_discovery_state_changed_cb(int result,
if (discovery_info->service_uuid == NULL) {
TC_PRT("No uuids");
+ } else {
+ for (i = 0; i < discovery_info->service_count; i++) {
+ TC_PRT("uuid: %s", discovery_info->service_uuid[i]);
+ }
+ }
+
+ if (discovery_info->manufacturer_data_len > 0) {
+ TC_PRT("manufacturer specific data(len:%d)", discovery_info->manufacturer_data_len);
+ printf("data [");
+ for (i = 0; i < discovery_info->manufacturer_data_len; i++)
+ printf("%02x ", discovery_info->manufacturer_data[i]);
+ printf("]\n");
+ }
+}
+
+static void __bt_adapter_le_scan_result_cb(int result,
+ bt_adapter_le_device_scan_result_info_s *info, void *user_data)
+{
+ int i;
+ bt_adapter_le_packet_type_e pkt_type = BT_ADAPTER_LE_PACKET_ADVERTISING;
+
+ if (info == NULL) {
+ TC_PRT("No discovery_info!");
return;
}
- for (i = 0; i < discovery_info->service_count; i++) {
- TC_PRT("uuid: %s", discovery_info->service_uuid[i]);
+ TC_PRT("%s Adv %d Scan resp %d RSSI %d Addr_type %d", info->remote_address,
+ info->adv_data_len, info->scan_data_len, info->rssi,
+ info->address_type);
+
+ if (info->adv_data_len > 31 || info->scan_data_len > 31) {
+ TC_PRT("###################");
+ bt_adapter_le_stop_scan();
+ TC_PRT("###################");
+ return;
}
+
+ for (i = 0; i < 2; i++) {
+ char **uuids;
+ char *device_name;
+ int tx_power_level;
+ bt_adapter_le_service_data_s *data_list;
+ int appearance;
+ int manufacturer_id;
+ char *manufacturer_data;
+ int manufacturer_data_len;
+ int count;
+
+ pkt_type += i;
+ if (pkt_type == BT_ADAPTER_LE_PACKET_ADVERTISING && info->adv_data == NULL) continue;
+ if (pkt_type == BT_ADAPTER_LE_PACKET_SCAN_RESPONSE && info->scan_data == NULL) break;
+
+ if (bt_adapter_le_get_scan_result_service_uuids(info, pkt_type, &uuids, &count) == BT_ERROR_NONE) {
+ int i;
+ for (i = 0; i < count; i++) {
+ TC_PRT("UUID[%d] = %s", i + 1, uuids[i]);
+ g_free(uuids[i]);
+ }
+ g_free(uuids);
+ }
+ if (bt_adapter_le_get_scan_result_device_name(info, pkt_type, &device_name) == BT_ERROR_NONE) {
+ TC_PRT("Device name = %s", device_name);
+ g_free(device_name);
+ }
+ if (bt_adapter_le_get_scan_result_tx_power_level(info, pkt_type, &tx_power_level) == BT_ERROR_NONE) {
+ TC_PRT("TX Power level = %d", tx_power_level);
+ }
+ if (bt_adapter_le_get_scan_result_service_solicitation_uuids(info, pkt_type, &uuids, &count) == BT_ERROR_NONE) {
+ int i;
+ for (i = 0; i < count; i++) {
+ TC_PRT("Solicitation UUID[%d] = %s", i + 1, uuids[i]);
+ g_free(uuids[i]);
+ }
+ g_free(uuids);
+ }
+ if (bt_adapter_le_get_scan_result_service_data_list(info, pkt_type, &data_list, &count) == BT_ERROR_NONE) {
+ int i;
+ for (i = 0; i < count; i++)
+ TC_PRT("Service Data[%d] = [0x%2.2X%2.2X:0x%.2X...]", i + 1, data_list[i].service_uuid[0], data_list[i].service_uuid[1], data_list[i].service_data[0]);
+ bt_adapter_le_free_service_data_list(data_list, count);
+ }
+ if (bt_adapter_le_get_scan_result_appearance(info, pkt_type, &appearance) == BT_ERROR_NONE) {
+ TC_PRT("Appearance = %d", appearance);
+ }
+ if (bt_adapter_le_get_scan_result_manufacturer_data(info, pkt_type, &manufacturer_id, &manufacturer_data, &manufacturer_data_len) == BT_ERROR_NONE) {
+ TC_PRT("Manufacturer data[ID:%.4X, 0x%.2X%.2X...(len:%d)]", manufacturer_id, manufacturer_data[0], manufacturer_data[1], manufacturer_data_len);
+ g_free(manufacturer_data);
+ }
+ }
+}
+
+void __bt_gatt_server_read_value_requested_cb (char *remote_address,
+ int request_id, bt_gatt_server_h server, bt_gatt_h gatt_handle,
+ int offset, void *user_data)
+{
+ char char_value_1[3] = {0, 1, 2};
+
+ TC_PRT("__bt_gatt_server_read_value_requested_cb");
+ TC_PRT("req_id %d", request_id);
+ TC_PRT("server %s", (char *)server);
+ TC_PRT("server %s", (char *)gatt_handle);
+ TC_PRT("Offset %d", offset);
+ /* Get the attribute new values here */
+ bt_gatt_server_send_response(request_id, offset, char_value_1, 3 - offset);
+}
+
+#ifndef TIZEN_WEARABLE
+static void __bt_adapter_le_device_discovery_state_changed_cb(int result,
+ bt_adapter_le_device_discovery_state_e discovery_state,
+ bt_adapter_le_device_discovery_info_s *discovery_info,
+ void *user_data)
+{
+ if (discovery_info == NULL && discovery_state == BT_ADAPTER_LE_DEVICE_DISCOVERY_FOUND) {
+ TC_PRT("No discovery_info!");
+ return;
+ }
+
+ if (discovery_state != BT_ADAPTER_LE_DEVICE_DISCOVERY_FOUND) {
+ TC_PRT("LE discovery %s", discovery_state == BT_ADAPTER_LE_DEVICE_DISCOVERY_STARTED?
+ "Started" : "Finished");
+ } else {
+ TC_PRT("%s Adv %d Scan resp %d RSSI %d Addr_type %d", discovery_info->remote_address,
+ discovery_info->adv_data_len, discovery_info->scan_data_len, discovery_info->rssi,
+ discovery_info->address_type);
+
+ if (discovery_info->adv_data_len > 31 || discovery_info->scan_data_len > 31) {
+ TC_PRT("###################");
+ bt_adapter_le_stop_device_discovery();
+ TC_PRT("###################");
+ return;
+ }
+#if 0
+ /* LE ADV information */
+ int i, ret;
+ int field_len = 0;
+ unsigned char *field_data;
+
+ printf("Adv data [");
+ for (i = 0; i < discovery_info->adv_data_len; i++)
+ printf("%02x ", discovery_info->adv_data[i]);
+ printf("]\n");
+
+ printf("Scan resp data [");
+ for (i = 0; i < discovery_info->scan_data_len; i++)
+ printf("%02x ", discovery_info->scan_data[i]);
+ printf("]\n");
+
+ ret = bt_adapter_le_get_scan_field_data(discovery_info, BT_ADAPTER_LE_PACKET_ADVERTISING,
+ BT_ADAPTER_LE_PACKET_DATA_MANUFACTURER_SPECIFIC_DATA, &field_data, &field_len);
+ if (ret == BT_ERROR_NONE) {
+ printf("Manufacturer specific data [");
+ for (i = 0; i < field_len; i++)
+ printf("%02x ", field_data[i]);
+ printf("]\n");
+ g_free(field_data);
+ }
+
+ ret = bt_adapter_le_get_scan_field_data(discovery_info, BT_ADAPTER_LE_PACKET_SCAN_RESPONSE,
+ BT_ADAPTER_LE_PACKET_DATA_LOCAL_NAME, &field_data, &field_len);
+ if (ret == BT_ERROR_NONE) {
+ TC_PRT("%s", field_data);
+ g_free(field_data);
+ }
+#endif
+ }
+}
+#endif
+
+static void __bt_adapter_le_advertising_state_changed_cb(int result,
+ bt_advertiser_h advertiser, bt_adapter_le_advertising_state_e adv_state, void *user_data)
+{
+ TC_PRT("Result : %d", result);
+ TC_PRT("Advertiser : %p", advertiser);
+ TC_PRT("Advertising %s [%d]", adv_state == BT_ADAPTER_LE_ADVERTISING_STARTED ?
+ "started" : "stopped", adv_state);
+}
+
+static void __bt_adapter_le_advertising_state_changed_cb_2(int result,
+ bt_advertiser_h advertiser, bt_adapter_le_advertising_state_e adv_state, void *user_data)
+{
+ TC_PRT("Result : %d", result);
+ TC_PRT("Advertiser : %p", advertiser);
+ TC_PRT("Advertising %s [%d]", adv_state == BT_ADAPTER_LE_ADVERTISING_STARTED ?
+ "started" : "stopped", adv_state);
+}
+
+static void __bt_adapter_le_advertising_state_changed_cb_3(int result,
+ bt_advertiser_h advertiser, bt_adapter_le_advertising_state_e adv_state, void *user_data)
+{
+ TC_PRT("Result : %d", result);
+ TC_PRT("Advertiser : %p", advertiser);
+ TC_PRT("Advertising %s [%d]", adv_state == BT_ADAPTER_LE_ADVERTISING_STARTED ?
+ "started" : "stopped", adv_state);
}
static void __bt_socket_data_received_cb(bt_socket_received_data_s *data, void *user_data)
@@ -167,7 +1033,7 @@ static void __bt_socket_connection_state_changed_cb(int result,
bt_socket_connection_s *connection,
void *user_data)
{
- TC_PRT("result: %d", result);
+ TC_PRT("result: %s", __bt_get_error_message(result));
TC_PRT("connection_state: %d", connection_state);
if (connection == NULL) {
@@ -176,16 +1042,23 @@ static void __bt_socket_connection_state_changed_cb(int result,
}
TC_PRT("socket fd: %d", connection->socket_fd);
+ TC_PRT("server socket fd: %d", connection->server_fd);
TC_PRT("role: %d", connection->local_role);
TC_PRT("remote address: %s", connection->remote_address);
- TC_PRT("service_uuid: %s", connection->service_uuid);
+ if (strcmp(spp_uuid, connection->service_uuid) == 0) {
+ TC_PRT("service_uuid: %s", spp_uuid);
+ client_fd = connection->socket_fd;
+ } else {
+ TC_PRT("service_uuid: %s", connection->service_uuid);
+ custom_client_fd = connection->socket_fd;
+ }
}
void __bt_opp_client_push_responded_cb(int result,
const char *remote_address,
void *user_data)
{
- TC_PRT("result: %d", result);
+ TC_PRT("result: %s", __bt_get_error_message(result));
TC_PRT("remote_address: %s", remote_address);
}
@@ -203,266 +1076,4297 @@ void __bt_opp_client_push_finished_cb(int result,
const char *remote_address,
void *user_data)
{
- TC_PRT("result: %d", result);
+ TC_PRT("result: %s", __bt_get_error_message(result));
TC_PRT("remote_address: %s", remote_address);
}
+void __bt_audio_connection_state_changed_cb(int result,
+ bool connected, const char *remote_address,
+ bt_audio_profile_type_e type, void *user_data)
+{
+ TC_PRT("result [%s]", __bt_get_error_message(result));
+ TC_PRT("connected [%d]", connected);
+ TC_PRT("address [%s]", remote_address);
+ TC_PRT("type [%d]", type);
+}
+
+void __bt_ag_sco_state_changed_cb(int result, bool opened, void *user_data)
+{
+ TC_PRT("result [%s]", __bt_get_error_message(result));
+ TC_PRT("opened [%s]", opened ? "YES" : "NO");
+}
-int test_input_callback(void *data)
+void __bt_ag_set_call_handling_event_cb(bt_ag_call_handling_event_e event,
+ unsigned int call_id, void *user_data)
+{
+ TC_PRT("event[%d] call_id[%d]", event, call_id);
+}
+
+void __bt_device_authorization_changed_cb(bt_device_authorization_e authorization,
+ char *remote_address, void *user_data)
+{
+ TC_PRT("__bt_device_authorization_changed_cb [%d]", authorization);
+ TC_PRT("address: %s", remote_address);
+}
+
+void __bt_device_connection_state_changed_cb(bool connected,
+ bt_device_connection_info_s *conn_info,
+ void *user_data)
+{
+ TC_PRT("__bt_device_connection_state_changed_cb [%d]", connected);
+ TC_PRT("address [%s]", conn_info->remote_address);
+ TC_PRT("link type [%d]", conn_info->link);
+ TC_PRT("disconnection reason [%d]", conn_info->disconn_reason);
+}
+
+bool __bt_device_connected_profile(bt_profile_e profile, void *user_data)
+{
+ TC_PRT("__bt_device_connected_profile [%d]", profile);
+ return true;
+}
+
+void __bt_device_bond_created_cb(int result, bt_device_info_s *device_info, void *user_data)
+{
+ if(result == BT_ERROR_NONE)
+ {
+ TC_PRT("Callback: A bond is created.");
+ TC_PRT("Callback: The number of service - %d.", device_info->service_count);
+
+ int i = 0;
+ for(i=0; i<device_info->service_count; i++) {
+ TC_PRT("Callback: service[%d] - %s", i+1, device_info->service_uuid[i]);
+ }
+ TC_PRT("Callback: is_bonded - %d.", device_info->is_bonded);
+ TC_PRT("Callback: is_connected - %d.", device_info->is_connected);
+
+ if (device_info->manufacturer_data_len > 0) {
+ TC_PRT("manufacturer specific data(len:%d)", device_info->manufacturer_data_len);
+ printf("data [");
+ for (i = 0; i < device_info->manufacturer_data_len; i++)
+ printf("%02x ", device_info->manufacturer_data[i]);
+ printf("]\n");
+ }
+ } else {
+ TC_PRT("Callback: Creating a bond is failed.");
+ TC_PRT("result: %s", __bt_get_error_message(result));
+ }
+}
+
+void __bt_device_bond_destroyed_cb(int result, char *remote_address, void *user_data)
+{
+ if(result == BT_ERROR_NONE)
+ {
+ TC_PRT("Callback: A bond is destroyed.");
+ TC_PRT("Callback: Address - %s.", remote_address);
+ } else {
+ TC_PRT("Callback: Destroying a bond is failed.");
+ TC_PRT("result: %s", __bt_get_error_message(result));
+ }
+}
+
+void __bt_repeat_test_onoff_count_time_summary()
+{
+ time_t ctimer;
+ struct tm *_tm;
+
+ ctimer = time(NULL);
+ ctimer -= bt_onoff_timer;
+ _tm = gmtime(&ctimer);
+
+ if (_tm == NULL) {
+ /* Fix : NULL_RETURNS */
+ TC_PRT("gmtime failed error ");
+ return;
+ }
+
+ TC_PRT("try: %d, success: %d, fail: %d, time(%dd,%d:%d:%d)\n",
+ bt_onoff_cnt/2, bt_onoff_cnt_success/2, bt_onoff_cnt_fail,
+ _tm->tm_mday-1, _tm->tm_hour, _tm->tm_min, _tm->tm_sec);
+}
+
+void __bt_gatt_connection_state_changed_cb(int result, bool connected, const char *remote_address, void *user_data)
+{
+ TC_PRT("result: %s", __bt_get_error_message(result));
+ if (connected) {
+ TC_PRT("LE connected(address = %s)", remote_address);
+ /* Fix : STRING_OVERFLOW */
+ strncpy(remote_addr, remote_address, strlen(remote_addr));
+ } else {
+ TC_PRT("LE DISconnected");
+ }
+}
+
+int __bt_gatt_client_set_value(char *type, char *value, bt_gatt_h h)
+{
+ int ret;
+ int s_val;
+ unsigned int u_val;
+ char *buf;
+ int len;
+
+ if (strcasecmp(type, "int8") == 0) {
+ s_val = atoi(value);
+ buf = (char *)&s_val;
+ len = 1;
+ } else if (strcasecmp(type, "int16") == 0) {
+ s_val = atoi(value);
+ buf = (char *)&s_val;
+ len = 2;
+ } else if (strcasecmp(type, "int32") == 0) {
+ s_val = atoi(value);
+ buf = (char *)&s_val;
+ len = 4;
+ } else if (strcasecmp(type, "uint8") == 0) {
+ u_val = strtoul(value, NULL, 10);
+ buf = (char *)&u_val;
+ len = 1;
+ } else if (strcasecmp(type, "uint16") == 0) {
+ u_val = strtoul(value, NULL, 10);
+ buf = (char *)&u_val;
+ len = 2;
+ } else if (strcasecmp(type, "uint32") == 0) {
+ u_val = strtoul(value, NULL, 10);
+ buf = (char *)&u_val;
+ len = 4;
+ } else if (strcasecmp(type, "str") == 0) {
+ buf = value;
+ len = strlen(buf);
+ } else
+ return BT_ERROR_INVALID_PARAMETER;
+
+ ret = bt_gatt_set_value(h, buf, len);
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("bt_gatt_set_value is failed : %d", ret);
+
+ return ret;
+}
+
+void __bt_gatt_client_print_value(bt_gatt_h h)
+{
+ int ret;
+ char *str = NULL;
+ char *value = NULL;
+ int len = 0;
+ bool hex_format = false;
+ int i;
+
+ ret = bt_gatt_get_value(h, &value, &len);
+ if (ret != BT_ERROR_NONE) {
+ TC_PRT("bt_gatt_get_value is failed : %d", ret);
+ return;
+ }
+
+ for (i = 0; i < len; i++)
+ if (isalnum(value[i]) == 0) {
+ hex_format = true;
+ break;
+ }
+
+ if (hex_format) {
+ str = g_malloc0(len * 5 + 1);
+ /* Fix : NULL_RETURNS */
+ if (!str) {
+ TC_PRT("BT_ERROR_OUT_OF_MEMORY");
+ goto fail;
+ }
+ for (i = 0; i < len; i++) {
+ if (i > 0)
+ str[i * 5 - 1] = ' ';
+
+ snprintf(&str[i * 5], 5, "0x%02X", value[i]);
+ }
+ } else {
+ str = g_malloc0(len + 1);
+ /* Fix : NULL_RETURNS */
+ if (!str) {
+ TC_PRT("BT_ERROR_OUT_OF_MEMORY");
+ goto fail;
+ }
+ memcpy(str, value, len);
+ }
+
+ TC_PRT("Value : %s", str);
+
+ g_free(str);
+fail:
+ g_free(value);
+}
+
+bool __bt_gatt_print_info_cb(int total, int index, bt_gatt_h gatt_handle, void *user_data)
+{
+ char *uuid = NULL;
+ char *str = NULL;
+
+ bt_gatt_get_uuid(gatt_handle, &uuid);
+ bt_gatt_get_uuid_specification_name(uuid, &str);
+
+ TC_PRT("[%d / %d] %s (%s)", index, total, str ? str : "Unknown", uuid);
+
+ g_free(str);
+ g_free(uuid);
+
+ return true;
+}
+
+void __bt_gatt_client_write_complete_cb(int result, bt_gatt_h gatt_handle, void *data)
+{
+ char *uuid = NULL;
+ char *str = NULL;
+
+ bt_gatt_get_uuid(gatt_handle, &uuid);
+ bt_gatt_get_uuid_specification_name(uuid, &str);
+
+ TC_PRT("Write %s for %s (%s)", result == BT_ERROR_NONE ? "Success" : "Fail", str ? str : "Unknown", uuid);
+
+ g_free(str);
+ g_free(uuid);
+
+ return;
+}
+
+void __bt_gatt_client_read_complete_cb(int result, bt_gatt_h gatt_handle, void *data)
+{
+ char *uuid = NULL;
+ char *str = NULL;
+
+ bt_gatt_get_uuid(gatt_handle, &uuid);
+ bt_gatt_get_uuid_specification_name(uuid, &str);
+
+ TC_PRT("Read %s for %s (%s)", result == BT_ERROR_NONE ? "Success" : "Fail", str ? str : "Unknown", uuid);
+
+ g_free(str);
+ g_free(uuid);
+
+ if (result != BT_ERROR_NONE)
+ return;
+
+ __bt_gatt_client_print_value(gatt_handle);
+
+ return;
+}
+
+bool __bt_gatt_client_foreach_desc_cb(int total, int index, bt_gatt_h desc_handle, void *data)
+{
+ char *uuid = NULL;
+ char *str = NULL;
+
+ bt_gatt_get_uuid(desc_handle, &uuid);
+ bt_gatt_get_uuid_specification_name(uuid, &str);
+
+ TC_PRT("\t\t[%d / %d] %s (%s)", index, total, str ? str : "Unknown", uuid);
+ __bt_gatt_client_print_value(desc_handle);
+
+ g_free(str);
+ g_free(uuid);
+
+ return true;
+}
+
+bool __bt_gatt_client_foreach_chr_cb(int total, int index, bt_gatt_h chr_handle, void *data)
+{
+ int ret;
+ char *uuid = NULL;
+ char *str = NULL;
+
+ bt_gatt_get_uuid(chr_handle, &uuid);
+ bt_gatt_get_uuid_specification_name(uuid, &str);
+
+ TC_PRT("\t[%d / %d] %s (%s)", index, total, str ? str : "Unknown", uuid);
+ __bt_gatt_client_print_value(chr_handle);
+
+ g_free(str);
+ g_free(uuid);
+
+ ret = bt_gatt_characteristic_foreach_descriptors(chr_handle,
+ __bt_gatt_client_foreach_desc_cb, NULL);
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("bt_gatt_characteristic_foreach_descriptors is failed : %d", ret);
+
+ return true;
+}
+
+bool __bt_gatt_client_foreach_svc_cb(int total, int index, bt_gatt_h svc_handle, void *data)
{
- int ret = 0;
int test_id = (int)data;
+ int ret;
+ char *uuid = NULL;
+ char *str = NULL;
- switch (test_id) {
- case 0x00ff:
- TC_PRT("Finished");
- g_main_loop_quit(main_loop);
- break;
+ bt_gatt_get_uuid(svc_handle, &uuid);
+ bt_gatt_get_uuid_specification_name(uuid, &str);
- case 1:
- ret = bt_initialize();
- if (ret < BT_ERROR_NONE)
- TC_PRT("failed with [0x%04x]", ret);
- break;
- case 2:
- ret = bt_deinitialize();
- if (ret < BT_ERROR_NONE)
- TC_PRT("failed with [0x%04x]", ret);
- break;
- case 3: {
- bt_adapter_state_e state = BT_ADAPTER_DISABLED;
+ TC_PRT("[%d / %d] %s (%s)", index, total, str ? str : "Unknown", uuid);
- ret = bt_adapter_get_state(&state);
- if (ret < BT_ERROR_NONE)
- TC_PRT("failed with [0x%04x]", ret);
+ g_free(str);
+ g_free(uuid);
- TC_PRT("state: %d", state);
- break;
+ if (test_id == BT_UNIT_TEST_FUNCTION_GATT_CLIENT_PRINT_ALL) {
+ ret = bt_gatt_service_foreach_characteristics(svc_handle,
+ __bt_gatt_client_foreach_chr_cb, (void *)test_id);
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("bt_gatt_service_foreach_characteristics is failed : %d", ret);
+ }
+
+ return true;
+}
+
+static void __ancs_write_completed_cb(int result, bt_gatt_h request_handle,
+ void *user_data)
+{
+ if (result != BT_ERROR_NONE) {
+ TC_PRT("write request is failed : %d", result);
+ return;
+ }
+
+ TC_PRT("write request is done");
+
+ return;
+}
+
+static int __ancs_write_value_to_control_point(bt_gatt_client_h client, char *value, int len)
+{
+ bt_gatt_h ancs_svc = NULL;
+ bt_gatt_h control_point = NULL;
+ char *svc_uuid = "7905F431-B5CE-4E99-A40F-4B1E122D00D0";
+ char *chr_uuid = "69D1D8F3-45E1-49A8-9821-9BBDFDAAD9D9";
+ int ret;
+
+ ret = bt_gatt_client_get_service(client, svc_uuid, &ancs_svc);
+ if (ret != BT_ERROR_NONE) {
+ TC_PRT("bt_gatt_client_get_service is failed : %d", ret);
+ return ret;
+ }
+
+ ret = bt_gatt_service_get_characteristic(ancs_svc, chr_uuid, &control_point);
+ if (ret != BT_ERROR_NONE) {
+ TC_PRT("bt_gatt_service_get_characteristic is failed");
+ return ret;
}
- case 4:
- ret = bt_adapter_enable();
- if (ret < BT_ERROR_NONE)
- TC_PRT("failed with [0x%04x]", ret);
+
+ ret = bt_gatt_characteristic_set_write_type(control_point,
+ BT_GATT_WRITE_TYPE_WRITE);
+ if (ret != BT_ERROR_NONE) {
+ TC_PRT("bt_gatt_characteristic_set_write_type is failed : %d", ret);
+ return ret;
+ }
+
+ ret = bt_gatt_set_value(control_point, value, len);
+ if (ret != BT_ERROR_NONE) {
+ TC_PRT("bt_gatt_set_value is failed : %d", ret);
+ return ret;
+ }
+
+ ret = bt_gatt_client_write_value(control_point,
+ __ancs_write_completed_cb, NULL);
+ if (ret != BT_ERROR_NONE) {
+ TC_PRT("bt_gatt_client_write_value is failed : %d", ret);
+ return ret;
+ }
+
+ return ret;
+}
+
+void __bt_gatt_client_value_changed_cb(bt_gatt_h chr, char *value, int len,
+ void *user_data)
+{
+ char *uuid = NULL;
+ int i;
+
+ bt_gatt_get_uuid(chr, &uuid);
+
+ TC_PRT("Value changed for [%s]", uuid);
+ TC_PRT("len [%d]", len);
+ for (i = 0; i < len; i++) {
+ TC_PRT("value %u", value[i]);
+ }
+
+ g_free(uuid);
+
+ return;
+}
+
+void __bt_gatt_server_notification_sent_cb(int result,
+ char *remote_address, bt_gatt_server_h server,
+ bt_gatt_h characteristic, bool completed, void *user_data)
+{
+ TC_PRT("result [%s]", __bt_get_error_message(result));
+ TC_PRT("remote_address : %s", remote_address);
+ TC_PRT("completed : %d", completed);
+ TC_PRT("characteristic : %p", characteristic);
+}
+
+#ifdef BT_ENABLE_LEGACY_GATT_CLIENT
+bool __bt_gatt_primary_service_cb(bt_gatt_attribute_h service, void *user_data)
+{
+ TC_PRT("__bt_gatt_primary_service_cb");
+ TC_PRT("service %s", (char *)service);
+ if (service_index >= MAX_SERVICES)
+ return true;
+
+ bt_gatt_clone_attribute_handle(&service_clone[service_index], service);
+ service_index++;
+ return true;
+}
+
+bool __bt_gatt_characteristics_discovered_cb(int result, int index, int total, bt_gatt_attribute_h characteristic, void *user_data)
+{
+ TC_PRT("result: %s", __bt_get_error_message(result));
+ TC_PRT("index %d", index);
+ TC_PRT("total %d", total);
+ TC_PRT("characteristic %s", (char *)characteristic);
+
+ if (index >= MAX_SERVICES)
+ return true;
+
+ bt_gatt_clone_attribute_handle(&characteristics[index], characteristic);
+ return true;
+}
+
+void __bt_gatt_characteristic_descriptor_discovered_cb(int result,
+ unsigned char characteristic_format, int total,
+ bt_gatt_attribute_h characteristic_descriptor, void *user_data) {
+ TC_PRT("result: %s", __bt_get_error_message(result));
+ TC_PRT("total %d", total);
+ TC_PRT("characteristic_format 0x%02X", characteristic_format);
+ TC_PRT("characteristic_descriptor %s", (char *)characteristic_descriptor);
+}
+
+bool __bt_gatt_included_service_cb(bt_gatt_attribute_h service, void *user_data)
+{
+ char *uuid = NULL;
+ char *name = NULL;
+ unsigned char *value = NULL;
+ int value_length = 0;
+
+ TC_PRT("__bt_gatt_included_service_cb");
+ TC_PRT("service %s", (char *)service);
+
+ if (char_service_index >= MAX_SERVICES)
+ return true;
+
+ bt_gatt_clone_attribute_handle(&characteristics_services[char_service_index], service);
+ char_service_index++;
+
+ bt_gatt_get_characteristic_declaration(service, &uuid, &value, &value_length);
+ bt_gatt_get_uuid_specification_name(uuid, &name);
+ TC_PRT("uuid: %s [%s]", uuid, name);
+
+ g_free(uuid);
+ g_free(name);
+ return true;
+}
+
+void __bt_gatt_characteristic_changed_cb(bt_gatt_attribute_h characteristic, unsigned char *value, int value_length, void *user_data)
+{
+ int i;
+
+ TC_PRT("__bt_gatt_characteristic_changed_cb");
+ TC_PRT("service %s", (char *)characteristic);
+ TC_PRT("value_length %d", value_length);
+
+ for (i = 0; i < value_length; i++) {
+ TC_PRT("value %c", value[i]);
+ }
+
+ return;
+}
+
+void __bt_gatt_char_write_cb(void *user_data)
+{
+ TC_PRT("__bt_gatt_char_write_cb");
+ return;
+}
+
+void __bt_gatt_char_read_cb(unsigned char *value, int value_length, void *user_data)
+{
+ int i;
+
+ TC_PRT("__bt_gatt_char_read_cb");
+
+ TC_PRT("value_length %d", value_length);
+
+ for (i = 0; i < value_length; i++) {
+ TC_PRT("value %u", value[i]);
+ }
+
+ return;
+}
+
+void __bt_gatt_remote_characteristic_write_cb(bt_gatt_attribute_h characteristic,
+ unsigned char *char_value,
+ int char_length, void *user_data)
+{
+ TC_PRT("remote device updated the characteristics in db");
+
+ TC_PRT("updated characteristic is %s", (char *)characteristic);
+ TC_PRT("new char value is %s", char_value);
+}
+#endif
+
+void __bt_avrcp_target_connection_state_changed_cb(bool connected, const char *remote_address, void *user_data)
+{
+ TC_PRT("__bt_avrcp_target_connection_state_changed_cb");
+ TC_PRT("connected %d", connected);
+ TC_PRT("remote_address %s", remote_address);
+}
+
+void __bt_avrcp_equalizer_state_changed_cb(bt_avrcp_equalizer_state_e equalizer, void *user_data)
+{
+ TC_PRT("__bt_avrcp_equalizer_state_changed_cb");
+ TC_PRT("equalizer %d (1: OFF, 2: ON)", equalizer);
+}
+
+void __bt_avrcp_repeat_mode_changed_cb(bt_avrcp_repeat_mode_e repeat, void *user_data)
+{
+ TC_PRT("__bt_avrcp_repeat_mode_changed_cb");
+ TC_PRT("repeat %d (1: OFF, 2: SINGLE, 3: All, 4:GROUP)", repeat);
+}
+
+void __bt_avrcp_shuffle_mode_changed_cb(bt_avrcp_shuffle_mode_e shuffle, void *user_data)
+{
+ TC_PRT("__bt_avrcp_shuffle_mode_changed_cb");
+ TC_PRT("shuffle -> %d (1: OFF, 2: All TRACK, 3:GROUP)", shuffle);
+}
+
+void __bt_avrcp_scan_mode_changed_cb(bt_avrcp_scan_mode_e scan, void *user_data)
+{
+ TC_PRT("__bt_avrcp_scan_mode_changed_cb");
+ TC_PRT("scan -> %d", scan);
+}
+
+void __bt_avrcp_control_connection_state_changed_cb(bool connected, const char *remote_address, void *user_data)
+{
+ TC_PRT("__bt_avrcp_target_connection_state_changed_cb");
+ TC_PRT("connected %d", connected);
+ TC_PRT("remote_address %s", remote_address);
+}
+
+void __bt_avrcp_song_position_changed_cb(unsigned int postion, void *user_data)
+{
+ TC_PRT("__bt_avrcp_song_position_changed_cb");
+ TC_PRT("Position %d", postion);
+}
+
+void __bt_avrcp_player_state_changed_cb(bt_avrcp_player_state_e state, void *user_data)
+{
+ TC_PRT("__bt_avrcp_player_state_changed_cb");
+ TC_PRT("Player state -> %d (0: stopped, 1: Playing, 2:Paused, 3:FF, 4:REW)", state);
+}
+
+void __bt_avrcp_track_info_changed_cb(bt_avrcp_metadata_attributes_info_s *metadata, void *user_data)
+{
+ TC_PRT("__bt_avrcp_track_info_changed_cb");
+ TC_PRT("title %s", metadata->title);
+ TC_PRT("artist %s", metadata->artist);
+ TC_PRT("album %s", metadata->album);
+ TC_PRT("genre %s", metadata->genre);
+ TC_PRT("total_tracks %d", metadata->total_tracks);
+ TC_PRT("number %d", metadata->number);
+ TC_PRT("duration %d", metadata->duration);
+}
+
+void panu_conn_state_changed(int result, bool connected,
+ const char *remote_address,
+ bt_panu_service_type_e type,
+ void *user_data)
+{
+ TC_PRT("result [%s]", __bt_get_error_message(result));
+ TC_PRT("connected [%d]", connected);
+ TC_PRT("address [%s]", remote_address);
+ TC_PRT("type [%d]", type);
+
+}
+
+void __bt_hid_host_connection_state_changed_cb(int result,
+ bool connected, const char *remote_address, void *user_data)
+{
+ TC_PRT("__bt_hid_host_connection_state_changed_cb: called");
+ TC_PRT("result: %s", __bt_get_error_message(result));
+}
+
+#ifdef TIZEN_WEARABLE
+void __bt_hf_sco_state_changed_cb(int result, bool opened, void *user_data)
+{
+ TC_PRT("opened [%s]", opened ? "YES" : "NO");
+}
+
+void __bt_hf_set_call_handling_event_cb(bt_hf_call_handling_event_e event,
+ char *phone_number, void *user_data)
+{
+ switch(event) {
+ case BT_HF_CALL_HANDLING_EVENT_ANSWER:
+ TC_PRT("[call_handling_event_cb] event [ANSWER]");
break;
- case 5:
- ret = bt_adapter_disable();
- if (ret < BT_ERROR_NONE)
- TC_PRT("failed with [0x%04x]", ret);
+ case BT_HF_CALL_HANDLING_EVENT_RELEASE:
+ TC_PRT("[call_handling_event_cb] event [RELEASE]");
break;
- case 6:
- ret = bt_adapter_start_device_discovery();
- if (ret < BT_ERROR_NONE)
- TC_PRT("failed with [0x%04x]", ret);
+ case BT_HF_CALL_HANDLING_EVENT_REJECT:
+ TC_PRT("[call_handling_event_cb] event [REJECT]");
break;
- case 7:
- ret = bt_adapter_stop_device_discovery();
- if (ret < BT_ERROR_NONE)
- TC_PRT("failed with [0x%04x]", ret);
+ case BT_HF_CALL_HANDLING_EVENT_RING:
+ TC_PRT("[call_handling_event_cb] event [RING]");
break;
- case 8: {
- bool is_discovering = FALSE;
- ret = bt_adapter_is_discovering(&is_discovering);
- if (ret < BT_ERROR_NONE)
- TC_PRT("failed with [0x%04x]", ret);
- else
- TC_PRT("is_discovering: %d", is_discovering);
+ case BT_HF_CALL_HANDLING_EVENT_CALL_STARTED:
+ TC_PRT("[call_handling_event_cb] event [CALL_STARTED]");
+ break;
+ case BT_HF_CALL_HANDLING_EVENT_CALL_ENDED:
+ TC_PRT("[call_handling_event_cb] event [CALL_ENDED]");
+ break;
+ case BT_HF_CALL_HANDLING_EVENT_VOICE_RECOGNITION_ENABLED:
+ TC_PRT("[call_handling_event_cb] event [VOICE_RECOGNITION_ENABLED]");
+ break;
+ case BT_HF_CALL_HANDLING_EVENT_VOICE_RECOGNITION_DISABLED:
+ TC_PRT("[call_handling_event_cb] event [VOICE_RECOGNITION_DISABLED]");
+ break;
+ case BT_HF_CALL_HANDLING_EVENT_WAITING:
+ TC_PRT("[call_handling_event_cb] event [WAITING]");
+ break;
+ case BT_HF_CALL_HANDLING_EVENT_HELD:
+ TC_PRT("[call_handling_event_cb] event [HELD]");
+ break;
+ case BT_HF_CALL_HANDLING_EVENT_UNHELD:
+ TC_PRT("[call_handling_event_cb] event [UNHELD]");
+ break;
+ case BT_HF_CALL_HANDLING_EVENT_SWAPPED:
+ TC_PRT("[call_handling_event_cb] event [SWAPPED]");
+ break;
+ default:
+ TC_PRT("[call_handling_event_cb] event [UNKNOWN]");
+ }
+
+ TC_PRT("[call_handling_event_cb] phone_number [%s]", phone_number);
+}
+
+void __bt_hf_call_status_updated_event_cb(GSList *call_info_list, void *user_data)
+{
+ TC_PRT("[call_status_updated_event_cb]");
+ for (; call_info_list; call_info_list = g_slist_next(call_info_list)) {
+ bt_hf_call_status_info_s *call_info = call_info_list->data;
+ TC_PRT(" > Call info [No:%s, Dir:%d, Stat:%d, Mpt:%d, Idx:%d]",
+ call_info->number, call_info->direction, call_info->status, call_info->multi_party, call_info->index);
+ }
+
+ bt_hf_free_call_status_info_list(call_info_list);
+}
+
+void __bt_hf_speaker_gain_changed_cb(int gain, void *user_data)
+{
+ TC_PRT("__bt_hf_speaker_gain_changed_cb");
+ TC_PRT("Gain= %d", gain);
+}
+
+void __bt_pbap_enabled_cb(const char *remote_address,
+ int pbap_enabled, void *user_data)
+{
+ TC_PRT("__bt_pbap_enabled_cb");
+ TC_PRT("Remote Device: %s", remote_address);
+ TC_PRT("Connected Status: %d", pbap_enabled);
+}
+
+void __bt_pbap_phonebook_size_cb(const char *remote_address,
+ int size, void *user_data)
+{
+ TC_PRT("__bt_pbap_phonebook_size_cb");
+ TC_PRT("Remote Device: %s", remote_address);
+ TC_PRT("Phonebook Size: %d", size);
+}
+
+void __bt_pbap_phonebook_pull_cb(const char *remote_address,
+ char *vcf_file, int status, void *user_data)
+{
+ TC_PRT("__bt_pbap_phonebook_pull_cb");
+ TC_PRT("Remote Device: %s", remote_address);
+ TC_PRT("Phonebook Download File: %s", vcf_file);
+ TC_PRT("Phonebook Download Status: %s", status? "Successful" : "Unsuccessful");
+}
+
+void __bt_pbap_vcard_list_cb(const char *remote_address,
+ char **vcards, int count, int status, void *user_data)
+{
+ TC_PRT("__bt_pbap_vcard_list_cb");
+ TC_PRT("Remote Device: %s", remote_address);
+ TC_PRT("vCard List: %s", vcards[0]);
+ TC_PRT("vCard Count: %d", count);
+ TC_PRT("Listing Status: %s", status? "Successful" : "Unsuccessful");
+}
+#endif
+
+void __bt_repeat_test_adapter_state_changed_cb(int result, bt_adapter_state_e adapter_state, void *user_data)
+{
+ unsigned int delay = *(unsigned int*)user_data;
+
+ TC_PRT("__bt_repeat_test_adapter_state_changed_cb");
+ TC_PRT("result: %s", __bt_get_error_message(result));
+ TC_PRT("state: %s, delay(%dsec)",
+ (adapter_state == BT_ADAPTER_ENABLED)?
+ "ENABLED" : "DISABLED", delay);
+
+ if (result != BT_ERROR_NONE) {
+ char *argv[] = {NULL};
+
+ TC_PRT("make dump\n");
+ execv("all_log_dump.sh", argv);
+
+ bt_onoff_cnt_fail++;
+ } else {
+ bt_onoff_cnt_success++;
+
+ if (delay)
+ sleep(delay);
+ }
+
+ if (adapter_state == BT_ADAPTER_DISABLED)
+ bt_adapter_enable();
+ else
+ bt_adapter_disable();
+
+ bt_onoff_cnt++;
+ __bt_repeat_test_onoff_count_time_summary();
+}
+
+static void __bt_initialize_all(void)
+{
+ int ret;
+ TC_PRT("Initialize and set callback functions");
+
+ ret = bt_initialize();
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ ret = bt_adapter_set_state_changed_cb(__bt_adapter_state_changed_cb, NULL);
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ ret = bt_adapter_set_connectable_changed_cb(__bt_adapter_connectable_changed_cb, NULL);
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ ret = bt_device_set_bond_created_cb(__bt_device_bond_created_cb, NULL);
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ ret = bt_device_set_bond_destroyed_cb(__bt_device_bond_destroyed_cb, NULL);
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ ret = bt_gatt_set_connection_state_changed_cb(__bt_gatt_connection_state_changed_cb, NULL);
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ ret = bt_adapter_set_device_discovery_state_changed_cb(__bt_adapter_device_discovery_state_changed_cb, NULL);
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+#ifndef TIZEN_WEARABLE
+ ret = bt_adapter_le_set_device_discovery_state_changed_cb(__bt_adapter_le_device_discovery_state_changed_cb, NULL);
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+#endif
+ ret = bt_socket_set_connection_state_changed_cb(__bt_socket_connection_state_changed_cb, NULL);
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+
+ return;
+}
+
+int test_set_params(int test_id, char *param)
+{
+ static int param_index = 0;
+ const char *param_type = NULL;
+
+ switch (current_tc_table) {
+ case BT_UNIT_TEST_TABLE_ADAPTER: {
+ switch (test_id) {
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_SET_CONNECTABLE: {
+ if (param_index == 0) {
+ g_test_param.param_count = 1;
+ g_test_param.params = g_malloc0(sizeof(char*) * g_test_param.param_count);
+ param_type = BT_UNIT_TEST_PARAM_TYPE_BOOL;
+ }
+
+ if (param_index > 0) {
+ g_test_param.params[param_index - 1] = g_malloc0(strlen(param) + 1);
+ strcpy(g_test_param.params[param_index - 1], param);
+ }
+
+ if (param_index == g_test_param.param_count) {
+ need_to_set_params = false;
+ test_input_callback((void *)test_id);
+ param_index = 0;
+ return 0;
+ }
+
+ TC_PRT("Input param(%d) type:%s", param_index + 1, param_type);
+ param_index++;
+
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_SET_MANUFACTURER_DATA:
+ {
+ if (param_index == 0) {
+ g_test_param.param_count = 1;
+ g_test_param.params = g_malloc0(sizeof(char*) * g_test_param.param_count);
+ param_type = BT_UNIT_TEST_PARAM_TYPE_BYTE_ARRAY;
+ }
+
+ if (param_index > 0) {
+ g_test_param.params[param_index - 1] = g_malloc0(strlen(param) + 1);
+ strcpy(g_test_param.params[param_index - 1], param);
+ }
+
+ if (param_index == g_test_param.param_count) {
+ need_to_set_params = false;
+ test_input_callback((void *)test_id);
+ param_index = 0;
+ return 0;
+ }
+
+ TC_PRT("Input param(%d) type:%s", param_index + 1, param_type);
+ param_index++;
+
+ break;
+ }
+
+ default:
+ TC_PRT("There is no param to set\n");
+ need_to_set_params = false;
+ break;
+ }
break;
}
- case 9: {
- char *address;
- bt_device_info_s *device_info = NULL;
- address = g_strdup("00:19:0E:01:61:17");
+ case BT_UNIT_TEST_TABLE_ADAPTER_LE: {
+ switch (test_id) {
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_LE_SET_SCAN_MODE:
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_LE_ADD_ADVERTISING_DATA:
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_LE_SET_ADVERTISING_MODE:
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_LE_SET_ADVERTISING_FILTER_POLICY:
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_LE_SET_ADVERTISING_CONNECTABLE:
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_LE_STOP_ADVERTISING: {
+ if (param_index == 0) {
+ g_test_param.param_count = 1;
+ g_test_param.params = g_malloc0(sizeof(char*) * g_test_param.param_count);
+ }
+
+ if (param_index > 0) {
+ g_test_param.params[param_index - 1] = g_malloc0(strlen(param) + 1);
+ strcpy(g_test_param.params[param_index - 1], param);
+ }
+
+ if (param_index == g_test_param.param_count) {
+ need_to_set_params = false;
+ test_input_callback((void *)test_id);
+ param_index = 0;
+ return 0;
+ }
+
+ switch (test_id) {
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_LE_SET_SCAN_MODE:
+ TC_PRT("Scan mode\n (0 : Balanced (5000/2000 ms), 1: Low Latency (5000/5000 ms), 2 : Low Energy (5000/500 ms)");
+ break;
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_LE_ADD_ADVERTISING_DATA:
+ TC_PRT("Select advertising data \n (0 : Service uuid, 1: Service solicitation 2 : Appearance & Tx power, 3 : All, 4 : ANCS");
+ TC_PRT("\t (Default scan response : Service Data &Local name & Manufacturer data)");
+ break;
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_LE_SET_ADVERTISING_MODE:
+ TC_PRT("Input mode \n (0 : Balanced(500 ms), 1 : Low Latency(150 ms), 2 : Low Energy (1000 ms))");
+ break;
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_LE_SET_ADVERTISING_FILTER_POLICY:
+ TC_PRT("Input filter_policy \n (0 : No use White List, 1 : Allow scan, 2 : Allow conneciton, 3 : Allow scan & conneciton)");
+ break;
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_LE_SET_ADVERTISING_CONNECTABLE:
+ TC_PRT("Input adv type \n (0 : Non-connectable (ADV_SCAN_IND), 1 : Connectable (ADV_IND) ");
+ break;
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_LE_STOP_ADVERTISING:
+ TC_PRT("Input adv slot id \n (Default is 0, Maximum is 2) ");
+ break;
+ }
+ param_index++;
+
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_LE_ENABLE_PRIVACY: {
+ if (param_index == 0) {
+ g_test_param.param_count = 1;
+ g_test_param.params = g_malloc0(sizeof(char*) * g_test_param.param_count);
+ param_type = BT_UNIT_TEST_PARAM_TYPE_BOOL;
+ }
+
+ if (param_index > 0) {
+ g_test_param.params[param_index - 1] = g_malloc0(strlen(param) + 1);
+ strcpy(g_test_param.params[param_index - 1], param);
+ }
+
+ if (param_index == g_test_param.param_count) {
+ need_to_set_params = false;
+ test_input_callback((void *)test_id);
+ param_index = 0;
+ return 0;
+ }
- ret = bt_adapter_get_bonded_device_info((const char *)address,
- &device_info);
- if (ret < BT_ERROR_NONE)
- TC_PRT("failed with [0x%04x]", ret);
+ TC_PRT("Input param(%d) type:%s", param_index + 1, param_type);
+ param_index++;
- g_free(address);
+ break;
+ }
- if (device_info) {
- TC_PRT("address: %s", device_info->remote_address);
- TC_PRT("name: %s", device_info->remote_name);
+ default:
+ TC_PRT("There is no param to set\n");
+ need_to_set_params = false;
+ break;
}
- bt_adapter_free_device_info(device_info);
break;
}
- case 10: {
- bool used = FALSE;
- ret = bt_adapter_is_service_used(opp_uuid, &used);
- if (ret < BT_ERROR_NONE)
- TC_PRT("failed with [0x%04x]", ret);
+ case BT_UNIT_TEST_TABLE_DEVICE: {
+ switch (test_id) {
+ case BT_UNIT_TEST_FUNCTION_DEVICE_IS_PROFILE_CONNECTED: {
+ if (param_index == 0) {
+ g_test_param.param_count = 1;
+ g_test_param.params = g_malloc0(sizeof(char*) * g_test_param.param_count);
+ param_type = BT_UNIT_TEST_PARAM_TYPE_INT;
+ }
+
+ if (param_index > 0) {
+ g_test_param.params[param_index - 1] = g_malloc0(strlen(param) + 1);
+ strcpy(g_test_param.params[param_index - 1], param);
+ }
+
+ if (param_index == g_test_param.param_count) {
+ need_to_set_params = false;
+ test_input_callback((void *)test_id);
+ param_index = 0;
+ return 0;
+ }
+
+ TC_PRT("Input param(%d) type:%s", param_index + 1, param_type);
+ param_index++;
+
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_DEVICE_CREATE_BOND_BY_TYPE : {
+ if (param_index == 0) {
+ g_test_param.param_count = 1;
+ g_test_param.params = g_malloc0(sizeof(char*) * g_test_param.param_count);
+ param_type = BT_UNIT_TEST_PARAM_TYPE_INT;
+ }
+
+ if (param_index > 0) {
+ g_test_param.params[param_index - 1] = g_malloc0(strlen(param) + 1);
+ strcpy(g_test_param.params[param_index - 1], param);
+ }
+
+ if (param_index == g_test_param.param_count) {
+ need_to_set_params = false;
+ test_input_callback((void *)test_id);
+ param_index = 0;
+ return 0;
+ }
+
+ TC_PRT("Input param(%d) type:%s", param_index + 1, param_type);
+ param_index++;
+
+ break;
+ }
+
+ default:
+ TC_PRT("There is no param to set\n");
+ need_to_set_params = false;
+ break;
+ }
- TC_PRT("used: %d", used);
break;
}
- case 11:
- ret = bt_adapter_set_device_discovery_state_changed_cb(__bt_adapter_device_discovery_state_changed_cb, NULL);
- if (ret < BT_ERROR_NONE)
- TC_PRT("failed with [0x%04x]", ret);
+ case BT_UNIT_TEST_TABLE_SOCKET: {
+ switch (test_id) {
+ case BT_UNIT_TEST_FUNCTION_SOCKET_SEND_DATA: {
+ if (param_index == 0) {
+ g_test_param.param_count = 1;
+ g_test_param.params = g_malloc0(sizeof(char*) * g_test_param.param_count);
+ param_type = BT_UNIT_TEST_PARAM_TYPE_STRING;
+ }
+
+ if (param_index > 0) {
+ g_test_param.params[param_index - 1] = g_malloc0(strlen(param) + 1);
+ strcpy(g_test_param.params[param_index - 1], param);
+ }
+
+ if (param_index == g_test_param.param_count) {
+ need_to_set_params = false;
+ test_input_callback((void *)test_id);
+ param_index = 0;
+ return 0;
+ }
+
+ TC_PRT("Input param(%d) type:%s", param_index + 1, param_type);
+ param_index++;
+
+ break;
+ }
+ default:
+ TC_PRT("There is no param to set\n");
+ need_to_set_params = false;
+ break;
+ }
+
break;
- case 12:
- ret = bt_adapter_unset_device_discovery_state_changed_cb();
- if (ret < BT_ERROR_NONE)
- TC_PRT("failed with [0x%04x]", ret);
+ }
+ case BT_UNIT_TEST_TABLE_OPP: {
+ switch (test_id) {
+ default:
+ TC_PRT("There is no param to set\n");
+ need_to_set_params = false;
+ break;
+ }
+
break;
+ }
+ case BT_UNIT_TEST_TABLE_AUDIO: {
+ switch (test_id) {
+ case BT_UNIT_TEST_FUNCTION_AUDIO_CONNECT: {
+ if (param_index == 0) {
+ g_test_param.param_count = 1;
+ g_test_param.params = g_malloc0(sizeof(char*) * g_test_param.param_count);
+ param_type = BT_UNIT_TEST_PARAM_TYPE_INT;
+ }
- /* Socket functions */
- case 50: {
- int socket_fd = 0;
+ if (param_index > 0) {
+ g_test_param.params[param_index - 1] = g_malloc0(strlen(param) + 1);
+ strcpy(g_test_param.params[param_index - 1], param);
+ }
- ret = bt_socket_create_rfcomm(spp_uuid, &socket_fd);
- if (ret < BT_ERROR_NONE) {
- TC_PRT("failed with [0x%04x]", ret);
- } else {
- TC_PRT("socket_fd: %d", socket_fd);
- server_fd = socket_fd;
+ if (param_index == g_test_param.param_count) {
+ need_to_set_params = false;
+ test_input_callback((void *)test_id);
+ param_index = 0;
+ return 0;
+ }
+
+ TC_PRT("Input param(%d) type:%s", param_index + 1, param_type);
+ param_index++;
+
+ break;
}
+ case BT_UNIT_TEST_FUNCTION_AUDIO_DISCONNECT: {
+ if (param_index == 0) {
+ g_test_param.param_count = 1;
+ g_test_param.params = g_malloc0(sizeof(char*) * g_test_param.param_count);
+ param_type = BT_UNIT_TEST_PARAM_TYPE_INT;
+ }
+
+ if (param_index > 0) {
+ g_test_param.params[param_index - 1] = g_malloc0(strlen(param) + 1);
+ strcpy(g_test_param.params[param_index - 1], param);
+ }
+
+ if (param_index == g_test_param.param_count) {
+ need_to_set_params = false;
+ test_input_callback((void *)test_id);
+ param_index = 0;
+ return 0;
+ }
+
+ TC_PRT("Input param(%d) type:%s", param_index + 1, param_type);
+ param_index++;
+
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_AG_CALL_EVENT_DIALING: {
+ if (param_index == 0) {
+ g_test_param.param_count = 1;
+ g_test_param.params = g_malloc0(sizeof(char*) * g_test_param.param_count);
+ param_type = BT_UNIT_TEST_PARAM_TYPE_STRING;
+ }
+
+ if (param_index > 0) {
+ g_test_param.params[param_index - 1] = g_malloc0(strlen(param) + 1);
+ strcpy(g_test_param.params[param_index - 1], param);
+ }
+
+ if (param_index == g_test_param.param_count) {
+ need_to_set_params = false;
+ test_input_callback((void *)test_id);
+ param_index = 0;
+ return 0;
+ }
+
+ TC_PRT("Input param(%d) type:%s", param_index + 1, param_type);
+ param_index++;
+
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_AG_CALL_EVENT_INCOMING: {
+ if (param_index == 0) {
+ g_test_param.param_count = 1;
+ g_test_param.params = g_malloc0(sizeof(char*) * g_test_param.param_count);
+ param_type = BT_UNIT_TEST_PARAM_TYPE_STRING;
+ }
+
+ if (param_index > 0) {
+ g_test_param.params[param_index - 1] = g_malloc0(strlen(param) + 1);
+ strcpy(g_test_param.params[param_index - 1], param);
+ }
+
+ if (param_index == g_test_param.param_count) {
+ need_to_set_params = false;
+ test_input_callback((void *)test_id);
+ param_index = 0;
+ return 0;
+ }
+
+ TC_PRT("Input param(%d) type:%s", param_index + 1, param_type);
+ param_index++;
+
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_CALL_LIST_ADD: {
+ if (param_index == 0) {
+ g_test_param.param_count = 1;
+ g_test_param.params = g_malloc0(sizeof(char*) * g_test_param.param_count);
+ param_type = BT_UNIT_TEST_PARAM_TYPE_STRING;
+ }
+
+ if (param_index > 0) {
+ g_test_param.params[param_index - 1] = g_malloc0(strlen(param) + 1);
+ strcpy(g_test_param.params[param_index - 1], param);
+ }
+
+ if (param_index == g_test_param.param_count) {
+ need_to_set_params = false;
+ test_input_callback((void *)test_id);
+ param_index = 0;
+ return 0;
+ }
+
+ TC_PRT("Input param(%d) type:%s", param_index + 1, param_type);
+ param_index++;
+
+ break;
+ }
+
+ default:
+ TC_PRT("There is no param to set\n");
+ need_to_set_params = false;
+ break;
+ }
+
break;
}
- case 51:
- ret = bt_socket_destroy_rfcomm(server_fd);
- if (ret < BT_ERROR_NONE)
- TC_PRT("failed with [0x%04x]", ret);
+ case BT_UNIT_TEST_TABLE_PAN: {
+ switch (test_id) {
+ default:
+ TC_PRT("There is no param to set\n");
+ need_to_set_params = false;
+ break;
+ }
+
break;
- case 52:
- ret = bt_socket_listen_and_accept_rfcomm(server_fd, 1);
- if (ret < BT_ERROR_NONE)
- TC_PRT("failed with [0x%04x]", ret);
+ }
+ case BT_UNIT_TEST_TABLE_GATT: {
+ switch (test_id) {
+ case BT_UNIT_TEST_FUNCTION_GATT_CONNECT: {
+ if (param_index == 0) {
+ g_test_param.param_count = 1;
+ g_test_param.params = g_malloc0(sizeof(char*) * g_test_param.param_count);
+ param_type = BT_UNIT_TEST_PARAM_TYPE_BOOL;
+ }
+
+ if (param_index > 0) {
+ g_test_param.params[param_index - 1] = g_malloc0(strlen(param) + 1);
+ strcpy(g_test_param.params[param_index - 1], param);
+ }
+
+ if (param_index == g_test_param.param_count) {
+ need_to_set_params = false;
+ test_input_callback((void *)test_id);
+ param_index = 0;
+ return 0;
+ }
+
+ TC_PRT("Input param(%d) type:%s", param_index + 1, param_type);
+ param_index++;
+
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_GATT_CLIENT_READ_VALUE: {
+ if (param_index == 0) {
+ g_test_param.param_count = 3;
+ g_test_param.params = g_malloc0(sizeof(char *) * g_test_param.param_count);
+ }
+
+ if (param_index > 0) {
+ int len = strlen(param);
+ g_test_param.params[param_index - 1] = g_malloc0(len + 1);
+ /* Remove new line character */
+ param[len - 1] = '\0';
+ strcpy(g_test_param.params[param_index - 1], param);
+ }
+
+ if (param_index == g_test_param.param_count) {
+ need_to_set_params = false;
+ test_input_callback((void *)test_id);
+ param_index = 0;
+ return 0;
+ }
+
+ switch (param_index) {
+ case 0:
+ TC_PRT("Input Service UUID");
+ break;
+ case 1:
+ TC_PRT("Input Characteristic UUID");
+ break;
+ case 2:
+ TC_PRT("Input Descriptor UUID or nothing");
+ break;
+ }
+
+ param_index++;
+
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_GATT_CLIENT_WRITE_VALUE: {
+ if (param_index == 0) {
+ g_test_param.param_count = 5;
+ g_test_param.params = g_malloc0(sizeof(char *) * g_test_param.param_count);
+ }
+
+ if (param_index > 0) {
+ int len = strlen(param);
+ g_test_param.params[param_index - 1] = g_malloc0(len + 1);
+ /* Remove new line character */
+ param[len - 1] = '\0';
+ strcpy(g_test_param.params[param_index - 1], param);
+ }
+
+ if (param_index == g_test_param.param_count) {
+ need_to_set_params = false;
+ test_input_callback((void *)test_id);
+ param_index = 0;
+ return 0;
+ }
+
+ switch (param_index) {
+ case 0:
+ TC_PRT("Input Service UUID");
+ break;
+ case 1:
+ TC_PRT("Input Characteristic UUID");
+ break;
+ case 2:
+ TC_PRT("Input Descriptor UUID or nothing");
+ break;
+ case 3:
+ TC_PRT("Input Value Type (avail. : uint8, uint16, uint32, int8, int16, int32, str)");
+ break;
+ case 4:
+ TC_PRT("Input Value");
+ break;
+ }
+
+ param_index++;
+
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_GATT_CLIENT_SET_CHAR_VALUE_CHANGED_CB: {
+ if (param_index == 0) {
+ g_test_param.param_count = 2;
+ g_test_param.params = g_malloc0(sizeof(char *) * g_test_param.param_count);
+ }
+
+ if (param_index > 0) {
+ int len = strlen(param);
+ g_test_param.params[param_index - 1] = g_malloc0(len + 1);
+ /* Remove new line character */
+ param[len - 1] = '\0';
+ strcpy(g_test_param.params[param_index - 1], param);
+ }
+
+ if (param_index == g_test_param.param_count) {
+ need_to_set_params = false;
+ test_input_callback((void *)test_id);
+ param_index = 0;
+ return 0;
+ }
+
+ switch (param_index) {
+ case 0:
+ TC_PRT("Input Service UUID");
+ break;
+ case 1:
+ TC_PRT("Input Characteristic UUID");
+ break;
+ }
+
+ param_index++;
+
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_GATT_CLIENT_UNSET_CHAR_VALUE_CHANGED_CB: {
+ if (param_index == 0) {
+ g_test_param.param_count = 2;
+ g_test_param.params = g_malloc0(sizeof(char *) * g_test_param.param_count);
+ }
+
+ if (param_index > 0) {
+ int len = strlen(param);
+ g_test_param.params[param_index - 1] = g_malloc0(len + 1);
+ /* Remove new line character */
+ param[len - 1] = '\0';
+ strcpy(g_test_param.params[param_index - 1], param);
+ }
+
+ if (param_index == g_test_param.param_count) {
+ need_to_set_params = false;
+ test_input_callback((void *)test_id);
+ param_index = 0;
+ return 0;
+ }
+
+ switch (param_index) {
+ case 0:
+ TC_PRT("Input Service UUID");
+ break;
+ case 1:
+ TC_PRT("Input Characteristic UUID");
+ break;
+ }
+
+ param_index++;
+
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_ANCS_POSITIVE_ACTION:
+ case BT_UNIT_TEST_FUNCTION_ANCS_NEGATIVE_ACTION:
+ case BT_UNIT_TEST_FUNCTION_ANCS_GET_NOTI_ATTR: {
+ if (param_index == 0) {
+ g_test_param.param_count = 1;
+ g_test_param.params = g_malloc0(sizeof(char *) * g_test_param.param_count);
+ param_type = BT_UNIT_TEST_PARAM_TYPE_STRING;
+ }
+
+ if (param_index > 0) {
+ int len = strlen(param);
+ g_test_param.params[param_index - 1] = g_malloc0(len + 1);
+ /* Remove new line character */
+ param[len - 1] = '\0';
+ strcpy(g_test_param.params[param_index - 1], param);
+ }
+
+ if (param_index == g_test_param.param_count) {
+ need_to_set_params = false;
+ test_input_callback((void *)test_id);
+ param_index = 0;
+ return 0;
+ }
+
+ TC_PRT("Input param(%d) type:%s", param_index + 1, param_type);
+ param_index++;
+ break;
+ }
+
+ default:
+ TC_PRT("There is no param to set\n");
+ need_to_set_params = false;
+ break;
+ }
+
break;
- case 53:
- ret = bt_socket_listen(server_fd, 1);
- if (ret < BT_ERROR_NONE)
- TC_PRT("failed with [0x%04x]", ret);
+ }
+ case BT_UNIT_TEST_TABLE_AVRCP: {
+ switch (test_id) {
+ default:
+ TC_PRT("There is no param to set\n");
+ need_to_set_params = false;
+ break;
+ }
+
break;
- case 54: {
- int socket_fd = 0;
+ }
+ case BT_UNIT_TEST_TABLE_HID: {
+ switch (test_id) {
+ default:
+ TC_PRT("There is no param to set\n");
+ need_to_set_params = false;
+ break;
+ }
- ret = bt_socket_accept(server_fd, &socket_fd);
- if (ret < BT_ERROR_NONE) {
- TC_PRT("failed with [0x%04x]", ret);
- } else {
- TC_PRT("socket_fd: %d", socket_fd);
- client_fd = socket_fd;
+ break;
+ }
+#ifdef TIZEN_WEARABLE
+ case BT_UNIT_TEST_TABLE_HF: {
+ switch (test_id) {
+ default:
+ TC_PRT("There is no param to set\n");
+ need_to_set_params = false;
+ break;
}
+
break;
}
- case 55:
- ret = bt_socket_reject(server_fd);
- if (ret < BT_ERROR_NONE) {
- TC_PRT("failed with [0x%04x]", ret);
+ case BT_UNIT_TEST_TABLE_PBAP_CLIENT: {
+ switch (test_id) {
+ default:
+ TC_PRT("There is no param to set\n");
+ need_to_set_params = false;
+ break;
}
+
break;
- case 56: {
- char *address;
+ }
+#endif
+ default:
+ TC_PRT("There is no param to set\n");
+ need_to_set_params = false;
+ break;
+ }
- address = g_strdup("00:02:48:F4:3E:D2");
+ return 0;
+}
- ret = bt_socket_connect_rfcomm(address, spp_uuid);
- if (ret < BT_ERROR_NONE) {
- TC_PRT("failed with [0x%04x]", ret);
+int test_input_callback(void *data)
+{
+ int ret = 0;
+ int test_id = (int)data;
+
+ switch (current_tc_table) {
+ case BT_UNIT_TEST_TABLE_MAIN: {
+ switch (test_id) {
+ case 0x00ff:
+ TC_PRT("Finished");
+ g_main_loop_quit(main_loop);
+ break;
+
+ case BT_UNIT_TEST_FUNCTION_INITIALIZE:
+ ret = bt_initialize();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_DEINITIALIZE:
+ ret = bt_deinitialize();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ default:
+ break;
}
- g_free(address);
break;
}
- case 57:
- ret = bt_socket_disconnect_rfcomm(client_fd);
- if (ret < BT_ERROR_NONE) {
- TC_PRT("failed with [0x%04x]", ret);
+ case BT_UNIT_TEST_TABLE_ADAPTER: {
+ switch (test_id) {
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_GET_STATE: {
+ bt_adapter_state_e state = BT_ADAPTER_DISABLED;
+
+ ret = bt_adapter_get_state(&state);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ TC_PRT("state: %d", state);
+ break;
}
- break;
- case 58:
- ret = bt_socket_send_data(client_fd, "Sending test\0", 20);
- if (ret < BT_ERROR_NONE) {
- TC_PRT("failed with [0x%04x]", ret);
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_ENABLE:
+ ret = bt_adapter_enable();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_DISABLE:
+ ret = bt_adapter_disable();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_RECOVER:
+ ret = bt_adapter_recover();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_START_DEVICE_DISCOVERY:
+ ret = bt_adapter_start_device_discovery();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_STOP_DEVICE_DISCOVERY:
+ ret = bt_adapter_stop_device_discovery();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_IS_DISCOVERING: {
+ bool is_discovering = FALSE;
+ ret = bt_adapter_is_discovering(&is_discovering);
+ if (ret < BT_ERROR_NONE)
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ else
+ TC_PRT("is_discovering: %d", is_discovering);
+
+ break;
}
- break;
- case 59:
- ret = bt_socket_set_data_received_cb(__bt_socket_data_received_cb, NULL);
- if (ret < BT_ERROR_NONE) {
- TC_PRT("failed with [0x%04x]", ret);
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_FOREACH_BONDED_DEVICE: {
+ ret = bt_adapter_foreach_bonded_device(__bt_adapter_bonded_device_cb, NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_GET_BONDED_DEVICE_INFO: {
+ bt_device_info_s *device_info = NULL;
+
+ ret = bt_adapter_get_bonded_device_info(remote_addr,
+ &device_info);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+
+ if (device_info) {
+ TC_PRT("address: %s", device_info->remote_address);
+ TC_PRT("name: %s", device_info->remote_name);
+ }
+
+ bt_adapter_free_device_info(device_info);
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_IS_SERVICE_USED: {
+ bool used = FALSE;
+
+ ret = bt_adapter_is_service_used(opp_uuid, &used);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ TC_PRT("used: %d", used);
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_GET_VISIBILITY: {
+ bt_adapter_visibility_mode_e visibility_mode = BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE;
+ int time = 0;
+
+ ret = bt_adapter_get_visibility(&visibility_mode, &time);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ TC_PRT("mode: %d", visibility_mode);
+ TC_PRT("time: %d", time);
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_SET_DEVICE_DISCOVERY_STATE_CHANGED_CB:
+ ret = bt_adapter_set_device_discovery_state_changed_cb(__bt_adapter_device_discovery_state_changed_cb, NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_UNSET_DEVICE_DISCOVERY_STATE_CHANGED_CB:
+ ret = bt_adapter_unset_device_discovery_state_changed_cb();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_GET_LOCAL_OOB_DATA: {
+ ret = bt_adapter_get_local_oob_data(&hash, &randomizer, &hash_len, &rand_len);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ } else {
+ TC_PRT("hash = [%s]", hash);
+ TC_PRT("randomizer = [%s]", randomizer);
+ }
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_SET_LOCAL_OOB_DATA: {
+ ret = bt_adapter_set_remote_oob_data(remote_addr, hash, randomizer, hash_len, rand_len);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_REMOVE_REMOTE_OOB_DATA: {
+ ret = bt_adapter_remove_remote_oob_data(remote_addr);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_SET_VISIBILITY_MODE_CHANGED_CB:
+ ret = bt_adapter_set_visibility_mode_changed_cb(__bt_adapter_device_visibility_mode_changed_cb, NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_UNSET_VISIBILITY_MODE_CHANGED_CB:
+ ret = bt_adapter_unset_visibility_mode_changed_cb();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_SET_VISIBILITY_DURATION_CHANGED_CB:
+ ret = bt_adapter_set_visibility_duration_changed_cb(
+ __bt_adapter_device_visibility_duration_changed_cb, NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_UNSET_VISIBILITY_DURATION_CHANGED_CB:
+ ret = bt_adapter_unset_visibility_duration_changed_cb();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_SET_CONNECTABLE_CHANGED_CB: {
+ ret = bt_adapter_set_connectable_changed_cb(__bt_adapter_connectable_changed_cb, NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
}
+
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_UNSET_CONNECTABLE_CHANGED_CB: {
+ ret = bt_adapter_unset_connectable_changed_cb();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_GET_CONNECTABLE: {
+ bool connectable = false;
+
+ ret = bt_adapter_get_connectable(&connectable);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+
+ TC_PRT("%s", connectable ? "Connectable" : "Non-connectable");
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_SET_CONNECTABLE: {
+ bool connectable = false;
+
+ bt_adapter_get_connectable(&connectable);
+
+ if (g_test_param.param_count > 0) {
+ if (g_strrstr(g_test_param.params[0], "true"))
+ connectable = true;
+ else
+ connectable = false;
+
+ __bt_free_test_param(&g_test_param);
+ }
+
+ ret = bt_adapter_set_connectable(!connectable);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_GET_VERSION: {
+ char *version = NULL;
+
+ ret = bt_adapter_get_version(&version);
+ if (ret < BT_ERROR_NONE)
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ else {
+ TC_PRT("Version: [%s]",version);
+ g_free(version);
+ }
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_GET_LOCAL_INFO: {
+ char *chipset = NULL;
+ char *firmware = NULL;
+ char *stack_version = NULL;
+ char *profiles = NULL;
+
+ ret = bt_adapter_get_local_info(&chipset, &firmware, &stack_version, &profiles);
+ if (ret < BT_ERROR_NONE)
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ else {
+ TC_PRT("Local info: [%s, %s, %s]", chipset, firmware, stack_version);
+ TC_PRT("Local info(Profiles):\n%s", profiles);
+ g_free(chipset);
+ g_free(firmware);
+ g_free(stack_version);
+ g_free(profiles);
+ }
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_SET_MANUFACTURER_DATA_CHANGED_CB:
+ {
+ ret = bt_adapter_set_manufacturer_data_changed_cb(__bt_adapter_manufacturer_data_changed_cb, NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_UNSET_MANUFACTURER_DATA_CHANGED_CB:
+ ret = bt_adapter_unset_manufacturer_data_changed_cb();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_SET_MANUFACTURER_DATA:
+ {
+ char data[20] = {0x03, 0xFF, 0x01, 0x02};
+ int len = 4;
+ int i = 0;
+
+ if (g_test_param.param_count > 0) {
+ len = 0;
+ for (i = 0; i < (strlen(g_test_param.params[0]) - 1); i += 2) {
+ if (g_test_param.params[0][i] >= 'A' && g_test_param.params[0][i] <= 'F')
+ data[i/2] = (g_test_param.params[0][i] - 'A' + 0X0A) << 4;
+ else
+ data[i/2] = (g_test_param.params[0][i] - '0') << 4;
+
+ if (g_test_param.params[0][i+1] >= 'A' && g_test_param.params[0][i+1] <= 'F')
+ data[i/2] += (g_test_param.params[0][i+1] - 'A' + 0X0A);
+ else
+ data[i/2] += (g_test_param.params[0][i+1] - '0');
+ len++;
+ }
+
+ __bt_free_test_param(&g_test_param);
+ }
+
+ ret = bt_adapter_set_manufacturer_data(data, len);
+
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_ACTIVATE_FLAG_TO_SET_PARAMETERS:
+ need_to_set_params = true;
+ TC_PRT("Select the function again");
+ break;
+
+ default:
+ break;
+ }
+
break;
- case 60:
- ret = bt_socket_unset_data_received_cb();
- if (ret < BT_ERROR_NONE) {
- TC_PRT("failed with [0x%04x]", ret);
+ }
+
+ case BT_UNIT_TEST_TABLE_ADAPTER_LE: {
+ switch (test_id) {
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_LE_GET_STATE: {
+ bt_adapter_le_state_e le_state = BT_ADAPTER_LE_DISABLED;
+
+ ret = bt_adapter_le_get_state(&le_state);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ TC_PRT("le_state: %d", le_state);
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_LE_ENABLE: {
+ ret = bt_adapter_le_enable();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_LE_DISABLE: {
+ ret = bt_adapter_le_disable();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_LE_SET_SCAN_MODE: {
+ int mode = BT_ADAPTER_LE_SCAN_MODE_BALANCED;
+
+ if (g_test_param.param_count > 0) {
+ mode = atoi(g_test_param.params[0]);
+ __bt_free_test_param(&g_test_param);
+ }
+
+ ret = bt_adapter_le_set_scan_mode(mode);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_LE_START_SCAN:
+ ret = bt_adapter_le_start_scan(__bt_adapter_le_scan_result_cb, NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_LE_STOP_SCAN:
+ ret = bt_adapter_le_stop_scan();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+
+#ifndef TIZEN_WEARABLE
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_LE_START_DEVICE_DISCOVERY:
+ ret = bt_adapter_le_start_device_discovery();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_LE_STOP_DEVICE_DISCOVERY:
+ ret = bt_adapter_le_stop_device_discovery();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+#endif
+
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_LE_ADD_ADVERTISING_DATA: {
+ int adv_data_type = 3; // default all
+ int manufacturer_id = 117;
+ char *manufacture = NULL;
+ char manufacture_0[] = {0x0, 0x0, 0x0, 0x0};
+ char manufacture_1[] = {0x01, 0x01, 0x01, 0x01};
+ char manufacture_2[] = {0x02, 0x02, 0x02, 0x02};
+ char manufacture_3[] = {0x03, 0x03, 0x03, 0x03};
+ char service_data[] = {0x01, 0x02, 0x03};
+ const char *time_svc_uuid_16 = "1805";
+ const char *battery_svc_uuid_16 = "180f";
+ const char *heart_rate_svc_uuid_16 = "180d";
+ const char *lmmediate_alert_svc_uuid_16 = "1802";
+ const char *ancs_uuid_128 = "7905F431-B5CE-4E99-A40F-4B1E122D00D0";
+ int appearance = 192; // 192 is generic watch
+
+ advertiser = advertiser_list[advertiser_index];
+
+ if (advertiser == NULL) {
+ ret = bt_adapter_le_create_advertiser(&advertiser);
+ TC_PRT("created le advertiser(%d)", ret);
+ advertiser_list[advertiser_index] = advertiser;
+ } else {
+ ret = bt_adapter_le_clear_advertising_data(advertiser, BT_ADAPTER_LE_PACKET_ADVERTISING);
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("clear advertising data [0x%04x]", ret);
+ ret = bt_adapter_le_clear_advertising_data(advertiser, BT_ADAPTER_LE_PACKET_SCAN_RESPONSE);
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("clear scan response data [0x%04x]", ret);
+ }
+
+ if (g_test_param.param_count > 0) {
+ adv_data_type = atoi(g_test_param.params[0]);
+ __bt_free_test_param(&g_test_param);
+ }
+
+ switch (adv_data_type) {
+ case 0: // service uuid
+ ret = bt_adapter_le_add_advertising_service_uuid(advertiser,
+ BT_ADAPTER_LE_PACKET_ADVERTISING, time_svc_uuid_16);
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("add service_uuid [0x%04x]", ret);
+
+ ret = bt_adapter_le_add_advertising_service_uuid(advertiser,
+ BT_ADAPTER_LE_PACKET_ADVERTISING, battery_svc_uuid_16);
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("add service_uuid [0x%04x]", ret);
+
+ manufacture = manufacture_0;
+ break;
+
+ case 1: // service solicitation
+ ret = bt_adapter_le_add_advertising_service_solicitation_uuid(advertiser,
+ BT_ADAPTER_LE_PACKET_ADVERTISING, heart_rate_svc_uuid_16);
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("add service_solicitation_uuid [0x%04x]", ret);
+
+ ret = bt_adapter_le_add_advertising_service_solicitation_uuid(advertiser,
+ BT_ADAPTER_LE_PACKET_ADVERTISING, lmmediate_alert_svc_uuid_16);
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("add service_solicitation_uuid [0x%04x]", ret);
+
+ manufacture = manufacture_1;
+ break;
+
+ case 2: // appearance & tx power level
+ ret = bt_adapter_le_set_advertising_appearance(advertiser,
+ BT_ADAPTER_LE_PACKET_ADVERTISING, appearance);
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("add appearance data [0x%04x]", ret);
+
+ ret = bt_adapter_le_set_advertising_tx_power_level(advertiser,
+ BT_ADAPTER_LE_PACKET_ADVERTISING, true);
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("add appearance data [0x%04x]", ret);
+ manufacture = manufacture_2;
+ break;
+
+ case 3: // All
+ ret = bt_adapter_le_add_advertising_service_uuid(advertiser,
+ BT_ADAPTER_LE_PACKET_ADVERTISING, time_svc_uuid_16);
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("add service_uuid [0x%04x]", ret);
+
+ ret = bt_adapter_le_add_advertising_service_uuid(advertiser,
+ BT_ADAPTER_LE_PACKET_ADVERTISING, battery_svc_uuid_16);
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("add service_uuid [0x%04x]", ret);
+
+ ret = bt_adapter_le_add_advertising_service_solicitation_uuid(advertiser,
+ BT_ADAPTER_LE_PACKET_ADVERTISING, heart_rate_svc_uuid_16);
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("add service_solicitation_uuid [0x%04x]", ret);
+
+ ret = bt_adapter_le_add_advertising_service_solicitation_uuid(advertiser,
+ BT_ADAPTER_LE_PACKET_ADVERTISING, lmmediate_alert_svc_uuid_16);
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("add service_solicitation_uuid [0x%04x]", ret);
+
+ ret = bt_adapter_le_set_advertising_appearance(advertiser,
+ BT_ADAPTER_LE_PACKET_ADVERTISING, appearance);
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("add appearance data [0x%04x]", ret);
+
+ ret = bt_adapter_le_set_advertising_tx_power_level(advertiser,
+ BT_ADAPTER_LE_PACKET_ADVERTISING, true);
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("add tx_power_level [0x%04x]", ret);
+
+ manufacture = manufacture_3;
+ break;
+
+ case 4: // ANCS
+ ret = bt_adapter_le_add_advertising_service_solicitation_uuid(advertiser,
+ BT_ADAPTER_LE_PACKET_ADVERTISING, time_svc_uuid_16);
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("add service_solicitation_uuid [0x%04x]", ret);
+
+ ret = bt_adapter_le_add_advertising_service_solicitation_uuid(advertiser,
+ BT_ADAPTER_LE_PACKET_ADVERTISING, ancs_uuid_128);
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("add service_solicitation_uuid [0x%04x]", ret);
+
+ ret = bt_adapter_le_set_advertising_device_name(advertiser,
+ BT_ADAPTER_LE_PACKET_SCAN_RESPONSE, true);
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("set device name [0x%04x]", ret);
+
+ return 0;
+
+ default:
+ TC_PRT("No adv data");
+ break;
+ }
+
+ /* Default scsn response data */
+ ret = bt_adapter_le_add_advertising_service_data(advertiser,
+ BT_ADAPTER_LE_PACKET_SCAN_RESPONSE, time_svc_uuid_16,
+ service_data, sizeof(service_data));
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("add service_data [0x%04x]", ret);
+
+ ret = bt_adapter_le_set_advertising_device_name(advertiser,
+ BT_ADAPTER_LE_PACKET_SCAN_RESPONSE, true);
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("set device name [0x%04x]", ret);
+
+ ret = bt_adapter_le_add_advertising_manufacturer_data(advertiser,
+ BT_ADAPTER_LE_PACKET_SCAN_RESPONSE,
+ manufacturer_id,
+ manufacture, sizeof(manufacture_0));
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("add manufacturer data [0x%04x]", ret);
+
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_LE_SET_ADVERTISING_MODE: {
+ int mode = BT_ADAPTER_LE_ADVERTISING_MODE_BALANCED;
+
+ advertiser = advertiser_list[advertiser_index];
+
+ if (advertiser == NULL) {
+ ret = bt_adapter_le_create_advertiser(&advertiser);
+ TC_PRT("created le advertiser(%d)", ret);
+ advertiser_list[advertiser_index] = advertiser;
+ }
+
+ if (g_test_param.param_count > 0) {
+ mode = atoi(g_test_param.params[0]);
+ __bt_free_test_param(&g_test_param);
+ }
+
+ ret = bt_adapter_le_set_advertising_mode(advertiser, mode);
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("add scan response data [0x%04x]", ret);
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_LE_SET_ADVERTISING_FILTER_POLICY: {
+ int filter_policy = BT_ADAPTER_LE_ADVERTISING_FILTER_ALLOW_CONN_WL;
+
+ advertiser = advertiser_list[advertiser_index];
+
+ if (advertiser == NULL) {
+ ret = bt_adapter_le_create_advertiser(&advertiser);
+ TC_PRT("created le advertiser(%d)", ret);
+ advertiser_list[advertiser_index] = advertiser;
+ }
+
+ if (g_test_param.param_count > 0) {
+ filter_policy = atoi(g_test_param.params[0]);
+ __bt_free_test_param(&g_test_param);
+ }
+
+ ret = bt_adapter_le_set_advertising_filter_policy(advertiser, filter_policy);
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("add scan response data [0x%04x]", ret);
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_LE_SET_ADVERTISING_CONNECTABLE: {
+ int type = BT_ADAPTER_LE_ADVERTISING_CONNECTABLE;
+
+ advertiser = advertiser_list[advertiser_index];
+
+ if (advertiser == NULL) {
+ ret = bt_adapter_le_create_advertiser(&advertiser);
+ TC_PRT("created le advertiser(%d)", ret);
+ advertiser_list[advertiser_index] = advertiser;
+ }
+
+ if (g_test_param.param_count > 0) {
+ type = atoi(g_test_param.params[0]);
+ __bt_free_test_param(&g_test_param);
+ }
+
+ ret = bt_adapter_le_set_advertising_connectable(advertiser, type);
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("add scan response data [0x%04x]", ret);
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_LE_START_ADVERTISING_NEW: {
+ bt_adapter_le_advertising_state_changed_cb cb;
+
+ if (advertiser_index == 0) cb = __bt_adapter_le_advertising_state_changed_cb;
+ else if (advertiser_index == 1) cb = __bt_adapter_le_advertising_state_changed_cb_2;
+ else cb = __bt_adapter_le_advertising_state_changed_cb_3;
+
+ advertiser = advertiser_list[advertiser_index];
+
+ if (advertiser == NULL) {
+ ret = bt_adapter_le_create_advertiser(&advertiser);
+ TC_PRT("created le advertiser(%d)", ret);
+ advertiser_list[advertiser_index] = advertiser;
+ }
+ advertiser_index++;
+ advertiser_index %= 3;
+
+ TC_PRT("advertiser: %p", advertiser);
+
+ ret = bt_adapter_le_start_advertising_new(advertiser, cb, NULL);
+ if (ret < BT_ERROR_NONE)
+ TC_PRT("failed with [0x%04x]", ret);
+ break;
+ }
+#ifndef TIZEN_WEARABLE
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_LE_START_ADVERTISING: {
+ bt_adapter_le_advertising_state_changed_cb cb;
+ bt_adapter_le_advertising_params_s adv_params = { 0, };
+
+ if (advertiser_index == 0) cb = __bt_adapter_le_advertising_state_changed_cb;
+ else if (advertiser_index == 1) cb = __bt_adapter_le_advertising_state_changed_cb_2;
+ else cb = __bt_adapter_le_advertising_state_changed_cb_3;
+
+ advertiser = advertiser_list[advertiser_index];
+
+ adv_params.interval_min= 500;
+ adv_params.interval_max= 500;
+ adv_params.type = BT_ADAPTER_LE_ADVERTISING_CONNECTABLE;
+
+ if (advertiser == NULL) {
+ ret = bt_adapter_le_create_advertiser(&advertiser);
+ TC_PRT("created le advertiser(%d)", ret);
+ advertiser_list[advertiser_index] = advertiser;
+ }
+ advertiser_index++;
+ advertiser_index %= 3;
+
+ TC_PRT("type: %d", adv_params.type);
+
+ ret = bt_adapter_le_start_advertising(advertiser, &adv_params, cb, NULL);
+ if (ret < BT_ERROR_NONE)
+ TC_PRT("failed with [0x%04x]", ret);
+ break;
+ }
+#endif
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_LE_STOP_ADVERTISING: {
+ int slot_id = 0;
+
+ if (g_test_param.param_count > 0) {
+ slot_id = atoi(g_test_param.params[0]);
+ __bt_free_test_param(&g_test_param);
+ }
+
+ advertiser = advertiser_list[slot_id];
+
+ TC_PRT("advertiser: %p", advertiser);
+
+ ret = bt_adapter_le_stop_advertising(advertiser);
+
+ if(advertiser_index > 0)
+ advertiser_index--;
+ else
+ advertiser_index = 2;
+
+ advertiser_list[slot_id] = NULL;
+
+ if (ret < BT_ERROR_NONE)
+ TC_PRT("failed with [0x%04x]", ret);
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_LE_ADD_WHITE_LIST: {
+ ret = bt_adapter_le_add_white_list(remote_addr, BT_DEVICE_PUBLIC_ADDRESS);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_LE_REMOVE_WHITE_LIST: {
+ ret = bt_adapter_le_remove_white_list(remote_addr, BT_DEVICE_PUBLIC_ADDRESS);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+
+#ifndef TIZEN_WEARABLE
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_LE_CLEAR_WHITE_LIST: {
+ ret = bt_adapter_le_clear_white_list();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+#endif
+
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_LE_ENABLE_PRIVACY: {
+ static bool enable_privacy = false;
+
+ if (enable_privacy == false)
+ enable_privacy = true;
+ else
+ enable_privacy = false;
+
+ if (g_test_param.param_count > 0) {
+ if (g_strrstr(g_test_param.params[0], "true"))
+ enable_privacy = true;
+ else
+ enable_privacy = false;
+
+ __bt_free_test_param(&g_test_param);
+ }
+
+ ret = bt_adapter_le_enable_privacy(enable_privacy);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_LE_REGISTER_SCAN_FILTER_DEVICE_ADDRESS: {
+ bt_scan_filter_h scan_filter;
+
+ ret = bt_adapter_le_create_scan_filter(&scan_filter);
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("failed with [0x%04x]", ret);
+
+ ret = bt_adapter_le_scan_filter_set_device_address(scan_filter, remote_addr);
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("failed with [0x%04x]", ret);
+
+ ret = bt_adapter_le_register_scan_filter(scan_filter);
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("failed with [0x%04x]", ret);
+
+ ret = bt_adapter_le_destroy_scan_filter(scan_filter);
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("failed with [0x%04x]", ret);
+
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_LE_REGISTER_SCAN_FILTER_SERVICE_UUID: {
+ bt_scan_filter_h scan_filter;
+
+ ret = bt_adapter_le_create_scan_filter(&scan_filter);
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("failed with [0x%04x]", ret);
+
+ ret = bt_adapter_le_scan_filter_set_service_uuid(scan_filter, "1805");
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("failed with [0x%04x]", ret);
+
+ ret = bt_adapter_le_register_scan_filter(scan_filter);
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("failed with [0x%04x]", ret);
+
+ ret = bt_adapter_le_destroy_scan_filter(scan_filter);
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("failed with [0x%04x]", ret);
+
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_LE_REGISTER_SCAN_FILTER_SERVICE_SOLICITATION_UUID: {
+ bt_scan_filter_h scan_filter;
+
+ ret = bt_adapter_le_create_scan_filter(&scan_filter);
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("failed with [0x%04x]", ret);
+
+ ret = bt_adapter_le_scan_filter_set_service_solicitation_uuid(scan_filter, "1805");
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("failed with [0x%04x]", ret);
+
+ ret = bt_adapter_le_register_scan_filter(scan_filter);
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("failed with [0x%04x]", ret);
+
+ ret = bt_adapter_le_destroy_scan_filter(scan_filter);
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("failed with [0x%04x]", ret);
+
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_LE_UNREGISTER_ALL_SCAN_FILTERS: {
+ ret = bt_adapter_le_unregister_all_scan_filters();
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("failed with [0x%04x]", ret);
+
+ break;
+ }
+
+#ifndef TIZEN_WEARABLE
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_LE_SET_DEVICE_DISCOVERY_STATE_CHANGED_CB:
+ ret = bt_adapter_le_set_device_discovery_state_changed_cb(__bt_adapter_le_device_discovery_state_changed_cb, NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_LE_UNSET_DEVICE_DISCOVERY_STATE_CHANGED_CB:
+ ret = bt_adapter_le_unset_device_discovery_state_changed_cb();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+#endif
+
+ case BT_UNIT_TEST_FUNCTION_ACTIVATE_FLAG_TO_SET_PARAMETERS:
+ need_to_set_params = true;
+ TC_PRT("Select the function again");
+ break;
+
+ default:
+ break;
}
+
break;
- case 61:
- ret = bt_socket_set_connection_requested_cb(__bt_socket_connection_requested_cb, NULL);
- if (ret < BT_ERROR_NONE) {
- TC_PRT("failed with [0x%04x]", ret);
+ }
+
+ case BT_UNIT_TEST_TABLE_DEVICE: {
+ switch (test_id) {
+ case BT_UNIT_TEST_FUNCTION_DEVICE_SET_AUTHORIZATION_TRUE: {
+ ret = bt_device_set_authorization(remote_addr, BT_DEVICE_AUTHORIZED);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
}
+ case BT_UNIT_TEST_FUNCTION_DEVICE_SET_AUTHORIZATION_FALSE: {
+ ret = bt_device_set_authorization(remote_addr, BT_DEVICE_UNAUTHORIZED);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_DEVICE_SET_AUTHORIZATION_CHANGED_CB:
+ ret = bt_device_set_authorization_changed_cb(__bt_device_authorization_changed_cb, NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+
+ case BT_UNIT_TEST_FUNCTION_DEVICE_UNSET_AUTHORIZATION_CHANGED_CB:
+ ret = bt_device_unset_authorization_changed_cb();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+
+ case BT_UNIT_TEST_FUNCTION_DEVICE_SET_CONNECTION_STAET_CHANGED_CB:
+ ret = bt_device_set_connection_state_changed_cb(__bt_device_connection_state_changed_cb, NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+
+ case BT_UNIT_TEST_FUNCTION_DEVICE_UNSET_CONNECTION_STAET_CHANGED_CB:
+ ret = bt_device_unset_connection_state_changed_cb();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+
+ case BT_UNIT_TEST_FUNCTION_DEVICE_FOREACH_CONNECTED_PROFILES: {
+ ret = bt_device_foreach_connected_profiles(remote_addr, __bt_device_connected_profile, NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_DEVICE_IS_PROFILE_CONNECTED: {
+ bool connected_status = false;
+ bt_profile_e profile = BT_PROFILE_HSP;
+
+ if (g_test_param.param_count > 0) {
+ profile = atoi(g_test_param.params[0]);
+
+ __bt_free_test_param(&g_test_param);
+ }
+
+ ret = bt_device_is_profile_connected(remote_addr, profile, &connected_status);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ }
+ TC_PRT("Profile [%s]", connected_status ? "Connected" : "Disconnected");
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_DEVICE_SET_BOND_CREATED_CB : {
+ ret = bt_device_set_bond_created_cb(__bt_device_bond_created_cb, NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_DEVICE_SET_BOND_DESTROYED_CB : {
+ ret = bt_device_set_bond_destroyed_cb(__bt_device_bond_destroyed_cb, NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_DEVICE_CREATE_BOND : {
+ ret = bt_device_create_bond(remote_addr);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_DEVICE_CREATE_BOND_BY_TYPE : {
+ bt_device_connection_link_type_e link_type = BT_DEVICE_CONNECTION_LINK_LE;
+
+ if (g_test_param.param_count > 0) {
+ link_type = atoi(g_test_param.params[0]);
+
+ __bt_free_test_param(&g_test_param);
+ }
+
+ ret = bt_device_create_bond_by_type(remote_addr, link_type);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_DEVICE_DESTROY_BOND : {
+ ret = bt_device_destroy_bond(remote_addr);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_DEVICE_GET_CONNECTION_STATE: {
+ bool bredr_connected = false;
+ bool le_connected = false;
+
+ ret = bt_device_get_connection_state(remote_addr,
+ BT_DEVICE_CONNECTION_LINK_BREDR,
+ &bredr_connected);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ }
+
+ ret = bt_device_get_connection_state(remote_addr,
+ BT_DEVICE_CONNECTION_LINK_LE,
+ &le_connected);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ }
+
+ TC_PRT("BR/EDR [%s], LE [%s]",
+ bredr_connected ? "Connected" : "Disconnected",
+ le_connected ? "Connected" : "Disconnected");
+
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_ACTIVATE_FLAG_TO_SET_PARAMETERS:
+ need_to_set_params = true;
+ TC_PRT("Select the function again");
+ break;
+
+ default:
+ break;
+ }
+
break;
- case 62:
- ret = bt_socket_unset_connection_requested_cb();
- if (ret < BT_ERROR_NONE) {
- TC_PRT("failed with [0x%04x]", ret);
+ }
+ case BT_UNIT_TEST_TABLE_SOCKET: {
+ switch (test_id) {
+ case BT_UNIT_TEST_FUNCTION_SOCKET_CREATE_RFCOMM: {
+ int socket_fd = 0;
+
+ ret = bt_socket_create_rfcomm(spp_uuid, &socket_fd);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ } else {
+ TC_PRT("socket_fd: %d", socket_fd);
+ server_fd = socket_fd;
+ }
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_SOCKET_DESTROY_RFCOMM:
+ ret = bt_socket_destroy_rfcomm(server_fd);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_SOCKET_LISTEN_AND_ACCEPT_RFCOMM:
+ ret = bt_socket_listen_and_accept_rfcomm(server_fd, 1);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_SOCKET_LISTEN:
+ ret = bt_socket_listen(server_fd, 1);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_SOCKET_ACCEPT: {
+ int socket_fd = 0;
+
+ ret = bt_socket_accept(server_fd);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ } else {
+ TC_PRT("socket_fd: %d", socket_fd);
+ client_fd = socket_fd;
+ }
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_SOCKET_REJECT:
+ ret = bt_socket_reject(server_fd);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_SOCKET_CONNECT_RFCOMM: {
+ ret = bt_socket_connect_rfcomm(remote_addr, spp_uuid);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
}
+ case BT_UNIT_TEST_FUNCTION_SOCKET_DISCONNECT_RFCOMM:
+ ret = bt_socket_disconnect_rfcomm(client_fd);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_SOCKET_SEND_DATA: {
+ char data[] = "Sending test";
+
+ if (g_test_param.param_count > 0) {
+ ret = bt_socket_send_data(client_fd, g_test_param.params[0], strlen(g_test_param.params[0]) + 1);
+
+ __bt_free_test_param(&g_test_param);
+ } else {
+ ret = bt_socket_send_data(client_fd, data, sizeof(data));
+ }
+
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_SOCKET_CREATE_RFCOMM_CUSTOM_UUID: {
+ int socket_fd = 0;
+
+ ret = bt_socket_create_rfcomm(custom_uuid, &socket_fd);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ } else {
+ TC_PRT("socket_fd: %d", socket_fd);
+ custom_server_fd = socket_fd;
+ }
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_SOCKET_DESTROY_RFCOMM_CUSTOM_UUID:
+ ret = bt_socket_destroy_rfcomm(custom_server_fd);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_SOCKET_LISTEN_AND_ACCEPT_RFCOMM_CUSTOM_UUID:
+ ret = bt_socket_listen_and_accept_rfcomm(custom_server_fd, 1);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_SOCKET_CONNECT_RFCOMM_CUSTOM_UUID: {
+ ret = bt_socket_connect_rfcomm(remote_addr, custom_uuid);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_SOCKET_DISCONNECT_RFCOMM_CUSTOM_UUID:
+ ret = bt_socket_disconnect_rfcomm(custom_client_fd);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_SOCKET_SEND_DATA_CUSTOM_UUID: {
+ char data[] = "Sending test";
+
+ if (g_test_param.param_count > 0) {
+ ret = bt_socket_send_data(custom_client_fd, g_test_param.params[0], strlen(g_test_param.params[0]) + 1);
+
+ __bt_free_test_param(&g_test_param);
+ } else {
+ ret = bt_socket_send_data(custom_client_fd, data, sizeof(data));
+ }
+
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_SOCKET_SET_DATA_RECEIVED_CB:
+ ret = bt_socket_set_data_received_cb(__bt_socket_data_received_cb, NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_SOCKET_UNSET_DATA_RECEIVED_CB:
+ ret = bt_socket_unset_data_received_cb();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_SOCKET_SET_CONNECTION_REQUESTED_CB:
+ ret = bt_socket_set_connection_requested_cb(__bt_socket_connection_requested_cb, NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_SOCKET_UNSET_CONNECTION_REQUESTED_CB:
+ ret = bt_socket_unset_connection_requested_cb();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_SOCKET_SET_CONNECTION_STATE_CHANGED_CB:
+ ret = bt_socket_set_connection_state_changed_cb(__bt_socket_connection_state_changed_cb, NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_SOCKET_UNSET_CONNECTION_STATE_CHANGED_CB:
+ ret = bt_socket_unset_connection_state_changed_cb();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+
+ case BT_UNIT_TEST_FUNCTION_ACTIVATE_FLAG_TO_SET_PARAMETERS:
+ need_to_set_params = true;
+ TC_PRT("Select the function again");
+ break;
+
+ default:
+ break;
+ }
+
break;
- case 63:
- ret = bt_socket_set_connection_state_changed_cb(__bt_socket_connection_state_changed_cb, NULL);
- if (ret < BT_ERROR_NONE) {
- TC_PRT("failed with [0x%04x]", ret);
+ }
+ case BT_UNIT_TEST_TABLE_OPP: {
+ switch (test_id) {
+ case BT_UNIT_TEST_FUNCTION_OPP_CLIENT_INITIALIZE:
+ ret = bt_opp_client_initialize();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_OPP_CLIENT_DEINITIALIZE:
+ ret = bt_opp_client_deinitialize();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_OPP_CLIENT_ADD_FILE:
+ ret = bt_opp_client_add_file("/opt/media/Images/image1.jpg");
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_OPP_CLIENT_CLEAR_FILES:
+ ret = bt_opp_client_clear_files();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_OPP_CLIENT_PUSH_FILES: {
+ ret = bt_opp_client_push_files(remote_addr,__bt_opp_client_push_responded_cb,
+ __bt_opp_client_push_progress_cb,
+ __bt_opp_client_push_finished_cb,
+ NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_OPP_CLIENT_CANCEL_PUSH:
+ ret = bt_opp_client_cancel_push();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+
+ case BT_UNIT_TEST_FUNCTION_ACTIVATE_FLAG_TO_SET_PARAMETERS:
+ need_to_set_params = true;
+ TC_PRT("Select the function again");
+ break;
+
+ default:
+ break;
}
+
break;
- case 64:
- ret = bt_socket_unset_connection_state_changed_cb();
- if (ret < BT_ERROR_NONE) {
- TC_PRT("failed with [0x%04x]", ret);
+ }
+ case BT_UNIT_TEST_TABLE_AUDIO: {
+ switch (test_id) {
+ case BT_UNIT_TEST_FUNCTION_AUDIO_INITIALIZE:
+ ret = bt_audio_initialize();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_AUDIO_DEINITIALIZE:
+ ret = bt_audio_deinitialize();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_AUDIO_CONNECT: {
+ bt_audio_profile_type_e audio_profile = BT_AUDIO_PROFILE_TYPE_ALL;
+
+ if (g_test_param.param_count > 0) {
+ audio_profile = atoi(g_test_param.params[0]);
+
+ __bt_free_test_param(&g_test_param);
+ }
+
+ ret = bt_audio_connect(remote_addr, audio_profile);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_AUDIO_DISCONNECT: {
+ bt_audio_profile_type_e audio_profile = BT_AUDIO_PROFILE_TYPE_ALL;
+
+ if (g_test_param.param_count > 0) {
+ audio_profile = atoi(g_test_param.params[0]);
+
+ __bt_free_test_param(&g_test_param);
+ }
+
+ ret = bt_audio_disconnect(remote_addr, audio_profile);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_AUDIO_SET_CONNECTION_STATE_CHANGED_CB:
+ ret = bt_audio_set_connection_state_changed_cb(
+ __bt_audio_connection_state_changed_cb, NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_AUDIO_UNSET_CONNECTION_STATE_CHANGED_CB:
+ ret = bt_audio_unset_connection_state_changed_cb();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_A2DP_AUDIO_SET_CONNECTION_STATE_CB:
+ ret = bt_a2dp_source_audio_set_connection_state_changed_cb(
+ __bt_audio_connection_state_changed_cb, NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_A2DP_AUDIO_UNSET_CONNECTION_STATE_CB:
+ ret = bt_a2dp_source_audio_unset_connection_state_changed_cb();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_AG_OPEN_SCO:
+ ret = bt_ag_open_sco();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_AG_CLOSE_SCO:
+ ret = bt_ag_close_sco();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_AG_IS_SCO_OPENED: {
+ bool opened = false;
+ ret = bt_ag_is_sco_opened(&opened);
+ TC_PRT("opend[%s]", opened ? "YES" : "NO");
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ }
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_AG_SET_SCO_STATE_CHANGED_CB:
+ ret = bt_ag_set_sco_state_changed_cb(__bt_ag_sco_state_changed_cb, NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_AG_UNSET_SCO_STATE_CHANGED_CB:
+ ret = bt_ag_unset_sco_state_changed_cb();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_AG_IS_CONNECTED: {
+ bool connected = false;
+ ret = bt_ag_is_connected(&connected);
+ TC_PRT("returns %s\n", connected ? "Connected" : "Disconnected");
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_AG_CALL_EVENT_IDLE: {
+ unsigned int call_id = 1;
+
+ ret = bt_ag_notify_call_event(BT_AG_CALL_EVENT_IDLE, call_id, NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_AG_CALL_EVENT_ANSWERED: {
+ unsigned int call_id = 1;
+ bool sco_required = true;
+
+ ret = bt_ag_notify_call_event(BT_AG_CALL_EVENT_ANSWERED, call_id, NULL);
+ if (sco_required)
+ bt_ag_open_sco();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_AG_CALL_EVENT_DIALING: {
+ unsigned int call_id = 1;
+ bool sco_required = TRUE;
+ const char *phone_number;
+
+ if (g_test_param.param_count > 0) {
+ ret = bt_ag_notify_call_event(BT_AG_CALL_EVENT_DIALING,
+ call_id, g_test_param.params[0]);
+
+ __bt_free_test_param(&g_test_param);
+ } else {
+ phone_number = g_strdup("01012345678");
+
+ ret = bt_ag_notify_call_event(BT_AG_CALL_EVENT_DIALING,
+ call_id, phone_number);
+ }
+
+ if (sco_required)
+ bt_ag_open_sco();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_AG_CALL_EVENT_ALERTING: {
+ unsigned int call_id = 1;
+
+ ret = bt_ag_notify_call_event(BT_AG_CALL_EVENT_ALERTING,
+ call_id, NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_AG_CALL_EVENT_INCOMING: {
+ unsigned int call_id = 1;
+ const char *phone_number;
+
+ if (g_test_param.param_count > 0) {
+ ret = bt_ag_notify_call_event(BT_AG_CALL_EVENT_INCOMING,
+ call_id, g_test_param.params[0]);
+
+ __bt_free_test_param(&g_test_param);
+ } else {
+ phone_number = g_strdup("01012345678");
+
+ ret = bt_ag_notify_call_event(BT_AG_CALL_EVENT_INCOMING,
+ call_id, phone_number);
+ }
+
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
}
+ case BT_UNIT_TEST_FUNCTION_CALL_LIST_CREATE:
+ ret = bt_call_list_create(&call_list);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_CALL_LIST_DESTROY:
+ ret = bt_call_list_destroy(call_list);
+ call_list = NULL;
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_CALL_LIST_RESET:
+ ret = bt_call_list_reset(call_list);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_CALL_LIST_ADD: {
+ const char *phone_number;
+
+ if (g_test_param.param_count > 0) {
+ ret = bt_call_list_add(call_list, 1, BT_AG_CALL_STATE_ACTIVE, g_test_param.params[0]);
+
+ __bt_free_test_param(&g_test_param);
+ } else {
+ phone_number = g_strdup("01012345678");
+
+ ret = bt_call_list_add(call_list, 1, BT_AG_CALL_STATE_ACTIVE, phone_number);
+ }
+
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_AG_NOTIFY_CALL_LIST:
+ ret = bt_ag_notify_call_list(call_list);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_AG_SET_CALL_HANDLING_EVENT_CB:
+ ret = bt_ag_set_call_handling_event_cb(
+ __bt_ag_set_call_handling_event_cb, NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_AG_IS_NREC_ENABLED: {
+ bool enabled = false;
+ ret = bt_ag_is_nrec_enabled(&enabled);
+ TC_PRT("opend[%s]", enabled ? "YES" : "NO");
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ }
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_ACTIVATE_FLAG_TO_SET_PARAMETERS:
+ need_to_set_params = true;
+ TC_PRT("Select the function again");
+ break;
+
+ default:
+ break;
+ }
+
break;
- case 70:
- ret = bt_opp_client_initialize();
- if (ret < BT_ERROR_NONE) {
- TC_PRT("failed with [0x%04x]", ret);
+ }
+ case BT_UNIT_TEST_TABLE_PAN: {
+ switch (test_id) {
+ case BT_UNIT_TEST_FUNCTION_NAP_ACTIVATE:
+ ret = bt_nap_activate();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+
+ case BT_UNIT_TEST_FUNCTION_NAP_DEACTIVATE:
+ ret = bt_nap_deactivate();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+
+ case BT_UNIT_TEST_FUNCTION_NAP_DISCONNECT_ALL:
+ ret = bt_nap_disconnect_all();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+
+ case BT_UNIT_TEST_FUNCTION_NAP_DISCONNECT: {
+ ret = bt_nap_disconnect(remote_addr);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_PANU_SET_CONNECTION_STATE_CHANGED_CB: {
+ ret = bt_panu_set_connection_state_changed_cb(panu_conn_state_changed,
+ NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_PANU_CONNECT: {
+ ret = bt_panu_connect(remote_addr, BT_PANU_SERVICE_TYPE_NAP);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
}
+
+ case BT_UNIT_TEST_FUNCTION_ACTIVATE_FLAG_TO_SET_PARAMETERS:
+ need_to_set_params = true;
+ TC_PRT("Select the function again");
+ break;
+
+ default:
+ break;
+ }
+
break;
- case 71:
- ret = bt_opp_client_deinitialize();
- if (ret < BT_ERROR_NONE) {
- TC_PRT("failed with [0x%04x]", ret);
+ }
+ case BT_UNIT_TEST_TABLE_GATT: {
+ switch (test_id) {
+ case BT_UNIT_TEST_FUNCTION_GATT_CONNECT : {
+ bool auto_connect = false;
+
+ if (g_test_param.param_count > 0) {
+ if (g_strrstr(g_test_param.params[0], "true"))
+ auto_connect = true;
+ else
+ auto_connect = false;
+
+ __bt_free_test_param(&g_test_param);
+ }
+
+ ret = bt_gatt_connect(remote_addr, auto_connect);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_GATT_DISCONNECT : {
+ ret = bt_gatt_disconnect(remote_addr);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_SET_GATT_CONNECTION_STATE_CHANGED_CB : {
+ ret = bt_gatt_set_connection_state_changed_cb(__bt_gatt_connection_state_changed_cb, NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_UNSET_GATT_CONNECTION_STATE_CHANGED_CB : {
+ ret = bt_gatt_unset_connection_state_changed_cb();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_GATT_CLIENT_CREATE: {
+ if (client) {
+ bt_gatt_client_destroy(client);
+ client = NULL;
+ }
+ ret = bt_gatt_client_create(remote_addr, &client);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_GATT_CLIENT_DESTROY: {
+ if (!client)
+ break;
+
+ ret = bt_gatt_client_destroy(client);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ client = NULL;
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_GATT_CLIENT_GET_REMOTE_ADDRESS: {
+ char *addr = NULL;
+
+ ret = bt_gatt_client_get_remote_address(client, &addr);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+
+ if (addr) {
+ TC_PRT("remote addr : %s\n", addr);
+ g_free(addr);
+ }
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_GATT_CLIENT_PRINT_ALL: {
+ ret = bt_gatt_client_foreach_services(client,
+ __bt_gatt_client_foreach_svc_cb, (void *)test_id);
+ if (ret != BT_ERROR_NONE) {
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ }
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_GATT_CLIENT_READ_VALUE: {
+ char *svc_uuid = NULL;
+ char *chr_uuid = NULL;
+ char *desc_uuid = NULL;
+ bt_gatt_h svc = NULL;
+ bt_gatt_h chr = NULL;
+ bt_gatt_h desc = NULL;
+
+ if (g_test_param.param_count < 3) {
+ TC_PRT("Input parameters first");
+ break;
+ }
+
+ svc_uuid = g_test_param.params[0];
+ chr_uuid = g_test_param.params[1];
+
+ ret = bt_gatt_client_get_service(client, svc_uuid, &svc);
+ if (ret != BT_ERROR_NONE) {
+ TC_PRT("bt_gatt_client_get_service is failed : %d", ret);
+ __bt_free_test_param(&g_test_param);
+ break;
+ }
+
+ ret = bt_gatt_service_get_characteristic(svc, chr_uuid, &chr);
+ if (ret != BT_ERROR_NONE) {
+ TC_PRT("bt_gatt_service_get_characteristic is failed : %d", ret);
+ __bt_free_test_param(&g_test_param);
+ break;
+ }
+
+ if (strlen(g_test_param.params[2]) > 0) {
+ desc_uuid = g_test_param.params[2];
+ ret = bt_gatt_characteristic_get_descriptor(chr, desc_uuid, &desc);
+ if (ret != BT_ERROR_NONE) {
+ TC_PRT("bt_gatt_characteristic_get_descriptor is failed : %d", ret);
+ __bt_free_test_param(&g_test_param);
+ break;
+ }
+ ret = bt_gatt_client_read_value(desc,
+ __bt_gatt_client_read_complete_cb, NULL);
+ } else {
+ ret = bt_gatt_client_read_value(chr,
+ __bt_gatt_client_read_complete_cb, NULL);
+ }
+
+ if (ret != BT_ERROR_NONE) {
+ TC_PRT("bt_gatt_client_read_value is failed : %d", ret);
+ }
+
+ __bt_free_test_param(&g_test_param);
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_GATT_CLIENT_WRITE_VALUE: {
+ char *svc_uuid = NULL;
+ char *chr_uuid = NULL;
+ char *desc_uuid = NULL;
+ bt_gatt_h svc = NULL;
+ bt_gatt_h chr = NULL;
+ bt_gatt_h desc = NULL;
+
+ if (g_test_param.param_count < 5) {
+ TC_PRT("Input parameters first");
+ break;
+ }
+
+ svc_uuid = g_test_param.params[0];
+ chr_uuid = g_test_param.params[1];
+
+ ret = bt_gatt_client_get_service(client, svc_uuid, &svc);
+ if (ret != BT_ERROR_NONE) {
+ TC_PRT("bt_gatt_client_get_service is failed : %d", ret);
+ __bt_free_test_param(&g_test_param);
+ break;
+ }
+
+ ret = bt_gatt_service_get_characteristic(svc, chr_uuid, &chr);
+ if (ret != BT_ERROR_NONE) {
+ TC_PRT("bt_gatt_service_get_characteristic is failed : %d", ret);
+ __bt_free_test_param(&g_test_param);
+ break;
+ }
+
+ if (strlen(g_test_param.params[2]) > 0) {
+ desc_uuid = g_test_param.params[2];
+ ret = bt_gatt_characteristic_get_descriptor(chr, desc_uuid, &desc);
+ if (ret != BT_ERROR_NONE) {
+ TC_PRT("bt_gatt_characteristic_get_descriptor is failed : %d", ret);
+ __bt_free_test_param(&g_test_param);
+ break;
+ }
+
+ ret = __bt_gatt_client_set_value(g_test_param.params[3],
+ g_test_param.params[4], desc);
+ if (ret != BT_ERROR_NONE) {
+ TC_PRT("bt_gatt_set_value is failed : %d", ret);
+ __bt_free_test_param(&g_test_param);
+ break;
+ }
+
+ ret = bt_gatt_client_write_value(desc,
+ __bt_gatt_client_write_complete_cb, NULL);
+ } else {
+ ret = __bt_gatt_client_set_value(g_test_param.params[3],
+ g_test_param.params[4], chr);
+ if (ret != BT_ERROR_NONE) {
+ TC_PRT("bt_gatt_set_value is failed : %d", ret);
+ __bt_free_test_param(&g_test_param);
+ break;
+ }
+
+ ret = bt_gatt_client_write_value(chr,
+ __bt_gatt_client_write_complete_cb, NULL);
+ }
+
+ if (ret != BT_ERROR_NONE) {
+ TC_PRT("bt_gatt_client_write_value is failed : %d", ret);
+ }
+
+ __bt_free_test_param(&g_test_param);
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_GATT_CLIENT_SET_CHAR_VALUE_CHANGED_CB: {
+ char *svc_uuid = NULL;
+ char *chr_uuid = NULL;
+ bt_gatt_h svc = NULL;
+ bt_gatt_h chr = NULL;
+
+ if (g_test_param.param_count < 2) {
+ TC_PRT("Input parameters first");
+ break;
+ }
+
+ svc_uuid = g_test_param.params[0];
+ chr_uuid = g_test_param.params[1];
+
+ ret = bt_gatt_client_get_service(client, svc_uuid, &svc);
+ if (ret != BT_ERROR_NONE) {
+ TC_PRT("bt_gatt_client_get_service is failed : %d", ret);
+ __bt_free_test_param(&g_test_param);
+ break;
+ }
+
+ ret = bt_gatt_service_get_characteristic(svc, chr_uuid, &chr);
+ if (ret != BT_ERROR_NONE) {
+ TC_PRT("bt_gatt_service_get_characteristic is failed : %d", ret);
+ __bt_free_test_param(&g_test_param);
+ break;
+ }
+
+ ret = bt_gatt_client_set_characteristic_value_changed_cb(chr,
+ __bt_gatt_client_value_changed_cb, NULL);
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("bt_gatt_client_set_characteristic_value_changed_cb is failed : %d", ret);
+
+ __bt_free_test_param(&g_test_param);
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_GATT_CLIENT_UNSET_CHAR_VALUE_CHANGED_CB: {
+ char *svc_uuid = NULL;
+ char *chr_uuid = NULL;
+ bt_gatt_h svc = NULL;
+ bt_gatt_h chr = NULL;
+
+ if (g_test_param.param_count < 2) {
+ TC_PRT("Input parameters first");
+ break;
+ }
+
+ svc_uuid = g_test_param.params[0];
+ chr_uuid = g_test_param.params[1];
+
+ ret = bt_gatt_client_get_service(client, svc_uuid, &svc);
+ if (ret != BT_ERROR_NONE) {
+ TC_PRT("bt_gatt_client_get_service is failed : %d", ret);
+ __bt_free_test_param(&g_test_param);
+ break;
+ }
+
+ ret = bt_gatt_service_get_characteristic(svc, chr_uuid, &chr);
+ if (ret != BT_ERROR_NONE) {
+ TC_PRT("bt_gatt_service_get_characteristic is failed : %d", ret);
+ __bt_free_test_param(&g_test_param);
+ break;
+ }
+
+ ret = bt_gatt_client_unset_characteristic_value_changed_cb(chr);
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("bt_gatt_client_unset_characteristic_value_changed_cb is failed : %d", ret);
+
+ __bt_free_test_param(&g_test_param);
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_GATT_CLIENT_FOREACH_SERVICES: {
+ ret = bt_gatt_client_foreach_services(client,
+ __bt_gatt_client_foreach_svc_cb, (void *)test_id);
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("bt_gatt_client_foreach_services_by_uuid is failed");
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_GATT_SERVER_INITIALIZE : {
+
+ ret = bt_gatt_server_initialize();
+
+ TC_PRT("returns %s \n", __bt_get_error_message(ret));
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_GATT_SERVER_DEINITIALIZE : {
+
+ ret = bt_gatt_server_deinitialize();
+
+ TC_PRT("returns %s \n", __bt_get_error_message(ret));
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_GATT_SERVER_UNREGISTER_ALL_SERVICES: {
+ ret = bt_gatt_server_unregister_all_services(server);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_GATT_SERVER_REGISTER_BATTERY_SVC: {
+ bt_gatt_h service = NULL;
+ bt_gatt_h characteristic = NULL;
+ bt_gatt_h descriptor = NULL;
+ char *service_uuid = "180f"; // Battery Service
+ char *char_uuid = "2a19"; // Battery Level
+ char *desc_uuid = "2902"; // CCCD
+ char char_value[1] = {80}; // 80%
+ char desc_value[2] = {0, 0}; // Notification & Indication disabled
+ int permissions = BT_GATT_PERMISSION_READ;
+ int properties = BT_GATT_PROPERTY_READ | BT_GATT_PROPERTY_NOTIFY;
+
+ ret = bt_gatt_server_initialize();
+ TC_PRT("bt_gatt_server_initialize : %s \n", __bt_get_error_message(ret));
+
+ if (server == NULL) {
+ ret = bt_gatt_server_create(&server);
+ TC_PRT("bt_gatt_server_create : %s \n", __bt_get_error_message(ret));
+ }
+
+ ret = bt_gatt_service_create(service_uuid, BT_GATT_SERVICE_TYPE_PRIMARY, &service);
+ TC_PRT("bt_gatt_service_create : %s \n", __bt_get_error_message(ret));
+
+ ret = bt_gatt_characteristic_create(char_uuid, permissions, properties,
+ char_value, sizeof(char_value), &characteristic);
+ TC_PRT("bt_gatt_characteristic_create : %s\n", __bt_get_error_message(ret));
+
+ ret = bt_gatt_service_add_characteristic(service, characteristic);
+ TC_PRT("bt_gatt_service_add_characteristic : %s\n", __bt_get_error_message(ret));
+
+ permissions = BT_GATT_PERMISSION_READ | BT_GATT_PERMISSION_WRITE;
+ ret = bt_gatt_descriptor_create(desc_uuid, permissions, desc_value, sizeof(desc_value), &descriptor);
+ TC_PRT("bt_gatt_descriptor_create : %s\n", __bt_get_error_message(ret));
+
+ ret = bt_gatt_characteristic_add_descriptor(characteristic, descriptor);
+ TC_PRT("bt_gatt_characteristic_add_descriptor : %s\n", __bt_get_error_message(ret));
+
+ ret = bt_gatt_server_register_service(server, service);
+ TC_PRT("bt_gatt_server_register_service : %s\n", __bt_get_error_message(ret));
+
+ battery_h.svc = service;
+ battery_h.chr = characteristic;
+ battery_h.desc = descriptor;
+
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_GATT_SERVER_CHANGE_BATTERY_LEVEL: {
+ char char_value[1] = {1 + (rand()%100)};
+ if (!server) {
+ TC_PRT("bt gatt server is not created");
+ break;
+ }
+ ret = bt_gatt_set_value(battery_h.chr, char_value, 1);
+ TC_PRT("Value[%d], returns %s\n", char_value[0], __bt_get_error_message(ret));
+
+ break;
}
+ case BT_UNIT_TEST_FUNCTION_GATT_SERVER_REGISTER_HEART_RATE_SVC: {
+ bt_gatt_h service = NULL;
+ bt_gatt_h characteristic = NULL;
+ bt_gatt_h descriptor = NULL;
+ char *service_uuid = "180d"; // Heart Rate Service
+ char *char_uuid = "2a37"; // Heart Rate Measurement
+ char *desc_uuid = "2902"; // CCCD
+ char char_value_1[3] = {1, 0x38, 0}; // Flag + Measurement value (56)
+ char desc_value[2] = {1, 0}; // Notification enabled
+ int permissions = BT_GATT_PERMISSION_READ;
+ int properties = BT_GATT_PROPERTY_NOTIFY | BT_GATT_PROPERTY_READ; // READ property added for testing
+
+ ret = bt_gatt_server_initialize();
+ TC_PRT("bt_gatt_server_initialize : %s \n", __bt_get_error_message(ret));
+
+ if (server == NULL) {
+ ret = bt_gatt_server_create(&server);
+ TC_PRT("bt_gatt_server_create : %s \n", __bt_get_error_message(ret));
+ }
+
+ ret = bt_gatt_service_create(service_uuid, BT_GATT_SERVICE_TYPE_PRIMARY, &service);
+ TC_PRT("bt_gatt_service_create : %s \n", __bt_get_error_message(ret));
+
+ ret = bt_gatt_characteristic_create(char_uuid, permissions, properties,
+ char_value_1, sizeof(char_value_1), &characteristic);
+ TC_PRT("bt_gatt_characteristic_create : %s\n", __bt_get_error_message(ret));
+
+ heart_rate_h.chr = characteristic;
+
+ bt_gatt_server_set_read_value_requested_cb(characteristic, __bt_gatt_server_read_value_requested_cb, NULL);
+ ret = bt_gatt_service_add_characteristic(service, characteristic);
+ TC_PRT("bt_gatt_service_add_characteristic : %s\n", __bt_get_error_message(ret));
+
+ permissions = BT_GATT_PERMISSION_READ | BT_GATT_PERMISSION_WRITE;
+ ret = bt_gatt_descriptor_create(desc_uuid, permissions, desc_value, sizeof(desc_value), &descriptor);
+ TC_PRT("bt_gatt_descriptor_create : %s\n", __bt_get_error_message(ret));
+
+ ret = bt_gatt_characteristic_add_descriptor(characteristic, descriptor);
+ TC_PRT("bt_gatt_characteristic_add_descriptor : %s\n", __bt_get_error_message(ret));
+
+ char_uuid = "2a38"; // Body Sensor Location
+ permissions = BT_GATT_PERMISSION_READ;
+ properties = BT_GATT_PROPERTY_READ;
+ char char_value_2 = 4; // Hand
+ ret = bt_gatt_characteristic_create(char_uuid, permissions, properties,
+ &char_value_2, sizeof(char_value_2), &characteristic);
+ TC_PRT("bt_gatt_characteristic_create : %s\n", __bt_get_error_message(ret));
+
+ ret = bt_gatt_service_add_characteristic(service, characteristic);
+ TC_PRT("bt_gatt_service_add_characteristic : %s\n", __bt_get_error_message(ret));
+
+ ret = bt_gatt_server_register_service(server, service);
+ TC_PRT("bt_gatt_server_register_service : %s\n", __bt_get_error_message(ret));
+
+ heart_rate_h.svc = service;
+ heart_rate_h.desc = descriptor;
+
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_GATT_SERVER_NOTIFY_HEART_RATE_MEASUREMENT: {
+ int char_value = 60 + (rand()%60);
+ if (!server) {
+ TC_PRT("bt gatt server is not created");
+ break;
+ }
+ ret = bt_gatt_set_int_value(heart_rate_h.chr, BT_DATA_TYPE_UINT16, char_value, 1);
+ TC_PRT("bt_gatt_set_value(value : %d) : %s\n", char_value, __bt_get_error_message(ret));
+
+ ret = bt_gatt_server_notify(heart_rate_h.chr, false, __bt_gatt_server_notification_sent_cb, NULL);
+ TC_PRT("bt_gatt_server_notify : %s\n", __bt_get_error_message(ret));
+
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_GATT_SERVER_REGISTER_THERMOMETER_SVC: {
+ bt_gatt_h service = NULL;
+ bt_gatt_h characteristic = NULL;
+ bt_gatt_h descriptor = NULL;
+ char *service_uuid = "1809"; // Health Thermometer Service
+ char *char_uuid = "2a1c"; // Temperature Measurement
+ char *desc_uuid = "2902"; // CCCD
+ char char_value[5] = {0, 0x85, 0xff, 0xff, 0xfe}; // Flag + Temperature Measurement Value (Celsius, -1.23)
+ char desc_value[2] = {2, 0}; // Indication enabled
+ int permissions = BT_GATT_PERMISSION_READ;
+ int properties = BT_GATT_PROPERTY_INDICATE | BT_GATT_PROPERTY_READ; // READ property added for testing
+
+ ret = bt_gatt_server_initialize();
+ TC_PRT("bt_gatt_server_initialize : %s \n", __bt_get_error_message(ret));
+
+ if (server == NULL) {
+ ret = bt_gatt_server_create(&server);
+ TC_PRT("bt_gatt_server_create : %s \n", __bt_get_error_message(ret));
+ }
+
+ ret = bt_gatt_service_create(service_uuid, BT_GATT_SERVICE_TYPE_PRIMARY, &service);
+ TC_PRT("bt_gatt_service_create : %s \n", __bt_get_error_message(ret));
+
+ ret = bt_gatt_characteristic_create(char_uuid, permissions, properties,
+ char_value, sizeof(char_value), &characteristic);
+ TC_PRT("bt_gatt_characteristic_create : %s\n", __bt_get_error_message(ret));
+
+ ret = bt_gatt_service_add_characteristic(service, characteristic);
+ TC_PRT("bt_gatt_service_add_characteristic : %s\n", __bt_get_error_message(ret));
+
+ permissions = BT_GATT_PERMISSION_READ | BT_GATT_PERMISSION_WRITE;
+ ret = bt_gatt_descriptor_create(desc_uuid, permissions, desc_value, sizeof(desc_value), &descriptor);
+ TC_PRT("bt_gatt_descriptor_create : %s\n", __bt_get_error_message(ret));
+
+ ret = bt_gatt_characteristic_add_descriptor(characteristic, descriptor);
+ TC_PRT("bt_gatt_characteristic_add_descriptor : %s\n", __bt_get_error_message(ret));
+
+ ret = bt_gatt_server_register_service(server, service);
+ TC_PRT("bt_gatt_server_register_service : %s\n", __bt_get_error_message(ret));
+
+ thermometer_h.chr = characteristic;
+ thermometer_h.svc = service;
+ thermometer_h.desc = descriptor;
+
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_GATT_SERVER_CHANGE_THERMOMETER_MEASUREMENT: {
+ if (!server) {
+ TC_PRT("bt gatt server is not created");
+ break;
+ }
+ ret = bt_gatt_set_float_value(thermometer_h.chr, BT_DATA_TYPE_FLOAT, 123, -2, 1);
+ TC_PRT("bt_gatt_set_value(value : 1.23) : %s\n", __bt_get_error_message(ret));
+
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_GATT_SERVER_REGISTER_DEVICE_INFORMATION_SVC: {
+ bt_gatt_h service = NULL;
+ bt_gatt_h characteristic = NULL;
+ char *service_uuid = "180a"; // Device Infromation Service
+ char *char_uuid = NULL;
+ char *char_value;
+ int permissions = BT_GATT_PERMISSION_READ;
+ int properties = BT_GATT_PROPERTY_READ;
+
+ ret = bt_gatt_server_initialize();
+ TC_PRT("bt_gatt_server_initialize : %s \n", __bt_get_error_message(ret));
+
+ if (server == NULL) {
+ ret = bt_gatt_server_create(&server);
+ TC_PRT("bt_gatt_server_create : %s \n", __bt_get_error_message(ret));
+ }
+
+ ret = bt_gatt_service_create(service_uuid, BT_GATT_SERVICE_TYPE_PRIMARY, &service);
+ TC_PRT("bt_gatt_service_create : %s \n", __bt_get_error_message(ret));
+
+ char_uuid = "2a29"; // Manufacturer Name String
+ char_value = g_strdup("Samsung");
+ ret = bt_gatt_characteristic_create(char_uuid, permissions, properties,
+ char_value, strlen(char_value), &characteristic);
+ TC_PRT("bt_gatt_characteristic_create : %s\n", __bt_get_error_message(ret));
+ g_free(char_value);
+
+ ret = bt_gatt_service_add_characteristic(service, characteristic);
+ TC_PRT("bt_gatt_service_add_characteristic : %s\n", __bt_get_error_message(ret));
+
+ char_uuid = "2a24"; // Model Number String
+ char_value = g_strdup("TIZEN_HR 0408");
+ ret = bt_gatt_characteristic_create(char_uuid, permissions, properties,
+ char_value, strlen(char_value), &characteristic);
+ TC_PRT("bt_gatt_characteristic_create : %s\n", __bt_get_error_message(ret));
+ g_free(char_value);
+
+ ret = bt_gatt_service_add_characteristic(service, characteristic);
+ TC_PRT("bt_gatt_service_add_characteristic : %s\n", __bt_get_error_message(ret));
+
+ char_uuid = "2a28"; // S/W Revision String
+ char_value = g_strdup("NC2");
+ ret = bt_gatt_characteristic_create(char_uuid, permissions, properties,
+ char_value, strlen(char_value), &characteristic);
+ TC_PRT("bt_gatt_characteristic_create : %s\n", __bt_get_error_message(ret));
+ g_free(char_value);
+
+ ret = bt_gatt_service_add_characteristic(service, characteristic);
+ TC_PRT("bt_gatt_service_add_characteristic : %s\n", __bt_get_error_message(ret));
+
+ char_uuid = "2a26"; // Firmware Revision Name String
+ char_value = g_strdup("Firmware Ver 04");
+ ret = bt_gatt_characteristic_create(char_uuid, permissions, properties,
+ char_value, strlen(char_value), &characteristic);
+ TC_PRT("bt_gatt_characteristic_create : %s\n", __bt_get_error_message(ret));
+ g_free(char_value);
+
+ ret = bt_gatt_service_add_characteristic(service, characteristic);
+ TC_PRT("bt_gatt_service_add_characteristic : %s\n", __bt_get_error_message(ret));
+
+ ret = bt_gatt_server_register_service(server, service);
+ TC_PRT("bt_gatt_server_register_service : %s\n", __bt_get_error_message(ret));
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_GATT_SERVER_REGISTER_LINK_LOSS_SVC: {
+ bt_gatt_h service = NULL;
+ bt_gatt_h characteristic = NULL;
+ char *service_uuid = "1803"; // Link Loss Service
+ char *char_uuid = "2a06"; // Alert Level
+ char char_value[1] = {2}; // high alert
+ int value_length = 1;
+ int permissions = BT_GATT_PERMISSION_READ;
+ int properties = BT_GATT_PROPERTY_READ | BT_GATT_PROPERTY_WRITE;
+
+ ret = bt_gatt_server_initialize();
+ TC_PRT("bt_gatt_server_initialize : %s \n", __bt_get_error_message(ret));
+
+ if (server == NULL) {
+ ret = bt_gatt_server_create(&server);
+ TC_PRT("bt_gatt_server_create : %s \n", __bt_get_error_message(ret));
+ }
+
+ ret = bt_gatt_service_create(service_uuid, BT_GATT_SERVICE_TYPE_PRIMARY, &service);
+ TC_PRT("bt_gatt_service_create : %s \n", __bt_get_error_message(ret));
+
+ ret = bt_gatt_characteristic_create(char_uuid, permissions, properties,
+ char_value, value_length, &characteristic);
+ TC_PRT("bt_gatt_characteristic_create : %s\n", __bt_get_error_message(ret));
+
+ ret = bt_gatt_service_add_characteristic(service, characteristic);
+ TC_PRT("bt_gatt_service_add_characteristic : %s\n", __bt_get_error_message(ret));
+
+ ret = bt_gatt_server_register_service(server, service);
+ TC_PRT("bt_gatt_server_register_service : %s\n", __bt_get_error_message(ret));
+
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_GATT_SERVER_REGISTER_CUSTOM_SVC: {
+ bt_gatt_h service = NULL;
+ bt_gatt_h characteristic = NULL;
+ bt_gatt_h descriptor = NULL;
+ char *service_uuid = "000018f2-0000-1000-8000-00805f9b34fb";
+ char *char_uuid = "00002af6-0000-1000-8000-00805f9b34fb";
+ char *desc_uuid = "00002a56-0000-1000-8000-00805f9b34fb";
+ char char_value[4] = {10, 20, 30, 40};
+ char desc_value[4] = {12, 34, 56, 78};
+ int value_length = 4;
+ int permissions = BT_GATT_PERMISSION_READ;
+ int properties = BT_GATT_PROPERTY_BROADCAST | BT_GATT_PROPERTY_READ |
+ BT_GATT_PROPERTY_WRITE | BT_GATT_PROPERTY_NOTIFY;
+
+ ret = bt_gatt_server_initialize();
+ TC_PRT("bt_gatt_server_initialize : %s \n", __bt_get_error_message(ret));
+
+ if (server == NULL) {
+ ret = bt_gatt_server_create(&server);
+ TC_PRT("bt_gatt_server_create : %s \n", __bt_get_error_message(ret));
+ }
+
+ ret = bt_gatt_service_create(service_uuid, BT_GATT_SERVICE_TYPE_PRIMARY, &service);
+ TC_PRT("bt_gatt_service_create : %s \n", __bt_get_error_message(ret));
+
+ ret = bt_gatt_characteristic_create(char_uuid, permissions, properties,
+ char_value, value_length, &characteristic);
+ TC_PRT("bt_gatt_characteristic_create : %s\n", __bt_get_error_message(ret));
+
+ ret = bt_gatt_service_add_characteristic(service, characteristic);
+ TC_PRT("bt_gatt_service_add_characteristic : %s\n", __bt_get_error_message(ret));
+
+ ret = bt_gatt_descriptor_create(desc_uuid, permissions, desc_value, value_length, &descriptor);
+ TC_PRT("bt_gatt_descriptor_create : %s\n", __bt_get_error_message(ret));
+
+ ret = bt_gatt_characteristic_add_descriptor(characteristic, descriptor);
+ TC_PRT("bt_gatt_characteristic_add_descriptor : %s\n", __bt_get_error_message(ret));
+
+ ret = bt_gatt_server_register_service(server, service);
+ TC_PRT("bt_gatt_server_register_service : %s\n", __bt_get_error_message(ret));
+
+ custom_h.svc = service;
+ custom_h.chr = characteristic;
+ custom_h.desc = descriptor;
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_GATT_SERVER_CHANGE_CUSTOM_VAL: {
+ char char_value[4] = {50, 60, 70, 80};
+ if (!server) {
+ TC_PRT("bt gatt server is not created");
+ break;
+ }
+ ret = bt_gatt_set_value(custom_h.chr, char_value, 4);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_ANCS_PAIR: {
+ bt_device_connection_link_type_e link_type = BT_DEVICE_CONNECTION_LINK_LE;
+
+ if (g_test_param.param_count > 0) {
+ link_type = atoi(g_test_param.params[0]);
+
+ __bt_free_test_param(&g_test_param);
+ }
+
+ ret = bt_device_create_bond_by_type(remote_addr, link_type);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_ANCS_WATCH: {
+ bt_gatt_h ancs_svc = NULL;
+ bt_gatt_h noti_source = NULL;;
+ char *svc_uuid = "7905F431-B5CE-4E99-A40F-4B1E122D00D0";
+ char *chr_uuid = "9FBF120D-6301-42D9-8C58-25E699A21DBD";
+
+ ret = bt_gatt_client_get_service(client, svc_uuid, &ancs_svc);
+ if (ret != BT_ERROR_NONE) {
+ TC_PRT("bt_gatt_client_get_service is failed : %d", ret);
+ break;
+ }
+
+ ret = bt_gatt_service_get_characteristic(ancs_svc, chr_uuid, &noti_source);
+ if (ret != BT_ERROR_NONE) {
+ TC_PRT("bt_gatt_service_get_characteristic is failed : %d", ret);
+ break;
+ }
+
+ ret = bt_gatt_client_set_characteristic_value_changed_cb(noti_source,
+ __bt_gatt_client_value_changed_cb, NULL);
+ if (ret != BT_ERROR_NONE) {
+ TC_PRT("bt_gatt_client_set_characteristic_value_changed_cb is failed : %d", ret);
+ }
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_ANCS_POSITIVE_ACTION: {
+ char value[6];
+ char *noti_id = NULL;
+ int id;
+
+ if (g_test_param.param_count == 0) {
+ TC_PRT("Input parameters first");
+ break;
+ }
+
+ noti_id = g_test_param.params[0];
+ id = atoi(noti_id);
+
+ value[0] = 0x02;
+ memcpy(&value[1], &id, sizeof(int));
+ value[5] = 0x00;
+
+ __ancs_write_value_to_control_point(client, value, sizeof(value));
+
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_ANCS_NEGATIVE_ACTION: {
+ char value[6];
+ char *noti_id = NULL;
+ int id;
+
+ if (g_test_param.param_count == 0) {
+ TC_PRT("Input parameters first");
+ break;
+ }
+
+ noti_id = g_test_param.params[0];
+ id = atoi(noti_id);
+
+ value[0] = 0x02;
+ memcpy(&value[1], &id, sizeof(int));
+ value[5] = 0x01;
+
+ __ancs_write_value_to_control_point(client, value, sizeof(value));
+
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_ANCS_GET_NOTI_ATTR: {
+ bt_gatt_h ancs_svc = NULL;
+ bt_gatt_h data_source = NULL;;
+ char *svc_uuid = "7905F431-B5CE-4E99-A40F-4B1E122D00D0";
+ char *chr_uuid = "22EAC6E9-24D6-4BB5-BE44-B36ACE7C7BFB";
+
+ char value[19];
+ char *noti_id = NULL;
+ int id;
+
+ if (g_test_param.param_count == 0) {
+ TC_PRT("Input parameters first");
+ break;
+ }
+
+ ret = bt_gatt_client_get_service(client, svc_uuid, &ancs_svc);
+ if (ret != BT_ERROR_NONE) {
+ TC_PRT("bt_gatt_client_get_service is failed : %d", ret);
+ break;
+ }
+
+ ret = bt_gatt_service_get_characteristic(ancs_svc, chr_uuid, &data_source);
+ if (ret != BT_ERROR_NONE) {
+ TC_PRT("bt_gatt_service_get_characteristic is failed : %d", ret);
+ break;
+ }
+
+ ret = bt_gatt_client_set_characteristic_value_changed_cb(data_source,
+ __bt_gatt_client_value_changed_cb, NULL);
+ if (ret != BT_ERROR_NONE) {
+ TC_PRT("bt_gatt_client_set_characteristic_value_changed_cb is failed : %d", ret);
+ }
+
+ noti_id = g_test_param.params[0];
+ id = atoi(noti_id);
+
+ value[0] = 0x00;
+ memcpy(&value[1], &id, sizeof(int));
+ value[5] = 0x00;
+ value[6] = 0x01;
+ value[7] = 0xff;
+ value[8] = 0x00;
+ value[9] = 0x02;
+ value[10] = 0xff;
+ value[11] = 0x00;
+ value[12] = 0x03;
+ value[13] = 0xff;
+ value[14] = 0x00;
+ value[15] = 0x04;
+ value[16] = 0x05;
+ value[17] = 0x06;
+ value[18] = 0x07;
+
+ __ancs_write_value_to_control_point(client, value, sizeof(value));
+
+ break;
+ }
+#ifdef BT_ENABLE_LEGACY_GATT_CLIENT
+ case BT_UNIT_TEST_FUNCTION_GATT_FOREACH_PRIMARY_SERVICES: {
+ __bt_free_gatt_services();
+
+ ret = bt_gatt_foreach_primary_services(remote_addr, __bt_gatt_primary_service_cb, NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ if (ret == BT_ERROR_NONE)
+ __select_index(&selected_service_index, "Select primary service :");
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_GATT_DISCOVER_CHARACTERISTICS: {
+ __bt_free_gatt_characteristics();
+
+ if (selected_service_index < 0) {
+ TC_PRT("Need to select primary service \n");
+ break;
+ }
+
+ ret = bt_gatt_discover_characteristics(service_clone[selected_service_index], __bt_gatt_characteristics_discovered_cb, NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ if (ret == BT_ERROR_NONE)
+ __select_index(&selected_char_index, "Select index :");
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_GATT_DISCOVER_CHARACTERISTIC_DESCRIPTORS: {
+ ret = bt_gatt_discover_characteristic_descriptor(characteristics[selected_char_index],
+ __bt_gatt_characteristic_descriptor_discovered_cb, NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_GATT_GET_SERVICE_UUID: {
+ char *uuid = NULL;
+ char *name = NULL;
+
+ if (selected_service_index < 0) {
+ TC_PRT("Need to select primary service \n");
+ break;
+ }
+
+ ret = bt_gatt_get_service_uuid(service_clone[selected_service_index], &uuid);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ } else {
+ bt_gatt_get_uuid_specification_name(uuid, &name);
+ TC_PRT("uuid: %s [%s]", uuid, name);
+ g_free(name);
+ g_free(uuid);
+ }
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_GATT_FOREACH_INCLUDED_SERVICES: {
+ __bt_free_gatt_characteristics_services();
+
+ if (selected_service_index < 0) {
+ TC_PRT("Need to select primary service \n");
+ break;
+ }
+
+ ret = bt_gatt_foreach_included_services(service_clone[selected_service_index], __bt_gatt_included_service_cb, NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_GATT_SET_CHARACTERISTIC_CHANGED_CB: {
+ ret = bt_gatt_set_characteristic_changed_cb(__bt_gatt_characteristic_changed_cb, NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_GATT_UNSET_CHARACTERISTIC_CHANGED_CB: {
+ ret = bt_gatt_unset_characteristic_changed_cb();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_GATT_GET_CHARACTERISTIC_DECLARATION: {
+ int i;
+ char *uuid = NULL;
+ char *name = NULL;
+ unsigned char *value = NULL;
+ int value_length = 0;
+
+ ret = bt_gatt_get_characteristic_declaration(characteristics_services[0], &uuid, &value, &value_length);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ } else {
+ bt_gatt_get_uuid_specification_name(uuid, &name);
+ TC_PRT("uuid: %s [%s]", uuid, name);
+
+ for (i = 0; i < value_length; i++) {
+ TC_PRT("value %c", value[i]);
+ }
+
+ g_free(uuid);
+ g_free(name);
+ g_free(value);
+ }
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_GATT_SET_CHARACTERISTIC_VALUE: {
+ unsigned char value[] = { 1 };
+ if (selected_char_index == 0) {
+ TC_PRT("Need to select charateristic value \n");
+ break;
+ }
+
+ ret = bt_gatt_set_characteristic_value(characteristics[selected_char_index], value, 1);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_GATT_SET_CHARACTERISTIC_VALUE_REQUEST: {
+ unsigned char value[] = { 1 };
+ if (selected_char_index == 0) {
+ TC_PRT("Need to select charateristic value \n");
+ break;
+ }
+
+ ret = bt_gatt_set_characteristic_value_request(characteristics[selected_char_index], value, 1,
+ __bt_gatt_char_write_cb);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_GATT_READ_CHARACTERISTIC_VALUE : {
+ if (selected_char_index == 0) {
+ TC_PRT("Need to select charateristic value \n");
+ break;
+ }
+
+ ret = bt_gatt_read_characteristic_value(characteristics[selected_char_index], __bt_gatt_char_read_cb);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_GATT_WATCH_CHARACTERISTIC_CHANGES: {
+ if (selected_service_index < 0) {
+ TC_PRT("Need to select primary service \n");
+ break;
+ }
+
+ ret = bt_gatt_watch_characteristic_changes(service_clone[selected_service_index]);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_GATT_UNWATCH_CHARACTERISTIC_CHANGES: {
+ ret = bt_gatt_unwatch_characteristic_changes(service_clone[selected_service_index]);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+#endif
+ case BT_UNIT_TEST_FUNCTION_ACTIVATE_FLAG_TO_SET_PARAMETERS:
+ need_to_set_params = true;
+ TC_PRT("Select the function again");
+ break;
+
+ default:
+ break;
+ }
+
break;
- case 72:
- ret = bt_opp_client_add_file("/opt/media/Images/image1.jpg");
- if (ret < BT_ERROR_NONE) {
- TC_PRT("failed with [0x%04x]", ret);
+ }
+ case BT_UNIT_TEST_TABLE_AVRCP: {
+ switch (test_id) {
+ case BT_UNIT_TEST_FUNCTION_AVRCP_TARGET_INITIALIZE:
+ ret = bt_avrcp_target_initialize(__bt_avrcp_target_connection_state_changed_cb, NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+
+ case BT_UNIT_TEST_FUNCTION_AVRCP_TARGET_DEINITIALIZE:
+ ret = bt_avrcp_target_deinitialize();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+
+ case BT_UNIT_TEST_FUNCTION_AVRCP_SET_EQUALIZER_STATE_CHANGED_CB:
+ ret = bt_avrcp_set_equalizer_state_changed_cb(__bt_avrcp_equalizer_state_changed_cb, NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+
+ case BT_UNIT_TEST_FUNCTION_AVRCP_SET_REPEAT_MODE_CHANGED_CB:
+ ret = bt_avrcp_set_repeat_mode_changed_cb(__bt_avrcp_repeat_mode_changed_cb, NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+
+ case BT_UNIT_TEST_FUNCTION_AVRCP_SET_SHUFFLE_MODE_CHANGED_CB:
+ ret = bt_avrcp_set_shuffle_mode_changed_cb(__bt_avrcp_shuffle_mode_changed_cb, NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+
+ case BT_UNIT_TEST_FUNCTION_AVRCP_SET_SCAN_MODE_CHANGED_CB:
+ ret = bt_avrcp_set_scan_mode_changed_cb(__bt_avrcp_scan_mode_changed_cb, NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+
+ case BT_UNIT_TEST_FUNCTION_AVRCP_UNSET_EQUALIZER_STATE_CHANGED_CB:
+ ret = bt_avrcp_unset_equalizer_state_changed_cb();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+
+ case BT_UNIT_TEST_FUNCTION_AVRCP_UNSET_REPEAT_MODE_CHANGED_CB:
+ ret = bt_avrcp_unset_repeat_mode_changed_cb();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+
+ case BT_UNIT_TEST_FUNCTION_AVRCP_UNSET_SHUFFLE_MODE_CHANGED_CB:
+ ret = bt_avrcp_unset_shuffle_mode_changed_cb();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+
+ case BT_UNIT_TEST_FUNCTION_AVRCP_UNSET_SCAN_MODE_CHANGED_CB:
+ ret = bt_avrcp_unset_scan_mode_changed_cb();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+
+ case BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_INITIALIZE:
+ ret = bt_avrcp_control_initialize(__bt_avrcp_control_connection_state_changed_cb, NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+
+ case BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_DEINITIALIZE:
+ ret = bt_avrcp_control_deinitialize();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+
+ case BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_CONNECT:
+ ret = bt_avrcp_control_connect(remote_addr);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+
+ case BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_DISCONNECT:
+ ret = bt_avrcp_control_disconnect(remote_addr);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+
+ case BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_PLAY:
+ ret = bt_avrcp_control_send_player_command(BT_AVRCP_CONTROL_PLAY);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+
+ case BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_STOP:
+ ret = bt_avrcp_control_send_player_command(BT_AVRCP_CONTROL_STOP);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+
+ case BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_PAUSE:
+ ret = bt_avrcp_control_send_player_command(BT_AVRCP_CONTROL_PAUSE);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+
+ case BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_FF:
+ ret = bt_avrcp_control_send_player_command(BT_AVRCP_CONTROL_FAST_FORWARD);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+
+ case BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_RW:
+ ret = bt_avrcp_control_send_player_command(BT_AVRCP_CONTROL_REWIND);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+
+ case BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_NEXT:
+ ret = bt_avrcp_control_send_player_command(BT_AVRCP_CONTROL_NEXT);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+
+ case BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_PREV: {
+ ret = bt_avrcp_control_send_player_command(BT_AVRCP_CONTROL_PREVIOUS);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_GET_REPEAT: {
+ bt_avrcp_repeat_mode_e mode = BT_AVRCP_REPEAT_MODE_GROUP;
+ ret = bt_avrcp_control_get_repeat_mode(&mode);
+ TC_PRT("Repet mode : %d returns %s\n", mode, __bt_get_error_message(ret));
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_SET_REPEAT: {
+ ret = bt_avrcp_control_set_repeat_mode(2);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_GET_SHUFFLE: {
+ bt_avrcp_shuffle_mode_e mode = BT_AVRCP_SHUFFLE_MODE_ALL_TRACK;
+ ret = bt_avrcp_control_get_shuffle_mode(&mode);
+ TC_PRT("Shuffle mode %d returns %s\n", mode, __bt_get_error_message(ret));
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_SET_SHUFFLE: {
+ ret = bt_avrcp_control_set_shuffle_mode(1);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_GET_POSITION: {
+ unsigned int position = 0;
+ ret = bt_avrcp_control_get_position(&position);
+ TC_PRT("position %d returns %s\n", position, __bt_get_error_message(ret));
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_GET_PLAY_STATUS: {
+ unsigned int status = 0;
+ ret = bt_avrcp_control_get_play_status(&status);
+ TC_PRT("status %d returns %s\n", status, __bt_get_error_message(ret));
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_GET_TRACK_INFO: {
+ bt_avrcp_metadata_attributes_info_s *track;
+ ret = bt_avrcp_control_get_track_info(&track);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ if (ret == BT_ERROR_NONE) {
+ TC_PRT("Title. %s\n", track->title);
+ TC_PRT("Artist %s\n", track->artist);
+ TC_PRT("Album %s\n", track->album);
+ TC_PRT("Genre %s\n", track->genre);
+ TC_PRT("Total tracks %d\n", track->total_tracks);
+ TC_PRT("Number %d\n", track->number);
+ TC_PRT("Duration %d\n", track->duration);
+ bt_avrcp_control_free_track_info(track);
+ }
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_AVRCP_SET_SONG_POSITION_CHANGED_CB:
+ ret = bt_avrcp_set_song_position_changed_cb(__bt_avrcp_song_position_changed_cb, NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+
+ case BT_UNIT_TEST_FUNCTION_AVRCP_SET_PLAY_STATE_CHANGED_CB:
+ ret = bt_avrcp_set_play_status_changed_cb(__bt_avrcp_player_state_changed_cb, NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+
+ case BT_UNIT_TEST_FUNCTION_AVRCP_SET_TRACK_INFO_CHANGED_CB:
+ ret = bt_avrcp_set_track_info_changed_cb(__bt_avrcp_track_info_changed_cb, NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+
+ case BT_UNIT_TEST_FUNCTION_AVRCP_UNSET_SONG_POSITION_CHANGED_CB:
+ ret = bt_avrcp_unset_song_position_changed_cb();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+
+ case BT_UNIT_TEST_FUNCTION_AVRCP_UNSET_PLAY_STATE_CHANGED_CB:
+ ret = bt_avrcp_unset_play_status_changed_cb();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+
+ case BT_UNIT_TEST_FUNCTION_AVRCP_UNSET_TRACK_INFO_CHANGED_CB:
+ ret = bt_avrcp_unset_track_info_changed_cb();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+
+ case BT_UNIT_TEST_FUNCTION_ACTIVATE_FLAG_TO_SET_PARAMETERS:
+ need_to_set_params = true;
+ TC_PRT("Select the function again");
+ break;
+
+ default:
+ break;
}
+
break;
- case 73:
- ret = bt_opp_client_clear_files();
- if (ret < BT_ERROR_NONE) {
- TC_PRT("failed with [0x%04x]", ret);
+ }
+ case BT_UNIT_TEST_TABLE_HID: {
+ switch (test_id) {
+ case BT_UNIT_TEST_FUNCTION_HID_HOST_INITIALIZE:
+ ret = bt_hid_host_initialize(__bt_hid_host_connection_state_changed_cb,
+ NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_HID_HOST_DEINITIALIZE:
+ ret = bt_hid_host_deinitialize();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_HID_HOST_CONNECT: {
+ ret = bt_hid_host_connect(remote_addr);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_HID_HOST_DISCONNECT: {
+ ret = bt_hid_host_disconnect(remote_addr);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
}
+
+ case BT_UNIT_TEST_FUNCTION_ACTIVATE_FLAG_TO_SET_PARAMETERS:
+ need_to_set_params = true;
+ TC_PRT("Select the function again");
+ break;
+
+ default:
+ break;
+ }
+
break;
- case 74: {
- char *address;
+ }
+#ifdef TIZEN_WEARABLE
+ case BT_UNIT_TEST_TABLE_HF: {
+ switch (test_id) {
+ case BT_UNIT_TEST_FUNCTION_HF_INITIALIZE:
+ ret = bt_hf_initialize();
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ } else if (ret == BT_ERROR_NONE) {
+ TC_PRT("Success");
+ }
+ break;
+ case BT_UNIT_TEST_FUNCTION_HF_DEINITIALIZE:
+ ret = bt_hf_deinitialize();
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ } else if (ret == BT_ERROR_NONE) {
+ TC_PRT("Success");
+ }
+ break;
+ case BT_UNIT_TEST_FUNCTION_HF_NOTIFY_CALL_ANSWER:
+ ret = bt_hf_notify_call_event(BT_HF_CALL_EVENT_ANSWER, "9663868998");
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ } else if (ret == BT_ERROR_NONE) {
+ TC_PRT("Success");
+ }
+ break;
+ case BT_UNIT_TEST_FUNCTION_HF_NOTIFY_SPEAKER_GAIN:
+ ret = bt_hf_notify_speaker_gain(10);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ } else if (ret == BT_ERROR_NONE) {
+ TC_PRT("Success");
+ }
+ break;
+ case BT_UNIT_TEST_FUNCTION_HF_SET_SPEAKER_GAIN_CB:
+ ret = bt_hf_set_speaker_gain_changed_cb(__bt_hf_speaker_gain_changed_cb, NULL);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ } else if (ret == BT_ERROR_NONE) {
+ TC_PRT("Success");
+ }
+ break;
+ case BT_UNIT_TEST_FUNCTION_HF_UNSET_SPEAKER_GAIN_CB:
+ ret = bt_hf_unset_speaker_gain_changed_cb();
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ } else if (ret == BT_ERROR_NONE) {
+ TC_PRT("Success");
+ }
+ break;
+ case BT_UNIT_TEST_FUNCTION_HF_NOTIFY_VOICE_REC_TRUE:
+ ret = bt_hf_notify_voice_recognition_state(true);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ } else if (ret == BT_ERROR_NONE) {
+ TC_PRT("Success");
+ }
+ break;
+ case BT_UNIT_TEST_FUNCTION_HF_NOTIFY_CALL_TERM:
+ ret = bt_hf_notify_call_event(BT_HF_CALL_EVENT_IDLE, "9663868998");
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ } else if (ret == BT_ERROR_NONE) {
+ TC_PRT("Success");
+ }
+ break;
+ case BT_UNIT_TEST_FUNCTION_HF_NOTIFY_CALL_INIT:
+ ret = bt_hf_notify_call_event(BT_HF_CALL_EVENT_DIAL, "9663868998");
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ } else if (ret == BT_ERROR_NONE) {
+ TC_PRT("Success");
+ }
+ break;
+ case BT_UNIT_TEST_FUNCTION_HF_NOTIFY_VOICE_REC_FALSE:
+ ret = bt_hf_notify_voice_recognition_state(false);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ } else if (ret == BT_ERROR_NONE) {
+ TC_PRT("Success");
+ }
+ break;
+ case BT_UNIT_TEST_FUNCTION_HF_IS_SCO_OPENED: {
+ bool is_opened = false;
+ ret = bt_hf_is_sco_opened(&is_opened);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ TC_PRT("Sco is opened [%s]", is_opened ? "YES" : "NO");
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_HF_GET_CODEC_ID: {
+ unsigned int codec_id = 0;
+ ret = bt_hf_get_codec_id(&codec_id);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ TC_PRT("Codec ID [%d]", codec_id);
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_HF_GET_CALL_STATUS_INFO_LIST: {
+ GSList *list;
+ ret = bt_hf_get_call_status_info_list(&list);
- address = g_strdup("00:02:37:A9:17:9E");
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ } else {
+ for (; list; list = g_slist_next(list)) {
+ bt_hf_call_status_info_s *call_info = list->data;
+ TC_PRT("Call info [No:%s, Dir:%d, Stat:%d, Mpt:%d, Idx:%d]",
+ call_info->number, call_info->direction, call_info->status, call_info->multi_party, call_info->index);
+ }
+ bt_hf_free_call_status_info_list(list);
+ }
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_HF_SET_SCO_CHANGED_CB:
+ ret = bt_hf_set_sco_state_changed_cb(
+ __bt_hf_sco_state_changed_cb, NULL);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ } else if (ret == BT_ERROR_NONE) {
+ TC_PRT("Success");
+ }
+ break;
+ case BT_UNIT_TEST_FUNCTION_HF_UNSET_SCO_CHANGED_CB:
+ ret = bt_hf_unset_sco_state_changed_cb();
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ } else if (ret == BT_ERROR_NONE) {
+ TC_PRT("Success");
+ }
+ break;
+ case BT_UNIT_TEST_FUNCTION_HF_SET_CALL_EVENT_CB:
+ ret = bt_hf_set_call_handling_event_cb(__bt_hf_set_call_handling_event_cb, NULL);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ } else if (ret == BT_ERROR_NONE) {
+ TC_PRT("Success");
+ }
+ break;
+ case BT_UNIT_TEST_FUNCTION_HF_UNSET_CALL_EVENT_CB:
+ ret = bt_hf_unset_call_handling_event_cb();
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ } else if (ret == BT_ERROR_NONE) {
+ TC_PRT("Success");
+ }
+ break;
+ case BT_UNIT_TEST_FUNCTION_HF_SET_CALL_STATUS_UPDATED_EVENT_CB:
+ ret = bt_hf_set_call_status_updated_event_cb(__bt_hf_call_status_updated_event_cb, NULL);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ } else if (ret == BT_ERROR_NONE) {
+ TC_PRT("Success");
+ }
+ break;
+ case BT_UNIT_TEST_FUNCTION_HF_UNSET_CALL_STATUS_UPDATED_EVENT_CB:
+ ret = bt_hf_unset_call_status_updated_event_cb();
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ } else if (ret == BT_ERROR_NONE) {
+ TC_PRT("Success");
+ }
+ break;
+ case BT_UNIT_TEST_FUNCTION_ACTIVATE_FLAG_TO_SET_PARAMETERS:
+ need_to_set_params = true;
+ TC_PRT("Select the function again");
+ break;
- ret = bt_opp_client_push_files(address,__bt_opp_client_push_responded_cb,
- __bt_opp_client_push_progress_cb,
- __bt_opp_client_push_finished_cb,
- NULL);
- if (ret < BT_ERROR_NONE) {
- TC_PRT("failed with [0x%04x]", ret);
+ default:
+ break;
}
+
break;
}
- case 75:
- ret = bt_opp_client_cancel_push();
- if (ret < BT_ERROR_NONE) {
- TC_PRT("failed with [0x%04x]", ret);
+ case BT_UNIT_TEST_TABLE_PBAP_CLIENT: {
+ switch (test_id) {
+
+ /*PBAP Test Cases */
+ case BT_UNIT_TEST_FUNCTION_PBAP_CLIENT_INITIALIZE:
+ ret = bt_pbap_init();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_PBAP_CLIENT_DEINITIALIZE:
+ ret = bt_pbap_deinit();
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ case BT_UNIT_TEST_FUNCTION_PBAP_CLIENT_CONNECT: {
+ ret = bt_pbap_connect(remote_addr, __bt_pbap_enabled_cb, NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_PBAP_CLIENT_DISCONNECT: {
+ ret = bt_pbap_disconnect(remote_addr, __bt_pbap_enabled_cb, NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_PBAP_CLIENT_GETSIZE: {
+ ret = bt_pbap_get_phonebook_size(remote_addr, 0, 0, __bt_pbap_phonebook_size_cb, NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
}
+ case BT_UNIT_TEST_FUNCTION_PBAP_CLIENT_PHONEBOOKPULL: {
+ long long unsigned fields = BT_PBAP_FIELD_PHOTO | BT_PBAP_FIELD_EMAIL | BT_PBAP_FIELD_ORG;
+ ret = bt_pbap_get_phonebook(remote_addr, 0, 0, 0, 0, 0, 100,
+ fields, __bt_pbap_phonebook_pull_cb, NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_PBAP_CLIENT_VCARDLIST: {
+ ret = bt_pbap_get_list(remote_addr, 0, 0, 0, 0, 100,
+ __bt_pbap_vcard_list_cb, NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_PBAP_CLIENT_VCARDPULL: {
+ long long unsigned fields = BT_PBAP_FIELD_PHOTO | BT_PBAP_FIELD_EMAIL | BT_PBAP_FIELD_ORG;
+ ret = bt_pbap_pull_vcard(remote_addr, 0, 0, 0, 0, fields,
+ __bt_pbap_phonebook_pull_cb, NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_PBAP_CLIENT_PHONEBOOKSEARCH: {
+ ret = bt_pbap_phonebook_search(remote_addr, 0, 0,
+ 0, "abc",
+ 0, 0, 100,
+ __bt_pbap_vcard_list_cb, NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_PBAP_CLIENT_VCARDLIST_MAXLIST_ZERO: {
+ ret = bt_pbap_get_list(remote_addr, 0, 0, 0, 0, 0,
+ __bt_pbap_vcard_list_cb, NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
+
+ case BT_UNIT_TEST_FUNCTION_ACTIVATE_FLAG_TO_SET_PARAMETERS:
+ need_to_set_params = true;
+ TC_PRT("Select the function again");
+ break;
+
+ default:
+ break;
+ }
+
break;
+ }
+#endif
+ case BT_UNIT_TEST_TABLE_AUTOMATED_TEST: {
+ static unsigned int delay = 0;
+ bt_onoff_cnt = 0;
+ bt_onoff_cnt_success = 0;
+ bt_onoff_cnt_fail = 0;
+ bt_onoff_timer = time(NULL);
+
+ if (input_automated_test_delay == true) {
+ delay = test_id;
+ test_id = BT_UNIT_TEST_FUNCTION_ON_OFF_REPEAT_TEST_N_SEC_DELAY;
+ }
+
+ switch (test_id) {
+ /*Automated Test Cases */
+ case BT_UNIT_TEST_FUNCTION_ON_OFF_REPEAT_TEST: {
+ bt_adapter_state_e state = BT_ADAPTER_DISABLED;
+ delay = 0;
+
+ ret = bt_adapter_set_state_changed_cb(__bt_repeat_test_adapter_state_changed_cb, &delay);
+ TC_PRT("set_cb returns %s\n", __bt_get_error_message(ret));
+
+ ret = bt_adapter_get_state(&state);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ TC_PRT("Current state: %d", state);
+
+ if (state == BT_ADAPTER_DISABLED)
+ bt_adapter_enable();
+ else
+ bt_adapter_disable();
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_ON_OFF_REPEAT_TEST_1_SEC_DELAY: {
+ bt_adapter_state_e state = BT_ADAPTER_DISABLED;
+ delay = 1;
+
+ ret = bt_adapter_set_state_changed_cb(__bt_repeat_test_adapter_state_changed_cb, &delay);
+ TC_PRT("set_cb returns %s\n", __bt_get_error_message(ret));
+
+ ret = bt_adapter_get_state(&state);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ TC_PRT("Current state: %d", state);
+ if (state == BT_ADAPTER_DISABLED)
+ bt_adapter_enable();
+ else
+ bt_adapter_disable();
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_ON_OFF_REPEAT_TEST_N_SEC_DELAY: {
+ bt_adapter_state_e state = BT_ADAPTER_DISABLED;
+
+ input_automated_test_delay = false;
+
+ ret = bt_adapter_set_state_changed_cb(__bt_repeat_test_adapter_state_changed_cb, &delay);
+ TC_PRT("set_cb returns %s\n", __bt_get_error_message(ret));
+
+ ret = bt_adapter_get_state(&state);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ TC_PRT("Current state: %d", state);
+
+ if (state == BT_ADAPTER_DISABLED)
+ bt_adapter_enable();
+ else
+ bt_adapter_disable();
+ break;
+ }
+ default:
+ break;
+ }
+
+ break;
+ }
default:
break;
}
@@ -478,31 +5382,81 @@ static gboolean key_event_cb(GIOChannel *chan,
unsigned int len = 0;
int test_id;
+ bool is_call_api = false;
+
+ if (is_sub_index)
+ return TRUE;
memset(buf, 0, sizeof(buf));
- if(g_io_channel_read_chars(chan, buf, sizeof(buf),
+ if (g_io_channel_read_chars(chan, buf, sizeof(buf),
&len, NULL) == G_IO_STATUS_ERROR) {
TC_PRT("IO Channel read error");
return FALSE;
}
- TC_PRT("%s", buf);
- tc_usage_print();
+ if (need_to_set_params == true) {
+ if (g_test_id == -1) {
+ test_id = atoi(buf);
+ g_test_id = test_id;
+ }
+ test_set_params(g_test_id, buf);
+ return TRUE;
+ } else {
+ TC_PRT("%s", buf);
+ test_id = atoi(buf);
+
+ g_test_id = -1;
+ need_to_set_params = false;
+ }
- test_id = atoi(buf);
+ if (current_tc_table == BT_UNIT_TEST_TABLE_MAIN) {
+ if (buf[0] == '0' && buf[2] == 0)
+ current_tc_table = BT_UNIT_TEST_TABLE_SET_ADDRESS;
+ else if(test_id >= BT_UNIT_TEST_TABLE_ADAPTER && test_id < BT_UNIT_TEST_TABLE_FINISH)
+ current_tc_table = test_id;
+ else
+ is_call_api = true;
+ } else {
+ if (buf[0] == '0' && buf[2] == 0) {
+ current_tc_table = BT_UNIT_TEST_TABLE_MAIN;
+ } else if (current_tc_table == BT_UNIT_TEST_TABLE_AUTOMATED_TEST
+ && test_id == BT_UNIT_TEST_FUNCTION_ON_OFF_REPEAT_TEST_N_SEC_DELAY
+ && input_automated_test_delay == false) {
+ input_automated_test_delay = true;
+ } else {
+ is_call_api = true;
+ }
+ }
- if(test_id)
+ tc_usage_print();
+
+ if (current_tc_table == BT_UNIT_TEST_TABLE_SET_ADDRESS && is_call_api == true) {
+ memcpy (remote_addr, buf, 17);
+ remote_addr[17] = 0;
+ } else if (test_id && is_call_api)
g_idle_add(test_input_callback, (void *)test_id);
return TRUE;
}
+void sig_handler(int signo)
+{
+ if (signo == SIGINT) {
+ if (bt_onoff_cnt > 0)
+ __bt_repeat_test_onoff_count_time_summary();
+
+ bt_deinitialize();
+ exit(0);
+ }
+}
+
int main()
{
GIOChannel *key_io;
- g_type_init();
+// g_type_init();
+ current_tc_table = BT_UNIT_TEST_TABLE_MAIN;
key_io = g_io_channel_unix_new(fileno(stdin));
@@ -516,10 +5470,12 @@ int main()
main_loop = g_main_loop_new(NULL, FALSE);
+ if (signal(SIGINT, sig_handler) == SIG_ERR)
+ TC_PRT("\n can't catch SIGINT\n");
+
g_main_loop_run(main_loop);
bt_deinitialize();
return 0;
}
-
diff --git a/test/bt_unit_test.h b/test/bt_unit_test.h
new file mode 100644
index 0000000..cc02183
--- /dev/null
+++ b/test/bt_unit_test.h
@@ -0,0 +1,354 @@
+/*
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef __TIZEN_NETWORK_BLUETOOTH_UNIT_TEST_H__
+#define __TIZEN_NETWORK_BLUETOOTH_UNIT_TEST_H__
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define BUFFER_LEN 49
+#define MAX_SERVICES 10
+#define PRT(format, args...) printf("%s:%d() "format, __FUNCTION__, __LINE__, ##args)
+#define TC_PRT(format, args...) PRT(format"\n", ##args)
+
+typedef enum
+{
+ BT_UNIT_TEST_TABLE_MAIN = 1,
+ BT_UNIT_TEST_TABLE_SET_ADDRESS,
+ BT_UNIT_TEST_TABLE_ADAPTER,
+ BT_UNIT_TEST_TABLE_ADAPTER_LE,
+ BT_UNIT_TEST_TABLE_DEVICE,
+ BT_UNIT_TEST_TABLE_SOCKET,
+ BT_UNIT_TEST_TABLE_OPP,
+ BT_UNIT_TEST_TABLE_AUDIO,
+ BT_UNIT_TEST_TABLE_PAN,
+ BT_UNIT_TEST_TABLE_GATT,
+ BT_UNIT_TEST_TABLE_AVRCP,
+ BT_UNIT_TEST_TABLE_HID,
+#ifdef TIZEN_WEARABLE
+ BT_UNIT_TEST_TABLE_HF,
+ BT_UNIT_TEST_TABLE_PBAP_CLIENT,
+#endif
+ BT_UNIT_TEST_TABLE_AUTOMATED_TEST,
+ BT_UNIT_TEST_FUNCTION_INITIALIZE_ALL,
+ BT_UNIT_TEST_TABLE_FINISH = 0xFF,
+} bt_unit_test_table_e;
+
+typedef enum
+{
+ BT_UNIT_TEST_FUNCTION_BACK = 0,
+ BT_UNIT_TEST_FUNCTION_SET_ADDRESS = 0,
+ BT_UNIT_TEST_FUNCTION_INITIALIZE = 1,
+ BT_UNIT_TEST_FUNCTION_DEINITIALIZE,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_GET_STATE = 1,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_ENABLE,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_DISABLE,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_RECOVER,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_START_DEVICE_DISCOVERY,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_STOP_DEVICE_DISCOVERY,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_IS_DISCOVERING,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_FOREACH_BONDED_DEVICE,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_GET_BONDED_DEVICE_INFO,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_IS_SERVICE_USED,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_GET_VISIBILITY,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_SET_DEVICE_DISCOVERY_STATE_CHANGED_CB,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_UNSET_DEVICE_DISCOVERY_STATE_CHANGED_CB,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_GET_LOCAL_OOB_DATA,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_SET_LOCAL_OOB_DATA,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_REMOVE_REMOTE_OOB_DATA,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_SET_VISIBILITY_MODE_CHANGED_CB,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_UNSET_VISIBILITY_MODE_CHANGED_CB,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_SET_VISIBILITY_DURATION_CHANGED_CB,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_UNSET_VISIBILITY_DURATION_CHANGED_CB,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_SET_CONNECTABLE_CHANGED_CB,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_UNSET_CONNECTABLE_CHANGED_CB,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_GET_CONNECTABLE,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_SET_CONNECTABLE,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_GET_VERSION,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_GET_LOCAL_INFO,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_SET_MANUFACTURER_DATA_CHANGED_CB,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_UNSET_MANUFACTURER_DATA_CHANGED_CB,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_SET_MANUFACTURER_DATA,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_LE_GET_STATE = 1,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_LE_ENABLE,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_LE_DISABLE,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_LE_SET_SCAN_MODE,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_LE_START_SCAN,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_LE_STOP_SCAN,
+#ifndef TIZEN_WEARABLE
+ BT_UNIT_TEST_FUNCTION_ADAPTER_LE_START_DEVICE_DISCOVERY,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_LE_STOP_DEVICE_DISCOVERY,
+#endif
+ BT_UNIT_TEST_FUNCTION_ADAPTER_LE_ADD_ADVERTISING_DATA,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_LE_SET_ADVERTISING_MODE,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_LE_SET_ADVERTISING_FILTER_POLICY,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_LE_SET_ADVERTISING_CONNECTABLE,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_LE_START_ADVERTISING_NEW,
+#ifndef TIZEN_WEARABLE
+ BT_UNIT_TEST_FUNCTION_ADAPTER_LE_START_ADVERTISING,
+#endif
+ BT_UNIT_TEST_FUNCTION_ADAPTER_LE_STOP_ADVERTISING,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_LE_ADD_WHITE_LIST,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_LE_REMOVE_WHITE_LIST,
+#ifndef TIZEN_WEARABLE
+ BT_UNIT_TEST_FUNCTION_ADAPTER_LE_CLEAR_WHITE_LIST,
+#endif
+ BT_UNIT_TEST_FUNCTION_ADAPTER_LE_ENABLE_PRIVACY,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_LE_REGISTER_SCAN_FILTER_DEVICE_ADDRESS,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_LE_REGISTER_SCAN_FILTER_SERVICE_UUID,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_LE_REGISTER_SCAN_FILTER_SERVICE_SOLICITATION_UUID,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_LE_UNREGISTER_ALL_SCAN_FILTERS,
+#ifndef TIZEN_WEARABLE
+ BT_UNIT_TEST_FUNCTION_ADAPTER_LE_SET_DEVICE_DISCOVERY_STATE_CHANGED_CB,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_LE_UNSET_DEVICE_DISCOVERY_STATE_CHANGED_CB,
+#endif
+ BT_UNIT_TEST_FUNCTION_DEVICE_SET_AUTHORIZATION_TRUE = 1,
+ BT_UNIT_TEST_FUNCTION_DEVICE_SET_AUTHORIZATION_FALSE,
+ BT_UNIT_TEST_FUNCTION_DEVICE_SET_AUTHORIZATION_CHANGED_CB,
+ BT_UNIT_TEST_FUNCTION_DEVICE_UNSET_AUTHORIZATION_CHANGED_CB,
+ BT_UNIT_TEST_FUNCTION_DEVICE_SET_CONNECTION_STAET_CHANGED_CB,
+ BT_UNIT_TEST_FUNCTION_DEVICE_UNSET_CONNECTION_STAET_CHANGED_CB,
+ BT_UNIT_TEST_FUNCTION_DEVICE_FOREACH_CONNECTED_PROFILES,
+ BT_UNIT_TEST_FUNCTION_DEVICE_IS_PROFILE_CONNECTED,
+ BT_UNIT_TEST_FUNCTION_DEVICE_SET_BOND_CREATED_CB,
+ BT_UNIT_TEST_FUNCTION_DEVICE_SET_BOND_DESTROYED_CB,
+ BT_UNIT_TEST_FUNCTION_DEVICE_CREATE_BOND,
+ BT_UNIT_TEST_FUNCTION_DEVICE_CREATE_BOND_BY_TYPE,
+ BT_UNIT_TEST_FUNCTION_DEVICE_DESTROY_BOND,
+ BT_UNIT_TEST_FUNCTION_DEVICE_ENABLE_RSSI_MONITOR,
+ BT_UNIT_TEST_FUNCTION_DEVICE_DISABLE_RSSI_MONITOR,
+ BT_UNIT_TEST_FUNCTION_DEVICE_GET_RSSI_STRENGTH,
+ BT_UNIT_TEST_FUNCTION_DEVICE_GET_CONNECTION_STATE,
+ BT_UNIT_TEST_FUNCTION_SOCKET_CREATE_RFCOMM = 1,
+ BT_UNIT_TEST_FUNCTION_SOCKET_DESTROY_RFCOMM,
+ BT_UNIT_TEST_FUNCTION_SOCKET_LISTEN_AND_ACCEPT_RFCOMM,
+ BT_UNIT_TEST_FUNCTION_SOCKET_LISTEN,
+ BT_UNIT_TEST_FUNCTION_SOCKET_ACCEPT,
+ BT_UNIT_TEST_FUNCTION_SOCKET_REJECT,
+ BT_UNIT_TEST_FUNCTION_SOCKET_CONNECT_RFCOMM,
+ BT_UNIT_TEST_FUNCTION_SOCKET_DISCONNECT_RFCOMM,
+ BT_UNIT_TEST_FUNCTION_SOCKET_SEND_DATA,
+ BT_UNIT_TEST_FUNCTION_SOCKET_CREATE_RFCOMM_CUSTOM_UUID,
+ BT_UNIT_TEST_FUNCTION_SOCKET_DESTROY_RFCOMM_CUSTOM_UUID,
+ BT_UNIT_TEST_FUNCTION_SOCKET_LISTEN_AND_ACCEPT_RFCOMM_CUSTOM_UUID,
+ BT_UNIT_TEST_FUNCTION_SOCKET_CONNECT_RFCOMM_CUSTOM_UUID,
+ BT_UNIT_TEST_FUNCTION_SOCKET_DISCONNECT_RFCOMM_CUSTOM_UUID,
+ BT_UNIT_TEST_FUNCTION_SOCKET_SEND_DATA_CUSTOM_UUID,
+ BT_UNIT_TEST_FUNCTION_SOCKET_SET_DATA_RECEIVED_CB,
+ BT_UNIT_TEST_FUNCTION_SOCKET_UNSET_DATA_RECEIVED_CB,
+ BT_UNIT_TEST_FUNCTION_SOCKET_SET_CONNECTION_REQUESTED_CB,
+ BT_UNIT_TEST_FUNCTION_SOCKET_UNSET_CONNECTION_REQUESTED_CB,
+ BT_UNIT_TEST_FUNCTION_SOCKET_SET_CONNECTION_STATE_CHANGED_CB,
+ BT_UNIT_TEST_FUNCTION_SOCKET_UNSET_CONNECTION_STATE_CHANGED_CB,
+ BT_UNIT_TEST_FUNCTION_OPP_CLIENT_INITIALIZE = 1,
+ BT_UNIT_TEST_FUNCTION_OPP_CLIENT_DEINITIALIZE,
+ BT_UNIT_TEST_FUNCTION_OPP_CLIENT_ADD_FILE,
+ BT_UNIT_TEST_FUNCTION_OPP_CLIENT_CLEAR_FILES,
+ BT_UNIT_TEST_FUNCTION_OPP_CLIENT_PUSH_FILES,
+ BT_UNIT_TEST_FUNCTION_OPP_CLIENT_CANCEL_PUSH,
+ BT_UNIT_TEST_FUNCTION_AUDIO_INITIALIZE = 1,
+ BT_UNIT_TEST_FUNCTION_AUDIO_DEINITIALIZE,
+ BT_UNIT_TEST_FUNCTION_AUDIO_CONNECT,
+ BT_UNIT_TEST_FUNCTION_AUDIO_DISCONNECT,
+ BT_UNIT_TEST_FUNCTION_AUDIO_SOURCE_CONNECT,
+ BT_UNIT_TEST_FUNCTION_AUDIO_SOURCE_DISCONNECT,
+ BT_UNIT_TEST_FUNCTION_AUDIO_SET_CONNECTION_STATE_CHANGED_CB,
+ BT_UNIT_TEST_FUNCTION_AUDIO_UNSET_CONNECTION_STATE_CHANGED_CB,
+ BT_UNIT_TEST_FUNCTION_A2DP_AUDIO_SET_CONNECTION_STATE_CB,
+ BT_UNIT_TEST_FUNCTION_A2DP_AUDIO_UNSET_CONNECTION_STATE_CB,
+ BT_UNIT_TEST_FUNCTION_AG_OPEN_SCO,
+ BT_UNIT_TEST_FUNCTION_AG_CLOSE_SCO,
+ BT_UNIT_TEST_FUNCTION_AG_IS_SCO_OPENED,
+ BT_UNIT_TEST_FUNCTION_AG_SET_SCO_STATE_CHANGED_CB,
+ BT_UNIT_TEST_FUNCTION_AG_UNSET_SCO_STATE_CHANGED_CB,
+ BT_UNIT_TEST_FUNCTION_AG_IS_CONNECTED,
+ BT_UNIT_TEST_FUNCTION_AG_CALL_EVENT_IDLE,
+ BT_UNIT_TEST_FUNCTION_AG_CALL_EVENT_ANSWERED,
+ BT_UNIT_TEST_FUNCTION_AG_CALL_EVENT_DIALING,
+ BT_UNIT_TEST_FUNCTION_AG_CALL_EVENT_ALERTING,
+ BT_UNIT_TEST_FUNCTION_AG_CALL_EVENT_INCOMING,
+ BT_UNIT_TEST_FUNCTION_CALL_LIST_CREATE,
+ BT_UNIT_TEST_FUNCTION_CALL_LIST_DESTROY,
+ BT_UNIT_TEST_FUNCTION_CALL_LIST_RESET,
+ BT_UNIT_TEST_FUNCTION_CALL_LIST_ADD,
+ BT_UNIT_TEST_FUNCTION_AG_NOTIFY_CALL_LIST,
+ BT_UNIT_TEST_FUNCTION_AG_SET_CALL_HANDLING_EVENT_CB,
+ BT_UNIT_TEST_FUNCTION_AG_IS_NREC_ENABLED,
+ BT_UNIT_TEST_FUNCTION_AG_IS_WBS_MODE,
+ BT_UNIT_TEST_FUNCTION_AG_SET_VENDOR_CMD_CB,
+ BT_UNIT_TEST_FUNCTION_AG_UNSET_VENDOR_CMD_CB,
+ BT_UNIT_TEST_FUNCTION_AG_NOTIFY_VENDOR_CMD,
+ BT_UNIT_TEST_FUNCTION_A2DP_SET_CONTENT_PROTECTION_ENABLE,
+ BT_UNIT_TEST_FUNCTION_A2DP_SET_CONTENT_PROTECTION_DISABLE,
+ BT_UNIT_TEST_FUNCTION_NAP_ACTIVATE = 1,
+ BT_UNIT_TEST_FUNCTION_NAP_DEACTIVATE,
+ BT_UNIT_TEST_FUNCTION_NAP_DISCONNECT_ALL,
+ BT_UNIT_TEST_FUNCTION_NAP_DISCONNECT,
+ BT_UNIT_TEST_FUNCTION_PANU_SET_CONNECTION_STATE_CHANGED_CB,
+ BT_UNIT_TEST_FUNCTION_PANU_CONNECT,
+ BT_UNIT_TEST_FUNCTION_GATT_CONNECT = 1,
+ BT_UNIT_TEST_FUNCTION_GATT_DISCONNECT,
+ BT_UNIT_TEST_FUNCTION_SET_GATT_CONNECTION_STATE_CHANGED_CB,
+ BT_UNIT_TEST_FUNCTION_UNSET_GATT_CONNECTION_STATE_CHANGED_CB,
+ BT_UNIT_TEST_FUNCTION_GATT_CLIENT_CREATE,
+ BT_UNIT_TEST_FUNCTION_GATT_CLIENT_DESTROY,
+ BT_UNIT_TEST_FUNCTION_GATT_CLIENT_GET_REMOTE_ADDRESS,
+ BT_UNIT_TEST_FUNCTION_GATT_CLIENT_PRINT_ALL,
+ BT_UNIT_TEST_FUNCTION_GATT_CLIENT_READ_VALUE,
+ BT_UNIT_TEST_FUNCTION_GATT_CLIENT_WRITE_VALUE,
+ BT_UNIT_TEST_FUNCTION_GATT_CLIENT_SET_CHAR_VALUE_CHANGED_CB,
+ BT_UNIT_TEST_FUNCTION_GATT_CLIENT_UNSET_CHAR_VALUE_CHANGED_CB,
+ BT_UNIT_TEST_FUNCTION_GATT_CLIENT_FOREACH_SERVICES,
+ BT_UNIT_TEST_FUNCTION_GATT_SERVER_INITIALIZE,
+ BT_UNIT_TEST_FUNCTION_GATT_SERVER_DEINITIALIZE,
+ BT_UNIT_TEST_FUNCTION_GATT_SERVER_UNREGISTER_ALL_SERVICES,
+ BT_UNIT_TEST_FUNCTION_GATT_SERVER_REGISTER_BATTERY_SVC,
+ BT_UNIT_TEST_FUNCTION_GATT_SERVER_CHANGE_BATTERY_LEVEL,
+ BT_UNIT_TEST_FUNCTION_GATT_SERVER_REGISTER_HEART_RATE_SVC,
+ BT_UNIT_TEST_FUNCTION_GATT_SERVER_NOTIFY_HEART_RATE_MEASUREMENT,
+ BT_UNIT_TEST_FUNCTION_GATT_SERVER_REGISTER_THERMOMETER_SVC,
+ BT_UNIT_TEST_FUNCTION_GATT_SERVER_CHANGE_THERMOMETER_MEASUREMENT,
+ BT_UNIT_TEST_FUNCTION_GATT_SERVER_REGISTER_DEVICE_INFORMATION_SVC,
+ BT_UNIT_TEST_FUNCTION_GATT_SERVER_REGISTER_LINK_LOSS_SVC,
+ BT_UNIT_TEST_FUNCTION_GATT_SERVER_REGISTER_CUSTOM_SVC,
+ BT_UNIT_TEST_FUNCTION_GATT_SERVER_CHANGE_CUSTOM_VAL,
+ BT_UNIT_TEST_FUNCTION_ANCS_PAIR,
+ BT_UNIT_TEST_FUNCTION_ANCS_WATCH,
+ BT_UNIT_TEST_FUNCTION_ANCS_POSITIVE_ACTION,
+ BT_UNIT_TEST_FUNCTION_ANCS_NEGATIVE_ACTION,
+ BT_UNIT_TEST_FUNCTION_ANCS_GET_NOTI_ATTR,
+#ifdef BT_ENABLE_LEGACY_GATT_CLIENT
+ BT_UNIT_TEST_FUNCTION_GATT_FOREACH_PRIMARY_SERVICES,
+ BT_UNIT_TEST_FUNCTION_GATT_DISCOVER_CHARACTERISTICS,
+ BT_UNIT_TEST_FUNCTION_GATT_DISCOVER_CHARACTERISTIC_DESCRIPTORS,
+ BT_UNIT_TEST_FUNCTION_GATT_GET_SERVICE_UUID,
+ BT_UNIT_TEST_FUNCTION_GATT_FOREACH_INCLUDED_SERVICES,
+ BT_UNIT_TEST_FUNCTION_GATT_SET_CHARACTERISTIC_CHANGED_CB,
+ BT_UNIT_TEST_FUNCTION_GATT_UNSET_CHARACTERISTIC_CHANGED_CB,
+ BT_UNIT_TEST_FUNCTION_GATT_GET_CHARACTERISTIC_DECLARATION,
+ BT_UNIT_TEST_FUNCTION_GATT_SET_CHARACTERISTIC_VALUE,
+ BT_UNIT_TEST_FUNCTION_GATT_SET_CHARACTERISTIC_VALUE_REQUEST,
+ BT_UNIT_TEST_FUNCTION_GATT_READ_CHARACTERISTIC_VALUE,
+ BT_UNIT_TEST_FUNCTION_GATT_WATCH_CHARACTERISTIC_CHANGES,
+ BT_UNIT_TEST_FUNCTION_GATT_UNWATCH_CHARACTERISTIC_CHANGES,
+#endif
+ BT_UNIT_TEST_FUNCTION_AVRCP_TARGET_INITIALIZE = 1,
+ BT_UNIT_TEST_FUNCTION_AVRCP_TARGET_DEINITIALIZE,
+ BT_UNIT_TEST_FUNCTION_AVRCP_SET_EQUALIZER_STATE_CHANGED_CB,
+ BT_UNIT_TEST_FUNCTION_AVRCP_SET_REPEAT_MODE_CHANGED_CB,
+ BT_UNIT_TEST_FUNCTION_AVRCP_SET_SHUFFLE_MODE_CHANGED_CB,
+ BT_UNIT_TEST_FUNCTION_AVRCP_SET_SCAN_MODE_CHANGED_CB,
+ BT_UNIT_TEST_FUNCTION_AVRCP_UNSET_EQUALIZER_STATE_CHANGED_CB,
+ BT_UNIT_TEST_FUNCTION_AVRCP_UNSET_REPEAT_MODE_CHANGED_CB,
+ BT_UNIT_TEST_FUNCTION_AVRCP_UNSET_SHUFFLE_MODE_CHANGED_CB,
+ BT_UNIT_TEST_FUNCTION_AVRCP_UNSET_SCAN_MODE_CHANGED_CB,
+ BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_INITIALIZE,
+ BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_DEINITIALIZE,
+ BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_CONNECT,
+ BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_DISCONNECT,
+ BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_PLAY,
+ BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_STOP,
+ BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_PAUSE,
+ BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_FF,
+ BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_RW,
+ BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_NEXT,
+ BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_PREV,
+ BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_GET_REPEAT,
+ BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_SET_REPEAT,
+ BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_GET_SHUFFLE,
+ BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_SET_SHUFFLE,
+ BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_GET_POSITION,
+ BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_GET_PLAY_STATUS,
+ BT_UNIT_TEST_FUNCTION_AVRCP_CONTROL_GET_TRACK_INFO,
+ BT_UNIT_TEST_FUNCTION_AVRCP_SET_SONG_POSITION_CHANGED_CB,
+ BT_UNIT_TEST_FUNCTION_AVRCP_SET_PLAY_STATE_CHANGED_CB,
+ BT_UNIT_TEST_FUNCTION_AVRCP_SET_TRACK_INFO_CHANGED_CB,
+ BT_UNIT_TEST_FUNCTION_AVRCP_UNSET_SONG_POSITION_CHANGED_CB,
+ BT_UNIT_TEST_FUNCTION_AVRCP_UNSET_PLAY_STATE_CHANGED_CB,
+ BT_UNIT_TEST_FUNCTION_AVRCP_UNSET_TRACK_INFO_CHANGED_CB,
+ BT_UNIT_TEST_FUNCTION_HID_HOST_INITIALIZE = 1,
+ BT_UNIT_TEST_FUNCTION_HID_HOST_DEINITIALIZE,
+ BT_UNIT_TEST_FUNCTION_HID_HOST_CONNECT,
+ BT_UNIT_TEST_FUNCTION_HID_HOST_DISCONNECT,
+#ifdef TIZEN_WEARABLE
+ BT_UNIT_TEST_FUNCTION_HF_INITIALIZE = 1,
+ BT_UNIT_TEST_FUNCTION_HF_DEINITIALIZE,
+ BT_UNIT_TEST_FUNCTION_HF_NOTIFY_CALL_ANSWER,
+ BT_UNIT_TEST_FUNCTION_HF_NOTIFY_CALL_INIT,
+ BT_UNIT_TEST_FUNCTION_HF_NOTIFY_CALL_TERM,
+ BT_UNIT_TEST_FUNCTION_HF_GET_CALL_STATUS_INFO_LIST,
+ BT_UNIT_TEST_FUNCTION_HF_SET_CALL_EVENT_CB,
+ BT_UNIT_TEST_FUNCTION_HF_UNSET_CALL_EVENT_CB,
+ BT_UNIT_TEST_FUNCTION_HF_SET_CALL_STATUS_UPDATED_EVENT_CB,
+ BT_UNIT_TEST_FUNCTION_HF_UNSET_CALL_STATUS_UPDATED_EVENT_CB,
+ BT_UNIT_TEST_FUNCTION_HF_NOTIFY_SPEAKER_GAIN,
+ BT_UNIT_TEST_FUNCTION_HF_SET_SPEAKER_GAIN_CB,
+ BT_UNIT_TEST_FUNCTION_HF_UNSET_SPEAKER_GAIN_CB,
+ BT_UNIT_TEST_FUNCTION_HF_NOTIFY_VOICE_REC_TRUE,
+ BT_UNIT_TEST_FUNCTION_HF_NOTIFY_VOICE_REC_FALSE,
+ BT_UNIT_TEST_FUNCTION_HF_IS_SCO_OPENED,
+ BT_UNIT_TEST_FUNCTION_HF_GET_CODEC_ID,
+ BT_UNIT_TEST_FUNCTION_HF_SET_SCO_CHANGED_CB,
+ BT_UNIT_TEST_FUNCTION_HF_UNSET_SCO_CHANGED_CB,
+ BT_UNIT_TEST_FUNCTION_HF_NOTIFY_VENDOR_CMD,
+ BT_UNIT_TEST_FUNCTION_HF_SET_VENDOR_CMD_EVENT_CB,
+ BT_UNIT_TEST_FUNCTION_HF_UNSET_VENDOR_CMD_EVENT_CB,
+ BT_UNIT_TEST_FUNCTION_PBAP_CLIENT_INITIALIZE = 1,
+ BT_UNIT_TEST_FUNCTION_PBAP_CLIENT_DEINITIALIZE,
+ BT_UNIT_TEST_FUNCTION_PBAP_CLIENT_CONNECT,
+ BT_UNIT_TEST_FUNCTION_PBAP_CLIENT_DISCONNECT,
+ BT_UNIT_TEST_FUNCTION_PBAP_CLIENT_GETSIZE,
+ BT_UNIT_TEST_FUNCTION_PBAP_CLIENT_PHONEBOOKPULL,
+ BT_UNIT_TEST_FUNCTION_PBAP_CLIENT_VCARDLIST,
+ BT_UNIT_TEST_FUNCTION_PBAP_CLIENT_VCARDPULL,
+ BT_UNIT_TEST_FUNCTION_PBAP_CLIENT_PHONEBOOKSEARCH,
+ BT_UNIT_TEST_FUNCTION_PBAP_CLIENT_VCARDLIST_MAXLIST_ZERO,
+#endif
+ BT_UNIT_TEST_FUNCTION_ON_OFF_REPEAT_TEST = 1,
+ BT_UNIT_TEST_FUNCTION_ON_OFF_REPEAT_TEST_1_SEC_DELAY,
+ BT_UNIT_TEST_FUNCTION_ON_OFF_REPEAT_TEST_N_SEC_DELAY,
+
+ BT_UNIT_TEST_FUNCTION_ACTIVATE_FLAG_TO_SET_PARAMETERS = 0XFF,
+} bt_unit_test_function_e;
+
+typedef struct {
+ const char *tc_name;
+ int tc_code;
+} tc_table_t;
+
+typedef struct {
+ int param_count;
+ char **params;
+} tc_params_t;
+
+#define BT_UNIT_TEST_PARAM_TYPE_BOOL "bool(true, false)"
+#define BT_UNIT_TEST_PARAM_TYPE_INT "int(1, 2, 10, 777...)"
+#define BT_UNIT_TEST_PARAM_TYPE_FLOAT "float(1.5, 0.625...)"
+#define BT_UNIT_TEST_PARAM_TYPE_STRING "string(abc, HAHA..)"
+#define BT_UNIT_TEST_PARAM_TYPE_BYTE_ARRAY "byte array(03FF0102, 0015836CF7B2...)"
+
+int test_input_callback(void *data);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __TIZEN_NETWORK_BLUETOOTH_UNIT_TEST_H__ */
diff --git a/test/capi.network.bluetooth.infinite.spp.test.rule b/test/capi.network.bluetooth.infinite.spp.test.rule
new file mode 100644
index 0000000..a5a4466
--- /dev/null
+++ b/test/capi.network.bluetooth.infinite.spp.test.rule
@@ -0,0 +1,4 @@
+capi-network-bluetooth-infinite-spp-test-server bt-service::public w
+capi-network-bluetooth-infinite-spp-test-server bt-service::platform rw
+capi-network-bluetooth-infinite-spp-test-client bt-service::public w
+capi-network-bluetooth-infinite-spp-test-client bt-service::platform rw
diff --git a/test/capi.network.bluetooth.test.rule b/test/capi.network.bluetooth.test.rule
new file mode 100644
index 0000000..59d60ad
--- /dev/null
+++ b/test/capi.network.bluetooth.test.rule
@@ -0,0 +1,2 @@
+capi-network-bluetooth-test bt-service::public w
+capi-network-bluetooth-test bt-service::platform rw
diff --git a/test/gatt_profile_test_suite/CMakeLists.txt b/test/gatt_profile_test_suite/CMakeLists.txt
new file mode 100644
index 0000000..dccbadd
--- /dev/null
+++ b/test/gatt_profile_test_suite/CMakeLists.txt
@@ -0,0 +1,22 @@
+SET(fw_test "${fw_name}-test")
+PROJECT(bt_unit_test_gatt C)
+
+INCLUDE(FindPkgConfig)
+pkg_check_modules(${fw_test} REQUIRED glib-2.0)
+FOREACH(flag ${${fw_test}_CFLAGS})
+ SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
+ENDFOREACH(flag)
+
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -Wall")
+
+SET(SOURCES
+bt_unit_test_gatt.c
+bt_unit_test_gatt_hr_profile.c
+)
+
+ADD_EXECUTABLE(${PROJECT_NAME} ${SOURCES})
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${fw_name} ${${fw_test}_LDFLAGS})
+
+INSTALL(TARGETS bt_unit_test_gatt DESTINATION bin)
+INSTALL(FILES capi.network.bluetooth.test.gatt.rule DESTINATION /etc/smack/accesses2.d/)
+
diff --git a/test/gatt_profile_test_suite/bt_unit_test_gatt.c b/test/gatt_profile_test_suite/bt_unit_test_gatt.c
new file mode 100644
index 0000000..db2c966
--- /dev/null
+++ b/test/gatt_profile_test_suite/bt_unit_test_gatt.c
@@ -0,0 +1,121 @@
+#include "bt_unit_test_gatt.h"
+#include <getopt.h>
+
+GMainLoop *main_loop = NULL;
+gatt_test_role_e role = GATT_ROLE_INVALID;
+bool gatt_debug = false;
+
+typedef void (*gatt_test_signal_handler) (int signo);
+
+gatt_test_signal_handler profile_signal_handler_cb = NULL;
+
+void sig_handler(int signo)
+{
+/* TODO: decide on what more to be done here. Should each profile register callback for this */
+ if(profile_signal_handler_cb)
+ profile_signal_handler_cb(signo);
+ exit(0);
+}
+
+static struct option main_options[] = {
+ { "heart-rate-profile", optional_argument, NULL, 'H' },
+ { "client", no_argument, NULL, 'c' },
+ { "server", no_argument, NULL, 's' },
+ { "help", no_argument, NULL, 'h' },
+ { }
+};
+
+
+void usage()
+{
+ USR_PRT("Usage:\tbt_unit_test_gatt <Role> [option[parameter]]\n\n"\
+ "\t Role:\n"\
+ "\t -c client role\n"\
+ "\t -s server role\n\n"\
+ "\t [option..]:\n"\
+ "\t -H <bd-addr> Heart rate Profile\n"\
+ "\t -d Debug enable\n"\
+ "\t -h Help Menu\n");
+}
+
+int main(int argc, char *argv[])
+{
+ GIOChannel *key_io;
+ int opt;
+ bool profile_selected = false;
+ char buf[BUFFER_LEN] = { 0 };
+// g_type_init();
+
+ key_io = g_io_channel_unix_new(fileno(stdin));
+
+ g_io_channel_set_encoding(key_io, NULL, NULL);
+ g_io_channel_set_flags(key_io, G_IO_FLAG_NONBLOCK, NULL);
+
+ while ((opt = getopt_long(argc, argv,
+ "H:hcsd", main_options, NULL)) != -1) {
+ switch(opt) {
+ case 'c':
+ if (role == GATT_ROLE_SERVER) {
+ USR_PRT(" both <role> can't be selected");
+ goto fail;
+ } else {
+ role = GATT_ROLE_CLIENT;
+ }
+ break;
+ case 's':
+ if (role == GATT_ROLE_CLIENT) {
+ USR_PRT("both <role> can't be selected");
+ goto fail;
+ } else {
+ role = GATT_ROLE_SERVER;
+ }
+ break;
+ case 'H':
+ if (role == GATT_ROLE_INVALID) {
+ USR_PRT("<role> parameter is missing");
+ usage();
+ exit(0);
+ }else if(role == GATT_ROLE_CLIENT) {
+ hr_client_initialize();
+ USR_PRT("Launching Heart rate profile test-suite");
+ memcpy(buf, optarg, sizeof(buf));
+ hr_client_accept_input(buf);
+ g_io_add_watch(key_io, G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL,
+ hr_client_key_event_cb, NULL);
+ g_io_channel_unref(key_io);
+ profile_selected = true;
+ profile_signal_handler_cb = hr_client_signal_handler;
+ } else {
+ //Heart-rate profile server
+ profile_selected = true;
+ }
+ break;
+ case 'd':
+ gatt_debug = true;
+ break;
+ case 'h':
+ default:
+ usage();
+ exit(0);
+ }
+ }
+
+ if(profile_selected == false) {
+ USR_PRT("No profile selected: So, nothing to do");
+ goto fail;
+ }
+
+ main_loop = g_main_loop_new(NULL, FALSE);
+
+ if (signal(SIGINT, sig_handler) == SIG_ERR)
+ USR_PRT("\n can't catch SIGINT\n");
+
+ g_main_loop_run(main_loop);
+
+ bt_deinitialize();
+
+ return 0;
+fail:
+ usage();
+ exit(0);
+}
diff --git a/test/gatt_profile_test_suite/bt_unit_test_gatt.h b/test/gatt_profile_test_suite/bt_unit_test_gatt.h
new file mode 100644
index 0000000..76df892
--- /dev/null
+++ b/test/gatt_profile_test_suite/bt_unit_test_gatt.h
@@ -0,0 +1,43 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdio.h>
+#include <string.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <glib.h>
+#include <ctype.h>
+#include <time.h>
+
+#include "bluetooth.h"
+#include "bluetooth_internal.h"
+#include "bluetooth_private.h"
+#include "bluetooth-telephony-api.h"
+
+#define PRT(format, args...) do { \
+ if (gatt_debug)\
+ printf("%s:%d() "format, __FUNCTION__, __LINE__, ##args);\
+}while(0)
+
+#define DBG_PRT(format, args...) PRT(format"\n", ##args)
+#define USR_PRT(format, args...) printf(format"\n", ##args)
+#define BUFFER_LEN 49
+
+typedef enum
+{
+ GATT_ROLE_INVALID = 0x00,
+ GATT_ROLE_CLIENT,
+ GATT_ROLE_SERVER,
+}gatt_test_role_e;
+
+
+int hr_client_initialize(void);
+void hr_client_signal_handler(int);
+
+void hr_client_accept_input(char *buf);
+
+gboolean hr_client_key_event_cb(GIOChannel *chan, GIOCondition cond,
+ gpointer data);
+
+
diff --git a/test/gatt_profile_test_suite/bt_unit_test_gatt_hr_profile.c b/test/gatt_profile_test_suite/bt_unit_test_gatt_hr_profile.c
new file mode 100644
index 0000000..41bea37
--- /dev/null
+++ b/test/gatt_profile_test_suite/bt_unit_test_gatt_hr_profile.c
@@ -0,0 +1,472 @@
+#include "bt_unit_test_gatt_hr_profile.h"
+
+extern bool gatt_debug;
+
+static hr_test_gatt_state_e test_cursor = BT_GATT_TEST_HR_INITIALIZATION;
+static bool input_valid = false;
+static bt_gatt_h hr_control_point_handle = NULL;
+
+static void __hr_client_scan_result_cb(int result,
+ bt_adapter_le_device_scan_result_info_s *info, void *user_data)
+{
+ if (info == NULL) {
+ DBG_PRT("No discovery_info!");
+ return;
+ }
+ if(!strcmp(info->remote_address, remote_addr)) {
+ bt_adapter_le_stop_scan();
+ if(bt_gatt_connect(remote_addr, false) != BT_ERROR_NONE)
+ test_cursor = BT_GATT_TEST_UNRECOVERABLE;
+ }
+}
+
+void __hr_client_search_and_connect()
+{
+ int ret;
+ ret = bt_adapter_le_start_scan(__hr_client_scan_result_cb, NULL);
+ if(ret != BT_ERROR_NONE)
+ test_cursor = BT_GATT_TEST_UNRECOVERABLE;
+}
+
+void __hr_client_initiate_connection()
+{
+ int ret;
+ USR_PRT("Make sure the remote device is turned on and visible");
+ USR_PRT("Please wait.. while we connect the device");
+
+ test_cursor = BT_GATT_TEST_TABLE_CONNECTING;
+
+ ret = bt_gatt_connect(remote_addr, false);
+ if(ret != BT_ERROR_NONE)
+ __hr_client_search_and_connect();
+}
+
+static void __hr_client_reset_energy_expended_cb(int result, bt_gatt_h request_handle,
+ void *user_data)
+{
+ if (result != BT_ERROR_NONE) {
+ USR_PRT("Reset of Energy expended value failed");
+ DBG_PRT("result code %d", result);
+ return;
+ }
+
+ USR_PRT("Reset of Energy expended value is complete");
+ return;
+}
+
+void __hr_client_reset_energy_expended()
+{
+ if (hr_control_point_handle) {
+ char reset = 0x01;
+ USR_PRT("Attempting to reset the energy expended");
+ bt_gatt_characteristic_set_write_type(hr_control_point_handle,
+ BT_GATT_WRITE_TYPE_WRITE);
+ bt_gatt_set_value(hr_control_point_handle, &reset, sizeof(reset));
+ bt_gatt_client_write_value(hr_control_point_handle, __hr_client_reset_energy_expended_cb, NULL);
+ } else
+ USR_PRT("Heart rate control point is not supported");
+}
+void __hr_client_measurement_cb(bt_gatt_h chr, char *value, int len,
+ void *user_data)
+{
+ int value_cursor = 0;
+ char flags;
+ DBG_PRT("len [%d]", len);
+ if(len < 1) {
+ DBG_PRT("invalid notification");
+ }
+ flags = value[0];
+ value_cursor++;
+
+ if((flags & HR_VALUE_FORMAT_MASK)) {
+ USR_PRT("Heart Rate Measurement Value %x %x", value[value_cursor], value[value_cursor+1]);
+ value_cursor += 2;
+ }else {
+ USR_PRT("Heart Rate Measurement Value %x", value[value_cursor]);
+ value_cursor++;
+ }
+
+ switch(flags & HR_SENSOR_CONTACT_STATUS_BIT_MASK) {
+ case 0x00:
+ USR_PRT("Sensor Contact feature is not supported in the current connection");
+ break;
+ case 0x02:
+ USR_PRT("Sensor Contact feature is not supported in the current connection");
+ break;
+ case 0x04:
+ USR_PRT("Sensor Contact feature is supported, but contact is not detected ");
+ break;
+ case 0x06:
+ USR_PRT("Sensor Contact feature is supported and contact is detected");
+ break;
+ default:
+ USR_PRT("unreachable code");
+ }
+ if(flags & HR_ENERGY_EXPENDED_BIT_MASK) {
+ USR_PRT("Energy Expended %x %x KJ", value[value_cursor], value[value_cursor + 1]);
+ if((value[value_cursor] == 0xff) && (value[value_cursor + 1] == 0xff))
+ __hr_client_reset_energy_expended();
+ value_cursor += 2;
+ }
+
+ if(flags & HR_RR_INTERVAL_BIT_MASK) {
+ while(value_cursor <= (len - 2)) {
+ USR_PRT("RR Interval %x %x", value[value_cursor], value[value_cursor+1]);
+ value_cursor += 2;
+ }
+ }
+
+}
+
+void __hr_client_print_sensor_loc(bt_gatt_h h)
+{
+ int ret;
+ char *value = NULL;
+ int len = 0;
+
+ ret = bt_gatt_get_value(h, &value, &len);
+ if (ret != BT_ERROR_NONE) {
+ DBG_PRT("bt_gatt_get_value is failed : %d", ret);
+ return;
+ }
+
+ if(len > 1) {
+ DBG_PRT("invalid sensor location value");
+ return;
+ }
+
+ switch(value[0]) {
+ case 0:
+ USR_PRT("location : other");
+ break;
+ case 1:
+ USR_PRT("location : Chest");
+ break;
+ case 2:
+ USR_PRT("location : Wrist");
+ break;
+ case 3:
+ USR_PRT("location : Finger");
+ break;
+ case 4:
+ USR_PRT("location : Hand");
+ break;
+ case 5:
+ USR_PRT("location : Ear Lobe");
+ break;
+ case 6:
+ USR_PRT("location : Foot");
+ break;
+ default:
+ USR_PRT("Invalid Location value.");
+ }
+ g_free(value);
+}
+
+void __hr_client_body_sensor_loc_cb(int result, bt_gatt_h gatt_handle, void *data)
+{
+
+ DBG_PRT("Read %s", result == BT_ERROR_NONE ? "Success" : "Fail");
+
+ if (result != BT_ERROR_NONE)
+ return;
+
+ __hr_client_print_sensor_loc(gatt_handle);
+
+ return;
+}
+void __hr_client_dev_inf_read_complete_cb(int result, bt_gatt_h gatt_handle, void *data)
+{
+ int ret;
+ char *str = NULL;
+ char *value = NULL;
+ int len = 0;
+ bool hex_format = false;
+ int i;
+
+ if (result != BT_ERROR_NONE) {
+ USR_PRT("error occured in reading");
+ DBG_PRT("error number =%d", result);
+ return;
+ }
+
+ ret = bt_gatt_get_value(gatt_handle, &value, &len);
+ if (ret != BT_ERROR_NONE) {
+ USR_PRT("error occured in reading");
+ DBG_PRT("error number =%d", result);
+ return;
+ }
+
+ for (i = 0; i < len; i++)
+ if (isalnum(value[i]) == 0) {
+ hex_format = true;
+ break;
+ }
+
+ if (hex_format) {
+ str = g_malloc0(len * 5 + 1);
+ for (i = 0; i < len; i++) {
+ if (i > 0)
+ str[i * 5 - 1] = ' ';
+
+ snprintf(&str[i * 5], 5, "0x%02X", value[i]);
+ }
+ } else {
+ str = g_malloc0(len + 1);
+ memcpy(str, value, len);
+ }
+
+ USR_PRT("Value : %s", str);
+
+ g_free(str);
+ g_free(value);
+ return;
+}
+
+bool __hr_client_dev_inf_service_cb(int total, int index, bt_gatt_h chr_handle, void *data)
+{
+ char *uuid = NULL;
+ char *str = NULL;
+
+ bt_gatt_get_uuid(chr_handle, &uuid);
+ bt_gatt_get_uuid_specification_name(uuid, &str);
+
+ if(!strcasecmp(uuid, manufacture_name_string)){
+ USR_PRT("Reading Manufacturer name. Printed data is in Hexa decimal");
+ } else if(!strcasecmp(uuid, model_number_string)){
+ DBG_PRT("Reading Model Number. Printed data is in Hexa decimal");
+ } else if(!strcasecmp(uuid, serial_number_string)){
+ USR_PRT("Serial Number. Printed data is in Hexa decimaal");
+ } else if(!strcasecmp(uuid, firmware_revision_string)){
+ USR_PRT("Firmware Revision. Printed data is in Hexa decimal");
+ } else if(!strcasecmp(uuid, hardware_revision_string)){
+ USR_PRT("Hardware Rivision. Printed data is in Hexa decimal");
+ } else if(!strcasecmp(uuid, software_revision_string)){
+ USR_PRT("Software revision. Printed data is in Hexa decimaal");
+ } else if(!strcasecmp(uuid, system_id)){
+ USR_PRT("System id. Printed data is in Hexa decimal");
+ USR_PRT("this is a 8 byte value.");
+ USR_PRT("The first 40 bits is Manufacturer Identifier.");
+ USR_PRT("Remaining 24 bits is Organizationally Unique Identifier.");
+ } else if(!strcasecmp(uuid, regulatory_certification_data_list)){
+ USR_PRT("IEEE 11073-20601 Regulatory Certification Data List");
+ USR_PRT("Printed data is a opaque data structure, application to make sense");
+ } else if(!strcasecmp(uuid, PnP_id)){
+ USR_PRT("PnP id. Printed data is in Hexa decimal");
+ USR_PRT("First byte is Vendor ID Source: 0X01 means SIG assigned, 0x02 means USB Implementer Forum");
+ USR_PRT("Next 2 byte is Vendor ID");
+ USR_PRT("Next 2 byte is Product ID");
+ USR_PRT("Next 2 byte is Product version");
+ }
+
+ bt_gatt_client_read_value(chr_handle, __hr_client_dev_inf_read_complete_cb, NULL);
+
+ g_free(str);
+ g_free(uuid);
+
+ return true;
+}
+
+bool __hr_client_hr_service_cb(int total, int index, bt_gatt_h chr_handle, void *data)
+{
+ char *uuid = NULL;
+ char *str = NULL;
+
+ bt_gatt_get_uuid(chr_handle, &uuid);
+ bt_gatt_get_uuid_specification_name(uuid, &str);
+
+ if(!strcasecmp(uuid, heart_rate_measurement_uuid)){
+ DBG_PRT("Enabling notification for %s characteristic" ,str ? str : "Unknown");
+ if(bt_gatt_client_set_characteristic_value_changed_cb(chr_handle,
+ __hr_client_measurement_cb, NULL) != BT_ERROR_NONE)
+ DBG_PRT("registerinig Notification failed");
+ } else if(!strcasecmp(uuid, body_sensor_location)){
+ DBG_PRT("Reading Body sensor location");
+ bt_gatt_client_read_value(chr_handle, __hr_client_body_sensor_loc_cb, NULL);
+ } else if(!strcasecmp(uuid, heart_rate_control_point)){
+ USR_PRT("Energy Expended feature is supported");
+ if(hr_control_point_handle)
+ g_free(hr_control_point_handle);
+ hr_control_point_handle = g_strdup(chr_handle);
+ }
+ g_free(str);
+ g_free(uuid);
+
+ return true;
+}
+
+bool __hr_client_monitor_svc_cb(int total, int index, bt_gatt_h svc_handle, void *data)
+{
+ char *svc_str = NULL;
+ char *uuid = NULL;
+
+ bt_gatt_get_uuid(svc_handle, &uuid);
+ bt_gatt_get_uuid_specification_name(uuid, &svc_str);
+ DBG_PRT("%s service (uuid = %s)", svc_str ? svc_str : uuid, uuid);
+
+ if(!strcasecmp(uuid, heart_rate_service_uuid)){
+ DBG_PRT("%s service", svc_str ? svc_str : uuid);
+ bt_gatt_service_foreach_characteristics(svc_handle,
+ __hr_client_hr_service_cb, NULL);
+ } else if(!strcasecmp(uuid, device_information_service_uuid)){
+ DBG_PRT("%s service", svc_str ? svc_str : uuid);
+ bt_gatt_service_foreach_characteristics(svc_handle,
+ __hr_client_dev_inf_service_cb, NULL);
+ }
+ g_free(svc_str);
+ g_free(uuid);
+
+ return true;
+}
+void __hr_client_connection_state_changed_cb(int result, bool connected, const char *remote_address, void *user_data)
+{
+ if(!strcmp(remote_address, remote_addr)) {
+ if (connected) {
+ DBG_PRT("Connected to the remote device");
+ test_cursor = BT_GATT_TEST_TABLE_SERVICE;
+ if (gatt_client) {
+ bt_gatt_client_destroy(gatt_client);
+ gatt_client = NULL;
+ if(hr_control_point_handle)
+ g_free(hr_control_point_handle);
+ }
+ if(bt_gatt_client_create(remote_addr, &gatt_client) != BT_ERROR_NONE) {
+ test_cursor = BT_GATT_TEST_UNRECOVERABLE;
+ DBG_PRT("GATT_Client creation failed");
+ return;
+ }
+ if(bt_gatt_client_foreach_services(gatt_client,
+ __hr_client_monitor_svc_cb, NULL) != BT_ERROR_NONE) {
+ test_cursor = BT_GATT_TEST_UNRECOVERABLE;
+ return;
+ }
+ test_cursor = BT_GATT_TEST_TABLE_MONITOR_SERVICES;
+ } else {
+ USR_PRT("Connection to the remote device is removed");
+ USR_PRT("Attempting to re-connect to the device");
+ USR_PRT("Make sure the remote device is turned on and in range");
+ test_cursor = BT_GATT_TEST_TABLE_CONNECTING;
+ bt_gatt_connect(remote_addr, true);
+ }
+ }
+
+}
+
+int __hr_client_validate_input_bd_addr (char *bd_addr)
+{
+ /*have to design better check for validity check of the input*/
+ if (bd_addr == NULL || strlen(bd_addr) < 16) {
+ input_valid = false;
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+ input_valid = true;
+ return BT_ERROR_NONE;
+}
+
+void hr_client_accept_input(char *buf)
+{
+ if (__hr_client_validate_input_bd_addr(buf) != BT_ERROR_NONE) {
+ USR_PRT("invalid bluetooth address");
+ } else {
+ memcpy (remote_addr, buf, 17);
+ remote_addr[17] = 0;
+ if (test_cursor == BT_GATT_TEST_HR_INITIALIZED)
+ __hr_client_initiate_connection();
+ }
+
+}
+int hr_client_initialize(void)
+{
+ int ret = BT_ERROR_NONE;
+ test_cursor = BT_GATT_TEST_HR_INITIALIZATION;
+
+ ret = bt_initialize();
+ if (ret == BT_ERROR_NONE || ret == BT_ERROR_ALREADY_DONE)
+ DBG_PRT("Initialized");
+ else
+ goto fail;
+
+ ret = bt_adapter_enable();
+ if(ret == BT_ERROR_NONE || ret == BT_ERROR_ALREADY_DONE)
+ DBG_PRT("Adapter enabled");
+ else
+ goto fail;
+
+ ret = bt_gatt_set_connection_state_changed_cb(__hr_client_connection_state_changed_cb, NULL);
+ if (ret != BT_ERROR_NONE)
+ goto fail;
+
+ test_cursor = BT_GATT_TEST_HR_INITIALIZED;
+ return ret;
+fail:
+ DBG_PRT("Initiailization error returns %d", ret);
+ return ret;
+}
+
+void hr_client_signal_handler(int signno)
+{
+ bt_gatt_disconnect(remote_addr);
+ bt_gatt_unset_connection_state_changed_cb();
+}
+
+gboolean hr_client_key_event_cb(GIOChannel *chan,
+ GIOCondition cond,
+ gpointer data)
+{
+ char buf[BUFFER_LEN] = { 0 };
+ unsigned int len = 0;
+
+ if (g_io_channel_read_chars(chan, buf, sizeof(buf),
+ &len, NULL) == G_IO_STATUS_ERROR) {
+ DBG_PRT("IO Channel read error");
+ return FALSE;
+ }
+
+ if (test_cursor == BT_GATT_TEST_UNRECOVERABLE) {
+ USR_PRT("Unrecoverable error, please reboot");
+ } else if (test_cursor == BT_GATT_TEST_HR_INITIALIZATION) {
+ if(hr_client_initialize() != BT_ERROR_NONE) {
+ USR_PRT("Initialization failed please reboot");
+ } else {
+ DBG_PRT("Initialization is successfull");
+ if(!input_valid) {
+ USR_PRT("In-put remote BD-ADDR in the below format");
+ USR_PRT("00:11:22:33:44:55");
+ test_cursor = BT_GATT_TEST_TABLE_SET_ADDRESS;
+ } else {
+ __hr_client_initiate_connection();
+ }
+ }
+ } else if (test_cursor == BT_GATT_TEST_HR_INITIALIZED) {
+ if(!input_valid) {
+ USR_PRT("In-put remote BD-ADDR in the below format");
+ USR_PRT("00:11:22:33:44:55");
+ test_cursor = BT_GATT_TEST_TABLE_SET_ADDRESS;
+ } else {
+ __hr_client_initiate_connection();
+ }
+ } else if (test_cursor == BT_GATT_TEST_TABLE_SET_ADDRESS) {
+ if (__hr_client_validate_input_bd_addr(buf) != BT_ERROR_NONE) {
+ USR_PRT("invalid bluetooth address");
+ USR_PRT("In-put remote BD-ADDR in the below format");
+ USR_PRT("00:11:22:33:44:55");
+ test_cursor = BT_GATT_TEST_TABLE_SET_ADDRESS;
+ } else {
+ memcpy (remote_addr, buf, 17);
+ remote_addr[17] = 0;
+ __hr_client_initiate_connection();
+ }
+ } else if (test_cursor == BT_GATT_TEST_TABLE_CONNECT) {
+ __hr_client_initiate_connection();
+ USR_PRT("Please wait.. while we connect the device");
+ } else if (test_cursor == BT_GATT_TEST_TABLE_CONNECTING) {
+ USR_PRT("Please wait.. while we connect the device");
+ } else if (test_cursor == BT_GATT_TEST_TABLE_SERVICE) {
+ USR_PRT("Quering supported services..");
+ } else if (test_cursor == BT_GATT_TEST_TABLE_MONITOR_SERVICES) {
+ // DBG_PRT("TODO");
+ }
+
+ return TRUE;
+}
+
diff --git a/test/gatt_profile_test_suite/bt_unit_test_gatt_hr_profile.h b/test/gatt_profile_test_suite/bt_unit_test_gatt_hr_profile.h
new file mode 100644
index 0000000..fc31f18
--- /dev/null
+++ b/test/gatt_profile_test_suite/bt_unit_test_gatt_hr_profile.h
@@ -0,0 +1,64 @@
+
+#include "bt_unit_test_gatt.h"
+
+bt_gatt_client_h gatt_client = NULL;
+char remote_addr[18] = "00:11:22:33:44:55";
+
+/* Mandatory Services for HR profile*/
+
+//Heart Rate service begin
+char *heart_rate_service_uuid = "0000180D-0000-1000-8000-00805F9B34FB";
+/*Mandatory Characteristics for this service, in HR profile*/
+char *heart_rate_measurement_uuid = "00002A37-0000-1000-8000-00805F9B34FB";
+char *body_sensor_location = "00002A38-0000-1000-8000-00805F9B34FB";
+/*optional characteristics for this service, in HR profile */
+char *heart_rate_control_point= "00002A39-0000-1000-8000-00805F9B34FB";
+//Heart Rate service end
+
+//Device Information Service begin
+char *device_information_service_uuid = "0000180A-0000-1000-8000-00805F9B34FB";
+/*Mandatory Characteristics for this service, in HR profile*/
+char *manufacture_name_string = "00002A29-0000-1000-8000-00805F9B34FB";
+/*optional characteristics for this service, in HR profile */
+char *model_number_string = "00002A24-0000-1000-8000-00805F9B34FB";
+char *serial_number_string = "00002A25-0000-1000-8000-00805F9B34FB";
+char *firmware_revision_string = "00002A26-0000-1000-8000-00805F9B34FB";
+char *hardware_revision_string = "00002A27-0000-1000-8000-00805F9B34FB";
+char *software_revision_string = "00002A28-0000-1000-8000-00805F9B34FB";
+char *system_id = "00002A23-0000-1000-8000-00805F9B34FB";
+char *regulatory_certification_data_list = "00002A2A-0000-1000-8000-00805F9B34FB";
+char *PnP_id = "00002A50-0000-1000-8000-00805F9B34FB";
+//Device Information Service end
+
+/* Mandatory Services for HR profile end */
+
+
+/* Optional services for HR profile */
+
+// there are no optional services for this profile
+
+/* Optional services for HR profile end */
+
+
+typedef enum
+{
+ HR_VALUE_FORMAT_MASK = 0x01,
+ HR_SENSOR_CONTACT_STATUS_BIT_MASK = 0x06,
+ HR_ENERGY_EXPENDED_BIT_MASK = 0x08,
+ HR_RR_INTERVAL_BIT_MASK = 0x10,
+}gatt_hr_measurement_property_e;
+
+
+typedef enum
+{
+ BT_GATT_TEST_UNRECOVERABLE = 1,
+ BT_GATT_TEST_INITIALIZATION,
+ BT_GATT_TEST_HR_INITIALIZATION,
+ BT_GATT_TEST_HR_INITIALIZED,
+ BT_GATT_TEST_TABLE_SET_ADDRESS,
+ BT_GATT_TEST_TABLE_CONNECT,
+ BT_GATT_TEST_TABLE_CONNECTING,
+ BT_GATT_TEST_TABLE_SERVICE,
+ BT_GATT_TEST_TABLE_MONITOR_SERVICES,
+ BT_UNIT_TEST_TABLE_FINISH = 0xFF,
+} hr_test_gatt_state_e;
diff --git a/test/gatt_profile_test_suite/capi.network.bluetooth.test.gatt.rule b/test/gatt_profile_test_suite/capi.network.bluetooth.test.gatt.rule
new file mode 100644
index 0000000..096ce47
--- /dev/null
+++ b/test/gatt_profile_test_suite/capi.network.bluetooth.test.gatt.rule
@@ -0,0 +1,2 @@
+capi-network-bluetooth-test-gatt bt-service::public w
+capi-network-bluetooth-test-gatt bt-service::platform rw
diff --git a/test_scripts/bt_on_test_while_infinite.service b/test_scripts/bt_on_test_while_infinite.service
new file mode 100644
index 0000000..073bbaf
--- /dev/null
+++ b/test_scripts/bt_on_test_while_infinite.service
@@ -0,0 +1,13 @@
+[Unit]
+Description=BT On test while infinite reboot
+PartOf=bluetooth-hciattach@bt.service
+
+[Service]
+Type=oneshot
+ExecStart=/usr/etc/bluetooth/check_bt_during_infinite_boot.sh
+RemainAfterExit=yes
+StandardOutput=journal+console
+StandardError=inherit
+
+[Install]
+RequiredBy=bluetooth-hciattach@bt.service
diff --git a/test_scripts/check_bt_during_infinite_boot.sh b/test_scripts/check_bt_during_infinite_boot.sh
new file mode 100755
index 0000000..be42080
--- /dev/null
+++ b/test_scripts/check_bt_during_infinite_boot.sh
@@ -0,0 +1,39 @@
+#!/bin/bash
+set -x
+
+LOG_FILE_NAME=/opt/usr/media/.bt_dump/log.txt
+
+function get_error_message_from_device {
+ all_log_dump.sh
+ sleep 10
+ sync
+}
+
+function check_bt_up_and_logging {
+ if (hciconfig | grep hci0) ; then
+ DOWNLOAD_TIME=`systemctl status bluetooth-hci-device -l|grep Break`
+ echo $COUNTER "ON" `date -R` ${DOWNLOAD_TIME##*.} >> $LOG_FILE_NAME
+
+ if (hciconfig hci0 sspmode | grep Disabled) ; then
+ echo "BT SSP is not setuped" `date -R` >> $LOG_FILE_NAME
+ hciconfig -a >> $LOG_FILE_NAME
+ get_error_message_from_device;
+ fi
+
+ return 0
+ else
+ echo $COUNTER "FAIL" `date -R` >> $LOG_FILE_NAME
+ hciconfig -a >> $LOG_FILE_NAME
+ get_error_message_from_device;
+ return 1
+ fi
+}
+
+echo "Infinite Loop"
+touch $LOG_FILE_NAME
+
+sleep 10
+check_bt_up_and_logging
+sleep 10
+reboot
+
diff --git a/test_scripts/check_bt_during_infinite_boot_by_sdb.sh b/test_scripts/check_bt_during_infinite_boot_by_sdb.sh
new file mode 100755
index 0000000..1c2bba9
--- /dev/null
+++ b/test_scripts/check_bt_during_infinite_boot_by_sdb.sh
@@ -0,0 +1,71 @@
+#!/bin/bash
+set -x
+
+LOG_FILE_NAME=log.txt
+COUNTER=0
+MODEL_NAME="SM-Z130H"
+SDB_OFFLINE="offline"
+SDB_FAILURE_COUNTER=0
+
+function get_error_message_from_device {
+ LOG_PATH="LOG"$COUNTER
+ sdb shell all_log_dump.sh
+ sdb pull /opt/usr/media/SLP_debug $LOG_PATH
+ sdb shell rm -rf /opt/usr/media/SLP_debug/*
+}
+
+function check_bt_up_and_logging {
+ if (sdb shell hciconfig |grep hci0) ; then
+ echo "BT is ON"
+ echo $COUNTER "ON" `date -R` >> $LOG_FILE_NAME
+
+ if (sdb shell hciconfig hci0 sspmode |grep Disabled) ; then
+ echo "BT SSP is disabled"
+ echo "BT SSP is not setuped" `date -R` >> $LOG_FILE_NAME
+ sdb shell hciconfig -a >> $LOG_FILE_NAME
+ get_error_message_from_device;
+ else
+ sdb shell systemctl status bluetooth-hci-device -l |grep Break >> $LOG_FILE_NAME
+ fi
+
+ return 0
+ else
+ echo $COUNTER "FAIL" `date -R` >> $LOG_FILE_NAME
+ sdb shell hciconfig -a >> $LOG_FILE_NAME
+ get_error_message_from_device;
+ return 1
+ fi
+}
+
+echo "Infinite Loop"
+touch $LOG_FILE_NAME
+echo "Start" `date -R` >> $LOG_FILE_NAME
+
+while true
+do
+ if (sdb devices | grep $MODEL_NAME) ; then
+ let COUNTER+=1
+ sleep 10
+ sdb root on
+ sdb shell rm -rf /opt/usr/media/SLP_debug/*
+ check_bt_up_and_logging
+ sdb shell reboot
+ sleep 20
+ fi
+
+ if (sdb devices | grep $SDB_OFFLINE) ; then
+ let SDB_FAILURE_COUNTER+=1
+ echo "SDB is offline"
+ if [ $SDB_FAILURE_COUNTER -eq "10" ]
+ then
+ echo "SDB is offline more than 10 sec"
+ sdb kill-server
+ sleep 8
+ sdb start-server
+ let SDB_FAILURE_COUNTER=0
+ fi
+ fi
+ sleep 1
+done
+
+