CAPI/Adapter: Implement function bt_adapter_set_visibility_duration_changed_cb() 34/19234/1
authorWu Jiangbo <jiangbox.wu@intel.com>
Wed, 9 Apr 2014 03:17:39 +0000 (11:17 +0800)
committerWu Jiangbo <jiangbox.wu@intel.com>
Wed, 9 Apr 2014 07:14:34 +0000 (15:14 +0800)
Change-Id: I33917138a5f95c8af9ff3901efefb85a2906065f
Signed-off-by: Wu Jiangbo <jiangbox.wu@intel.com>
capi/bluetooth.c
test/bluez-capi-test.c

index 9dce5fc..674525c 100644 (file)
@@ -62,6 +62,11 @@ struct adapter_discovering_cb_node {
        void *user_data;
 };
 
+struct adapter_visibility_duration_cb_node {
+       bt_adapter_visibility_duration_changed_cb cb;
+       void *user_data;
+};
+
 struct device_destroy_unpaired_cb_node {
        bt_adapter_device_discovery_state_changed_cb cb;
        void *user_data;
@@ -138,6 +143,8 @@ static struct adapter_name_cb_node *adapter_name_node;
 static struct device_created_cb_node *device_created_node;
 static struct adapter_state_cb_node *adapter_state_node;
 static struct adapter_discovering_cb_node *adapter_discovering_node;
+static struct adapter_visibility_duration_cb_node
+                                       *adapter_visibility_duration_node;
 static struct device_destroy_unpaired_cb_node *unpaired_device_removed_node;
 static struct device_bond_cb_node *device_bond_node;
 static struct device_auth_cb_node *device_auth_node;
@@ -654,6 +661,14 @@ void adapter_name_changed(bluez_adapter_t *adapter,
        g_free(adapter_name);
 }
 
+static void discoverable_timeout_changed(bluez_adapter_t *adapter,
+                                       guint32 timeout, void *user_data)
+{
+       struct adapter_visibility_duration_cb_node *node = user_data;
+
+       node->cb(timeout, node->user_data);
+}
+
 static void _bt_update_bluetooth_callbacks(void)
 {
        DBG("default_adpater: %p", default_adapter);
@@ -681,6 +696,12 @@ static void _bt_update_bluetooth_callbacks(void)
                                        bluez_adapter_discovering_changed,
                                        adapter_discovering_node);
 
+       if (adapter_visibility_duration_node)
+               bluez_adapter_set_discoverable_timeout_changed_cb(
+                                       default_adapter,
+                                       discoverable_timeout_changed,
+                                       adapter_visibility_duration_node);
+
        if (generic_device_removed_set == FALSE)
                set_device_removed_generic_callback(default_adapter);
 
@@ -1211,6 +1232,37 @@ int bt_adapter_set_state_changed_cb(bt_adapter_state_changed_cb callback,
        return BT_SUCCESS;
 }
 
+int bt_adapter_set_visibility_duration_changed_cb(
+                       bt_adapter_visibility_duration_changed_cb callback,
+                       void *user_data)
+{
+       struct adapter_visibility_duration_cb_node *node_data;
+
+       DBG("");
+
+       if (callback == NULL)
+               return BT_ERROR_INVALID_PARAMETER;
+
+       if (adapter_visibility_duration_node) {
+               DBG("duration changed callback already set.");
+               return BT_ERROR_ALREADY_DONE;
+       }
+
+       node_data = g_new0(struct adapter_visibility_duration_cb_node, 1);
+       if (node_data == NULL) {
+               ERROR("no memory");
+               return BT_ERROR_OUT_OF_MEMORY;
+       }
+
+       node_data->cb = callback;
+       node_data->user_data = user_data;
+
+       adapter_visibility_duration_node = node_data;
+
+       _bt_update_bluetooth_callbacks();
+       return BT_SUCCESS;
+}
+
 int bt_adapter_unset_state_changed_cb(void)
 {
        DBG("");
@@ -3426,15 +3478,6 @@ int bt_adapter_set_visibility_mode_changed_cb(
        return BT_SUCCESS;
 }
 
-int bt_adapter_set_visibility_duration_changed_cb(
-                       bt_adapter_visibility_duration_changed_cb callback,
-                       void *user_data)
-{
-       DBG("Not implement");
-
-       return BT_SUCCESS;
-}
-
 int bt_adapter_unset_visibility_mode_changed_cb(void)
 {
        DBG("Not implement");
index 2a520be..7814c43 100644 (file)
@@ -291,6 +291,24 @@ static int get_adapter_visibility(const char *p1, const char *p2)
        return 0;
 }
 
+static void visibility_duration_changed_callback(int duration,
+                                               void *user_data)
+{
+       DBG("adapter visibility changed to %d seconds", duration);
+}
+
+static int set_visibility_duration_callback(const char *p1, const char *p2)
+{
+       int ret = bt_adapter_set_visibility_duration_changed_cb(
+                               visibility_duration_changed_callback, NULL);
+       if (ret != BT_SUCCESS) {
+               ERROR("set_visibility_duration_changed_cb failed %d", ret);
+               return 0;
+       }
+
+       return 0;
+}
+
 static void device_discovery_cb(int result,
                        bt_adapter_device_discovery_state_e state,
                        bt_adapter_device_discovery_info_s *discovery_info,
@@ -1549,6 +1567,9 @@ struct {
        {"get_adapter_visibility", get_adapter_visibility,
                "Usage: get_adapter_visibility\n\tGet local adapter visibility"},
 
+       {"set_visibility_duration_callback", set_visibility_duration_callback,
+               "Usage: set_visibility_duration_callback\n\tSet duration callback"},
+
        {"set_discovery_callback", set_discovery_callback,
                "Usage: set_discovery_callback\n\tSet device found callback"},