CAPI/Device: Implement set/unset_device_service_serach_callback() 06/19306/1
authorWu Jiangbo <jiangbox.wu@intel.com>
Thu, 10 Apr 2014 03:13:32 +0000 (11:13 +0800)
committerWu Jiangbo <jiangbox.wu@intel.com>
Thu, 10 Apr 2014 03:13:55 +0000 (11:13 +0800)
Change-Id: I7937590c4fb95d8ff277ee04df186e644dce9c70
Signed-off-by: Wu Jiangbo <jiangbox.wu@intel.com>
capi/bluetooth.c
test/bluez-capi-test.c

index 318a953..554454d 100644 (file)
@@ -107,6 +107,11 @@ struct device_connected_state_cb_node {
        void *user_data;
 };
 
+struct device_service_search_cb_node {
+       bt_device_service_searched_cb cb;
+       void *user_data;
+};
+
 struct spp_connection_requested_cb_node {
        bt_spp_connection_requested_cb cb;
        void *user_data;
@@ -156,6 +161,7 @@ static struct device_bond_cb_node *device_bond_node;
 static struct device_auth_cb_node *device_auth_node;
 static struct device_destroy_paired_cb_node *paired_device_removed_node;
 static struct device_connected_state_cb_node *device_connected_state_node;
+static struct device_service_search_cb_node *device_service_search_node;
 static struct spp_connection_requested_cb_node *spp_connection_requested_node;
 static struct spp_data_received_cb_node *spp_data_received_node;
 static struct avrcp_target_connection_state_changed_node
@@ -1853,14 +1859,44 @@ int bt_device_unset_authorization_changed_cb(void)
 int bt_device_set_service_searched_cb(bt_device_service_searched_cb callback,
                                                        void *user_data)
 {
-       DBG("Not implement");
+       struct device_service_search_cb_node *node;
+
+       DBG("");
+
+       if (callback == NULL)
+               return BT_ERROR_INVALID_PARAMETER;
+
+       if (device_service_search_node) {
+               DBG("Device service serach callback already set.");
+               return BT_SUCCESS;
+       }
+
+       node = g_new0(struct device_service_search_cb_node, 1);
+       if (node == NULL) {
+               ERROR("no memeroy");
+               return BT_ERROR_OUT_OF_MEMORY;
+       }
+
+       node->cb = callback;
+       node->user_data = user_data;
+
+       device_service_search_node = node;
 
        return BT_SUCCESS;
 }
 
 int bt_device_unset_service_searched_cb(void)
 {
-       DBG("Not implement");
+       DBG("");
+
+       if (initialized == false)
+               return BT_ERROR_NOT_INITIALIZED;
+
+       if (!device_service_search_node)
+               return BT_SUCCESS;
+
+       g_free(device_service_search_node);
+       device_service_search_node = NULL;
 
        return BT_SUCCESS;
 }
index 8b2e526..b48680d 100644 (file)
@@ -531,6 +531,48 @@ static int unset_discovery_callback(const char *p1, const char *p2)
        return 0;
 }
 
+static void service_search_cb(int result, bt_device_sdp_info_s *sdp_info,
+                                                       void *user_data)
+{
+       int i;
+
+       if (result != BT_SUCCESS) {
+               DBG("device service serach failed %d", result);
+               return;
+       }
+
+       DBG("remote address %s contain services:", sdp_info->remote_address);
+       for (i = 0; i < sdp_info->service_count; ++i)
+               DBG("\t%s", sdp_info->service_uuid[i]);
+}
+
+static int set_device_service_serach_callback(const char *p1, const char *p2)
+{
+       int ret;
+
+       ret = bt_device_set_service_searched_cb(service_search_cb, NULL);
+       if (ret != BT_SUCCESS) {
+               ERROR("bt_device_set_service_searched_cb error: %d", ret);
+               return 0;
+       }
+
+       return 0;
+}
+
+static int unset_device_service_serach_callback(const char *p1,
+                                               const char *p2)
+{
+       int ret;
+
+       ret = bt_device_unset_service_searched_cb();
+       if (ret != BT_SUCCESS) {
+               ERROR("bt_device_unset_service_searched_cb error: %d", ret);
+               return 0;
+       }
+
+       return 0;
+}
+
 static int start_discovery(const char *p1, const char *p2)
 {
        int err;
@@ -1648,6 +1690,12 @@ struct {
        {"unset_device_connected_callback", unset_device_connected_callback,
                "Usage: unset_device_connected_callback\n\tUnSet device connected callback"},
 
+       {"set_device_service_serach_callback", set_device_service_serach_callback,
+               "Usage: set_device_service_serach_callback\n\tSet service serach callback"},
+
+       {"unset_device_service_serach_callback", unset_device_service_serach_callback,
+               "Usage: unset_device_service_serach_callback\n\tUnset service serach callback"},
+
        {"start_discovery", start_discovery,
                "Usage: start_discovery\n\tStart to discovery devices"},