summaryrefslogtreecommitdiff
path: root/test/bt_unit_test.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/bt_unit_test.c')
-rw-r--r--test/bt_unit_test.c1201
1 files changed, 1201 insertions, 0 deletions
diff --git a/test/bt_unit_test.c b/test/bt_unit_test.c
new file mode 100644
index 0000000..e451752
--- /dev/null
+++ b/test/bt_unit_test.c
@@ -0,0 +1,1201 @@
+/*
+ * Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
+ *
+ * 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_unit_test.c
+ * @brief This is the source file for capi unit test.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <glib.h>
+#include <dbus/dbus-glib.h>
+
+#include "bluetooth.h"
+#include "bluetooth-telephony-api.h"
+
+#define BUFFER_LEN 10
+#define MAX_SERVICES 10
+#define PRT(format, args...) printf("%s:%d() "format, __FUNCTION__, __LINE__, ##args)
+#define TC_PRT(format, args...) PRT(format"\n", ##args)
+
+const char *spp_uuid = "00001101-0000-1000-8000-00805F9B34FB";
+const char *opp_uuid = "00001105-0000-1000-8000-00805f9b34fb";
+
+static int server_fd;
+static int client_fd;
+
+int service_index;
+int char_service_index;
+
+bt_gatt_attribute_h service_clone[MAX_SERVICES];
+bt_gatt_attribute_h characteristics[MAX_SERVICES];
+bt_gatt_attribute_h characteristics_services[MAX_SERVICES];
+
+
+bt_call_list_h call_list;
+GMainLoop *main_loop = NULL;
+
+typedef struct {
+ const char *tc_name;
+ int tc_code;
+} tc_table_t;
+
+tc_table_t tc_table[] = {
+ /* 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_get_visibility" , 11},
+ {"bt_adapter_set_device_discovery_state_changed_cb" , 12},
+ {"bt_adapter_unset_device_discovery_state_changed_cb" , 13},
+
+ /* 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},
+
+ /* 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},
+
+ /* AG functions */
+ {"bt_audio_initialize" , 80},
+ {"bt_audio_deinitialize" , 81},
+ {"bt_audio_connect" , 82},
+ {"bt_audio_disconnect" , 83},
+ {"bt_audio_set_connection_state_changed_cb", 84},
+ {"bt_audio_unset_connection_state_changed_cb", 85},
+ {"bt_ag_open_sco" , 86},
+ {"bt_ag_close_sco" , 87},
+ {"bt_ag_is_sco_opened" , 88},
+ {"bt_ag_set_sco_state_changed_cb" , 89},
+ {"bt_ag_unset_sco_state_changed_cb" , 90},
+ {"BT_AG_CALL_EVENT_IDLE" , 91},
+ {"BT_AG_CALL_EVENT_ANSWERED" , 92},
+ {"BT_AG_CALL_EVENT_DIALING" , 93},
+ {"BT_AG_CALL_EVENT_ALERTING" , 94},
+ {"BT_AG_CALL_EVENT_INCOMING" , 95},
+ {"bt_call_list_create" , 96},
+ {"bt_call_list_destroy" , 97},
+ {"bt_call_list_reset" , 98},
+ {"bt_call_list_add" , 99},
+ {"bt_ag_notify_call_list" , 100},
+ {"bt_ag_set_call_handling_event_cb" , 101},
+ {"bt_ag_is_nrec_enabled" , 102},
+
+ /* Network functions */
+ {"bt_nap_activate" , 110},
+ {"bt_nap_deactivate" , 111},
+ {"bt_nap_disconnect_all" , 112},
+
+ /* Device functions */
+ {"bt_device_set_authorization (true)" , 120},
+ {"bt_device_set_authorization (false)" , 121},
+ {"bt_device_set_authorization_changed_cb" , 122},
+ {"bt_device_unset_authorization_changed_cb" , 123},
+ {"bt_device_set_connection_state_changed_cb" , 124},
+ {"bt_device_unset_connection_state_changed_cb" , 125},
+ {"bt_device_foreach_connected_profiles" , 126},
+
+ /* Gatt functions */
+ {"bt_gatt_foreach_primary_services" , 140},
+ {"bt_gatt_discover_characteristics" , 141},
+ {"bt_gatt_get_service_uuid" , 142},
+ {"bt_gatt_foreach_included_services" , 143},
+ {"bt_gatt_set_characteristic_changed_cb" , 144},
+ {"bt_gatt_unset_characteristic_changed_cb" , 145},
+ {"bt_gatt_get_characteristic_declaration" , 146},
+ {"bt_gatt_set_characteristic_value" , 147},
+
+ /* AVRCP functions */
+ {"bt_avrcp_target_initialize" , 160},
+ {"bt_avrcp_target_deinitialize" , 161},
+ {"bt_avrcp_set_equalizer_state_changed_cb" , 162},
+ {"bt_avrcp_set_repeat_mode_changed_cb" , 163},
+ {"bt_avrcp_set_shuffle_mode_changed_cb" , 164},
+ {"bt_avrcp_set_scan_mode_changed_cb" , 165},
+ {"bt_avrcp_unset_equalizer_state_changed_cb" , 166},
+ {"bt_avrcp_unset_repeat_mode_changed_cb" , 167},
+ {"bt_avrcp_unset_shuffle_mode_changed_cb" , 168},
+ {"bt_avrcp_unset_scan_mode_changed_cb" , 169},
+
+ /* -----------------------------------------*/
+ {"Finish" , 0x00ff},
+ {NULL , 0x0000},
+};
+
+void tc_usage_print(void)
+{
+ int i = 0;
+
+ 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_table[i].tc_name);
+ }
+
+ i++;
+ }
+}
+
+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;
+}
+
+
+static 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)
+{
+ int i;
+
+ TC_PRT("discovery_state: %d", discovery_state);
+
+ if (discovery_info == NULL) {
+ TC_PRT("No discovery_info!");
+ return;
+ }
+
+ TC_PRT("remote_address: %s", discovery_info->remote_address);
+ TC_PRT("remote_name: %s", discovery_info->remote_name);
+ TC_PRT("rssi: %d", discovery_info->rssi);
+ TC_PRT("is_bonded: %d", discovery_info->is_bonded);
+ TC_PRT("service_count: %d", discovery_info->service_count);
+
+ if (discovery_info->service_uuid == NULL) {
+ TC_PRT("No uuids");
+ return;
+ }
+
+ for (i = 0; i < discovery_info->service_count; i++) {
+ TC_PRT("uuid: %s", discovery_info->service_uuid[i]);
+ }
+}
+
+static void __bt_socket_data_received_cb(bt_socket_received_data_s *data, void *user_data)
+{
+ TC_PRT("+");
+
+ if (data == NULL) {
+ TC_PRT("No recieved data!");
+ return;
+ }
+
+ TC_PRT("Socket fd: %d", data->socket_fd);
+ TC_PRT("Data: %s", data->data);
+ TC_PRT("Size: %d", data->data_size);
+}
+
+static void __bt_socket_connection_requested_cb(int socket_fd, const char *remote_address, void *user_data)
+{
+ TC_PRT("Socket fd: %d", socket_fd);
+ TC_PRT("remote_address: %s", remote_address);
+}
+
+static void __bt_socket_connection_state_changed_cb(int result,
+ bt_socket_connection_state_e connection_state,
+ bt_socket_connection_s *connection,
+ void *user_data)
+{
+ TC_PRT("result: %d", result);
+ TC_PRT("connection_state: %d", connection_state);
+
+ if (connection == NULL) {
+ TC_PRT("No connection data!");
+ return;
+ }
+
+ TC_PRT("socket fd: %d", connection->socket_fd);
+ TC_PRT("role: %d", connection->local_role);
+ TC_PRT("remote address: %s", connection->remote_address);
+ TC_PRT("service_uuid: %s", connection->service_uuid);
+}
+
+void __bt_opp_client_push_responded_cb(int result,
+ const char *remote_address,
+ void *user_data)
+{
+ TC_PRT("result: %d", result);
+ TC_PRT("remote_address: %s", remote_address);
+}
+
+void __bt_opp_client_push_progress_cb(const char *file,
+ long long size,
+ int percent,
+ void *user_data)
+{
+ TC_PRT("size: %ld", (long)size);
+ TC_PRT("percent: %d", percent);
+ TC_PRT("file: %s", file);
+}
+
+void __bt_opp_client_push_finished_cb(int result,
+ const char *remote_address,
+ void *user_data)
+{
+ TC_PRT("result: %d", 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("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("opened [%s]", opened ? "YES" : "NO");
+}
+
+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,
+ const char *remote_address,
+ void *user_data)
+{
+ TC_PRT("__bt_device_authorization_changed_cb [%d]", connected);
+ TC_PRT("address: %s", remote_address);
+}
+
+bool __bt_device_connected_profile(bt_profile_e profile, void *user_data)
+{
+ TC_PRT("__bt_device_connected_profile [%d]", profile);
+ return true;
+}
+
+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("__bt_gatt_characteristics_discovered_cb: %d", 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;
+}
+
+bool __bt_gatt_included_service_cb(bt_gatt_attribute_h service, void *user_data)
+{
+ char *uuid = 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);
+ TC_PRT("uuid %s", uuid);
+ 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_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", 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", 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", 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("equalizer %d", scan);
+}
+
+int test_input_callback(void *data)
+{
+ int ret = 0;
+ int test_id = (int)data;
+
+ switch (test_id) {
+ case 0x00ff:
+ TC_PRT("Finished");
+ g_main_loop_quit(main_loop);
+ break;
+
+ 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;
+
+ ret = bt_adapter_get_state(&state);
+ if (ret < BT_ERROR_NONE)
+ TC_PRT("failed with [0x%04x]", ret);
+
+ TC_PRT("state: %d", state);
+ break;
+ }
+ case 4:
+ ret = bt_adapter_enable();
+ if (ret < BT_ERROR_NONE)
+ TC_PRT("failed with [0x%04x]", ret);
+ break;
+ case 5:
+ ret = bt_adapter_disable();
+ if (ret < BT_ERROR_NONE)
+ TC_PRT("failed with [0x%04x]", ret);
+ break;
+ case 6:
+ ret = bt_adapter_start_device_discovery();
+ if (ret < BT_ERROR_NONE)
+ TC_PRT("failed with [0x%04x]", ret);
+ break;
+ case 7:
+ ret = bt_adapter_stop_device_discovery();
+ if (ret < BT_ERROR_NONE)
+ TC_PRT("failed with [0x%04x]", ret);
+ 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);
+
+ break;
+ }
+ case 9: {
+ char *address;
+ bt_device_info_s *device_info = NULL;
+
+ address = g_strdup("00:19:0E:01:61:17");
+
+ ret = bt_adapter_get_bonded_device_info((const char *)address,
+ &device_info);
+ if (ret < BT_ERROR_NONE)
+ TC_PRT("failed with [0x%04x]", ret);
+
+ g_free(address);
+
+ 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 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);
+
+ TC_PRT("used: %d", used);
+ break;
+ }
+ case 11: {
+ bt_adapter_visibility_mode_e visibility_mode = BT_ADAPTER_VISIBILITY_MODE_NON_DISCOVERABLE;
+ int time = 0;
+
+ ret = bt_adapter_get_visibility(&visibility_mode, &time);
+ if (ret < BT_ERROR_NONE)
+ TC_PRT("failed with [0x%04x]", ret);
+
+ TC_PRT("mode: %d", visibility_mode);
+ TC_PRT("time: %d", time);
+ break;
+ }
+ case 12:
+ 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);
+ break;
+ case 13:
+ ret = bt_adapter_unset_device_discovery_state_changed_cb();
+ if (ret < BT_ERROR_NONE)
+ TC_PRT("failed with [0x%04x]", ret);
+ break;
+
+ /* Socket functions */
+ case 50: {
+ int socket_fd = 0;
+
+ 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;
+ }
+ break;
+ }
+ case 51:
+ ret = bt_socket_destroy_rfcomm(server_fd);
+ if (ret < BT_ERROR_NONE)
+ TC_PRT("failed with [0x%04x]", ret);
+ 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);
+ break;
+ case 53:
+ ret = bt_socket_listen(server_fd, 1);
+ if (ret < BT_ERROR_NONE)
+ TC_PRT("failed with [0x%04x]", ret);
+ break;
+ case 54: {
+ int socket_fd = 0;
+
+ 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;
+ }
+ case 55:
+ ret = bt_socket_reject(server_fd);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+ case 56: {
+ char *address;
+
+ address = g_strdup("00:02:48:F4:3E:D2");
+
+ ret = bt_socket_connect_rfcomm(address, spp_uuid);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+
+ 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);
+ }
+ 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);
+ }
+ 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);
+ }
+ break;
+ case 60:
+ ret = bt_socket_unset_data_received_cb();
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ 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);
+ }
+ break;
+ case 62:
+ ret = bt_socket_unset_connection_requested_cb();
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ 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);
+ }
+ break;
+ case 64:
+ ret = bt_socket_unset_connection_state_changed_cb();
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+ case 70:
+ ret = bt_opp_client_initialize();
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+ case 71:
+ ret = bt_opp_client_deinitialize();
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ 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);
+ }
+ break;
+ case 73:
+ ret = bt_opp_client_clear_files();
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+ case 74: {
+ char *address;
+
+ address = g_strdup("00:02:37:A9:17:9E");
+
+ 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);
+ }
+ break;
+ }
+ case 75:
+ ret = bt_opp_client_cancel_push();
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+
+ case 80:
+ ret = bt_audio_initialize();
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+ case 81:
+ ret = bt_audio_deinitialize();
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+ case 82: {
+ char *address;
+ address = g_strdup("11:11:22:33:33:33");
+
+ ret = bt_audio_connect(address, BT_AUDIO_PROFILE_TYPE_HSP_HFP);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+ }
+ case 83: {
+ char *address;
+ address = g_strdup("11:11:22:33:33:33");
+
+ ret = bt_audio_disconnect(address, BT_AUDIO_PROFILE_TYPE_HSP_HFP);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+ }
+ case 84:
+ ret = bt_audio_set_connection_state_changed_cb(
+ __bt_audio_connection_state_changed_cb, NULL);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+ case 85:
+ ret = bt_audio_unset_connection_state_changed_cb();
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+ case 86:
+ ret = bt_ag_open_sco();
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+ case 87:
+ ret = bt_ag_close_sco();
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+ case 88: {
+ bool opened = false;
+ ret = bt_ag_is_sco_opened(&opened);
+ TC_PRT("opend[%s]", opened ? "YES" : "NO");
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+ }
+ case 89:
+ ret = bt_ag_set_sco_state_changed_cb(__bt_ag_sco_state_changed_cb, NULL);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+ case 90:
+ ret = bt_ag_unset_sco_state_changed_cb();
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+ case 91: {
+ unsigned int call_id = 1;
+
+ ret = bt_ag_notify_call_event(BT_AG_CALL_EVENT_IDLE, call_id, NULL);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+ }
+ case 92: {
+ 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();
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+ }
+ case 93: {
+ unsigned int call_id = 1;
+ bool sco_required = TRUE;
+ const char *phone_number;
+
+ phone_number = g_strdup("01046500173");
+ ret = bt_ag_notify_call_event(BT_AG_CALL_EVENT_DIALING,
+ call_id, phone_number);
+ if (sco_required)
+ bt_ag_open_sco();
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+ }
+ case 94: {
+ unsigned int call_id = 1;
+
+ ret = bt_ag_notify_call_event(BT_AG_CALL_EVENT_ALERTING,
+ call_id, NULL);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+ }
+ case 95: {
+ unsigned int call_id = 1;
+ const char *phone_number;
+
+ phone_number = g_strdup("01046500173");
+ ret = bt_ag_notify_call_event(BT_AG_CALL_EVENT_INCOMING,
+ call_id, phone_number);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+ }
+ case 96:
+ ret = bt_call_list_create(&call_list);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+ case 97:
+ ret = bt_call_list_destroy(call_list);
+ call_list = NULL;
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+ case 98:
+ ret = bt_call_list_reset(call_list);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+ case 99:
+ ret = bt_call_list_add(call_list, 1, BT_AG_CALL_STATE_ACTIVE);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+ case 100:
+ ret = bt_ag_notify_call_list(call_list);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+ case 101:
+ ret = bt_ag_set_call_handling_event_cb(
+ __bt_ag_set_call_handling_event_cb, NULL);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+ case 102: {
+ bool enabled = false;
+ ret = bt_ag_is_nrec_enabled(&enabled);
+ TC_PRT("opend[%s]", enabled ? "YES" : "NO");
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+ }
+ case 110:
+ ret = bt_nap_activate();
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+
+ case 111:
+ ret = bt_nap_deactivate();
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+
+ case 112:
+ ret = bt_nap_disconnect_all();
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+
+ case 120: {
+ char *address;
+
+ address = g_strdup("00:1B:66:01:23:1C");
+
+ ret = bt_device_set_authorization(address, BT_DEVICE_AUTHORIZED);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+ }
+ case 121: {
+ char *address;
+
+ address = g_strdup("00:1B:66:01:23:1C");
+
+ ret = bt_device_set_authorization(address, BT_DEVICE_UNAUTHORIZED);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+ }
+ case 122:
+ ret = bt_device_set_authorization_changed_cb(__bt_device_authorization_changed_cb, NULL);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+
+ case 123:
+ ret = bt_device_unset_authorization_changed_cb();
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+
+ case 124:
+ ret = bt_device_set_connection_state_changed_cb(__bt_device_connection_state_changed_cb, NULL);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+
+ case 125:
+ ret = bt_device_unset_connection_state_changed_cb();
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+
+ case 126: {
+ char *address;
+
+ address = g_strdup("00:1B:66:01:23:1C");
+
+ ret = bt_device_foreach_connected_profiles(address, __bt_device_connected_profile, NULL);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+ }
+
+ case 140: {
+ char *address;
+
+ address = g_strdup("D5:FE:81:38:39:B9");
+
+ __bt_free_gatt_services();
+
+ ret = bt_gatt_foreach_primary_services(address, __bt_gatt_primary_service_cb, NULL);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+ }
+
+ case 141: {
+ __bt_free_gatt_characteristics();
+
+ ret = bt_gatt_discover_characteristics(service_clone[1], __bt_gatt_characteristics_discovered_cb, NULL);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+ }
+
+ case 142: {
+ char *uuid = NULL;
+
+ ret = bt_gatt_get_service_uuid(service_clone[1], &uuid);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ } else {
+ TC_PRT("uuid: %s", uuid);
+ g_free(uuid);
+ }
+ break;
+ }
+
+ case 143: {
+ __bt_free_gatt_characteristics_services();
+
+ ret = bt_gatt_foreach_included_services(service_clone[1], __bt_gatt_included_service_cb, NULL);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+ }
+
+ case 144: {
+ ret = bt_gatt_set_characteristic_changed_cb(service_clone[1], __bt_gatt_characteristic_changed_cb, NULL);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+ }
+
+ case 145: {
+ ret = bt_gatt_unset_characteristic_changed_cb(service_clone[1]);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+ }
+
+ case 146: {
+ int i;
+ char *uuid = 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("failed with [0x%04x]", ret);
+ } else {
+ TC_PRT("uuid: %s", uuid);
+
+ for (i = 0; i < value_length; i++) {
+ TC_PRT("value %c", value[i]);
+ }
+
+ g_free(uuid);
+ g_free(value);
+ }
+ break;
+ }
+
+ case 147: {
+ unsigned char value[5] = { 0, 1, 2, 3, 4 };
+
+ ret = bt_gatt_set_characteristic_value(characteristics_services[0], value, 5);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+ }
+
+ case 160:
+ ret = bt_avrcp_target_initialize(__bt_avrcp_target_connection_state_changed_cb, NULL);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+
+ case 161:
+ ret = bt_avrcp_target_deinitialize();
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+
+ case 162:
+ ret = bt_avrcp_set_equalizer_state_changed_cb(__bt_avrcp_equalizer_state_changed_cb, NULL);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+
+ case 163:
+ ret = bt_avrcp_set_repeat_mode_changed_cb(__bt_avrcp_repeat_mode_changed_cb, NULL);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+
+ case 164:
+ ret = bt_avrcp_set_shuffle_mode_changed_cb(__bt_avrcp_shuffle_mode_changed_cb, NULL);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+
+ case 165:
+ ret = bt_avrcp_set_scan_mode_changed_cb(__bt_avrcp_scan_mode_changed_cb, NULL);
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+
+ case 166:
+ ret = bt_avrcp_unset_equalizer_state_changed_cb();
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+
+ case 167:
+ ret = bt_avrcp_unset_repeat_mode_changed_cb();
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+
+ case 168:
+ ret = bt_avrcp_unset_shuffle_mode_changed_cb();
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+ case 169:
+ ret = bt_avrcp_unset_scan_mode_changed_cb();
+ if (ret < BT_ERROR_NONE) {
+ TC_PRT("failed with [0x%04x]", ret);
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ return 0;
+}
+
+static gboolean key_event_cb(GIOChannel *chan,
+ GIOCondition cond,
+ gpointer data)
+{
+ char buf[BUFFER_LEN] = { 0 };
+
+ unsigned int len = 0;
+ int test_id;
+
+ 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");
+ return FALSE;
+ }
+
+ TC_PRT("%s", buf);
+ tc_usage_print();
+
+ test_id = atoi(buf);
+
+ if (test_id)
+ g_idle_add(test_input_callback, (void *)test_id);
+
+ return TRUE;
+}
+
+int main()
+{
+ GIOChannel *key_io;
+
+ 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);
+
+ g_io_add_watch(key_io, G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL,
+ key_event_cb, NULL);
+
+ g_io_channel_unref(key_io);
+
+ main_loop = g_main_loop_new(NULL, FALSE);
+
+ g_main_loop_run(main_loop);
+
+ bt_deinitialize();
+
+ return 0;
+}