[HAL] Added select_audio_role API in profile init 58/150158/1
authorAtul Rai <a.rai@samsung.com>
Thu, 14 Sep 2017 11:51:36 +0000 (17:21 +0530)
committerAtul Rai <a.rai@samsung.com>
Thu, 14 Sep 2017 11:51:36 +0000 (17:21 +0530)
This patch does following:
1/ Add select_audio_role() API and invoke it from withing
corresponding profile init function.
2/ Invoke register_media_player API from AVRCP Target init.
3/ Remove excess logs from BlueZ HAL.

Change-Id: I27cab78c2657d72107b18ad375f5a9ecb72bbe7a
Signed-off-by: Atul Rai <a.rai@samsung.com>
14 files changed:
bt-oal/bluez_hal/src/bt-hal-a2dp-sink-dbus-handler.c
bt-oal/bluez_hal/src/bt-hal-a2dp-sink-dbus-handler.h
bt-oal/bluez_hal/src/bt-hal-a2dp-sink.c
bt-oal/bluez_hal/src/bt-hal-adapter-dbus-handler.c
bt-oal/bluez_hal/src/bt-hal-av-dbus-handler.c
bt-oal/bluez_hal/src/bt-hal-av-dbus-handler.h
bt-oal/bluez_hal/src/bt-hal-av.c
bt-oal/bluez_hal/src/bt-hal-avrcp-tg.c
bt-oal/bluez_hal/src/bt-hal-avrcp-tg.h
bt-oal/bluez_hal/src/bt-hal-bluetooth.c
bt-oal/bluez_hal/src/bt-hal-dbus-common-utils.c
bt-oal/bluez_hal/src/bt-hal-dbus-common-utils.h
bt-oal/bluez_hal/src/bt-hal-event-receiver.c
bt-oal/bluez_hal/src/bt-hal-gap-agent.c

index 36a8711..daa7d6b 100644 (file)
@@ -220,3 +220,60 @@ bt_status_t _bt_hal_dbus_handler_a2dp_sink_disconnect(bt_bdaddr_t *bd_addr)
 
        return BT_STATUS_SUCCESS;
 }
+
+bt_status_t _bt_hal_dbus_handler_enable_a2dp_sink(void)
+{
+       GDBusProxy *proxy;
+       GVariant *ret;
+       GError *error = NULL;
+       gchar *adapter_path;
+       GDBusConnection *gconn;
+
+       DBG("+");
+
+       if (_bt_hal_is_service_enabled(A2DP_SINK_UUID)) {
+               ERR("Audio sink role already enabled, return");
+               return BT_STATUS_SUCCESS;
+       }
+
+       gconn = _bt_get_system_gconn();
+       if(!gconn) {
+               ERR("_bt_get_system_gconn returned NULL, return");
+               return BT_STATUS_FAIL;
+       }
+
+       adapter_path = _bt_hal_get_adapter_path();
+       if(!adapter_path) {
+               ERR("adapter_path is NULL");
+               return BT_STATUS_FAIL;
+       }
+
+       proxy = g_dbus_proxy_new_sync(gconn, G_DBUS_PROXY_FLAGS_NONE, NULL,
+                       BT_HAL_BLUEZ_NAME, adapter_path, BT_HAL_MEDIA_INTERFACE, NULL, &error);
+       g_free(adapter_path);
+       if (proxy == NULL) {
+               ERR("Unable to create proxy");
+
+               if (error) {
+                       ERR("Error: %s", error->message);
+                       g_clear_error(&error);
+               }
+               return BT_STATUS_FAIL;
+       }
+
+       ret = g_dbus_proxy_call_sync(proxy, "SelectRole", g_variant_new("(s)", "sink"),
+                       G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error);
+       g_object_unref(proxy);
+       if (ret == NULL) {
+               ERR("Call SelectRole Failed");
+               if (error) {
+                       ERR("errCode[%x], message[%s]", error->code, error->message);
+                       g_clear_error(&error);
+               }
+               return BT_STATUS_FAIL;
+       }
+
+       g_variant_unref(ret);
+       DBG("-");
+       return BT_STATUS_SUCCESS;
+}
index 3cc78f8..d2574af 100644 (file)
@@ -43,6 +43,8 @@ bt_status_t _bt_hal_dbus_handler_a2dp_sink_connect(bt_bdaddr_t *bd_addr);
 
 bt_status_t _bt_hal_dbus_handler_a2dp_sink_disconnect(bt_bdaddr_t *bd_addr);
 
+bt_status_t _bt_hal_dbus_handler_enable_a2dp_sink(void);
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */
index d73c8ba..d7f6a12 100644 (file)
@@ -94,6 +94,11 @@ static bt_status_t init(btav_callbacks_t* callbacks)
        if (interface_ready())
                return BT_STATUS_DONE;
 
+       if (BT_STATUS_SUCCESS != _bt_hal_dbus_handler_enable_a2dp_sink()) {
+               ERR("_bt_hal_dbus_handler_enable_a2dp_sink failed");
+               return BT_STATUS_FAIL;
+       }
+
        bt_hal_a2dp_sink_cbacks = callbacks;
        DBG("Register A2DP Sink events callback function");
        _bt_hal_register_a2dp_sink_dbus_handler_cb(__bt_hal_handle_a2dp_sink_events);
index 5074e69..9802baa 100644 (file)
@@ -43,7 +43,6 @@
 #define BT_CORE_NAME "org.projectx.bt_core"
 #define BT_CORE_PATH "/org/projectx/bt_core"
 #define BT_CORE_INTERFACE "org.projectx.btcore"
-#define BT_ADAPTER_INTERFACE "org.bluez.Adapter1"
 
 static GDBusProxy *core_proxy = NULL;
 static GDBusConnection *system_conn = NULL;
@@ -584,7 +583,7 @@ static int __bt_hal_dbus_get_all_adapter_properties(void)
 
        result = g_dbus_proxy_call_sync(proxy,
                        "GetAll",
-                       g_variant_new("(s)", BT_ADAPTER_INTERFACE),
+                       g_variant_new("(s)", BT_HAL_ADAPTER_INTERFACE),
                        G_DBUS_CALL_FLAGS_NONE,
                        -1,
                        NULL,
@@ -675,7 +674,7 @@ int _bt_hal_dbus_get_discovery_timeout(void)
 
        result = g_dbus_proxy_call_sync(proxy,
                        "Get",
-                       g_variant_new("(ss)", BT_ADAPTER_INTERFACE,
+                       g_variant_new("(ss)", BT_HAL_ADAPTER_INTERFACE,
                                "DiscoverableTimeout"),
                        G_DBUS_CALL_FLAGS_NONE,
                        -1,
@@ -774,7 +773,7 @@ int _bt_hal_dbus_get_scan_mode(void)
 
        result = g_dbus_proxy_call_sync(proxy,
                        "Get",
-                       g_variant_new("(ss)", BT_ADAPTER_INTERFACE,
+                       g_variant_new("(ss)", BT_HAL_ADAPTER_INTERFACE,
                                "Discoverable"),
                        G_DBUS_CALL_FLAGS_NONE,
                        -1,
@@ -800,7 +799,7 @@ int _bt_hal_dbus_get_scan_mode(void)
        if (!discoverable) {
                result = g_dbus_proxy_call_sync(proxy,
                                "Get",
-                               g_variant_new("(ss)", BT_ADAPTER_INTERFACE,
+                               g_variant_new("(ss)", BT_HAL_ADAPTER_INTERFACE,
                                        "Connectable"),
                                G_DBUS_CALL_FLAGS_NONE,
                                -1,
@@ -903,7 +902,7 @@ int _bt_hal_dbus_get_local_version(void)
 
        result = g_dbus_proxy_call_sync(proxy,
                        "Get",
-                       g_variant_new("(ss)", BT_ADAPTER_INTERFACE,
+                       g_variant_new("(ss)", BT_HAL_ADAPTER_INTERFACE,
                                "Version"),
                        G_DBUS_CALL_FLAGS_NONE,
                        -1,
@@ -993,7 +992,7 @@ int _bt_hal_dbus_get_local_name(void)
 
        result = g_dbus_proxy_call_sync(proxy,
                        "Get",
-                       g_variant_new("(ss)", BT_ADAPTER_INTERFACE,
+                       g_variant_new("(ss)", BT_HAL_ADAPTER_INTERFACE,
                                "Alias"),
                        G_DBUS_CALL_FLAGS_NONE,
                        -1,
@@ -1089,7 +1088,7 @@ int _bt_hal_dbus_get_local_address(void)
 
        result = g_dbus_proxy_call_sync(proxy,
                        "Get",
-                       g_variant_new("(ss)", BT_ADAPTER_INTERFACE,
+                       g_variant_new("(ss)", BT_HAL_ADAPTER_INTERFACE,
                                "Address"),
                        G_DBUS_CALL_FLAGS_NONE,
                        -1,
@@ -1220,7 +1219,7 @@ int _bt_hal_dbus_get_adapter_supported_uuids(void)
 
        result = g_dbus_proxy_call_sync(proxy,
                        "Get",
-                       g_variant_new("(ss)", BT_ADAPTER_INTERFACE,
+                       g_variant_new("(ss)", BT_HAL_ADAPTER_INTERFACE,
                                "UUIDs"),
                        G_DBUS_CALL_FLAGS_NONE,
                        -1,
@@ -1426,7 +1425,7 @@ static int __bt_hal_dbus_set_local_name(void *data)
 
        result = g_dbus_proxy_call_sync(proxy,
                        "Set",
-                       g_variant_new("(ssv)", BT_ADAPTER_INTERFACE,
+                       g_variant_new("(ssv)", BT_HAL_ADAPTER_INTERFACE,
                                "Alias", g_variant_new("s", name)),
                        G_DBUS_CALL_FLAGS_NONE,
                        -1,
@@ -1483,7 +1482,7 @@ static int __bt_hal_dbus_set_scan_mode(void *data)
 
        result = g_dbus_proxy_call_sync(proxy,
                        "Set",
-                       g_variant_new("(ssv)", BT_ADAPTER_INTERFACE,
+                       g_variant_new("(ssv)", BT_HAL_ADAPTER_INTERFACE,
                                "Connectable", g_variant_new("b", pg_scan)),
                        G_DBUS_CALL_FLAGS_NONE,
                        -1,
@@ -1501,7 +1500,7 @@ static int __bt_hal_dbus_set_scan_mode(void *data)
 
        result = g_dbus_proxy_call_sync(proxy,
                        "Set",
-                       g_variant_new("(ssv)", BT_ADAPTER_INTERFACE, "Discoverable",
+                       g_variant_new("(ssv)", BT_HAL_ADAPTER_INTERFACE, "Discoverable",
                                g_variant_new("b", inq_scan)),
                        G_DBUS_CALL_FLAGS_NONE,
                        -1,
@@ -1540,7 +1539,7 @@ static int __bt_hal_dbus_set_discovery_timeout(void *data)
 
        result = g_dbus_proxy_call_sync(proxy,
                        "Set",
-                       g_variant_new("(ssv)", BT_ADAPTER_INTERFACE,
+                       g_variant_new("(ssv)", BT_HAL_ADAPTER_INTERFACE,
                                "DiscoverableTimeout", g_variant_new("u", *timeout)),
                        G_DBUS_CALL_FLAGS_NONE,
                        -1,
index e1fd343..e190879 100644 (file)
@@ -220,3 +220,60 @@ bt_status_t _bt_hal_dbus_handler_av_disconnect(bt_bdaddr_t *bd_addr)
 
        return BT_STATUS_SUCCESS;
 }
+
+bt_status_t _bt_hal_dbus_handler_enable_a2dp_source(void)
+{
+       GDBusProxy *proxy;
+       GVariant *ret;
+       GError *error = NULL;
+       gchar *adapter_path;
+       GDBusConnection *gconn;
+
+       DBG("+");
+
+       if (_bt_hal_is_service_enabled(A2DP_SOURCE_UUID)) {
+               ERR("Audio sink role already enabled, return");
+               return BT_STATUS_SUCCESS;
+       }
+
+       gconn = _bt_get_system_gconn();
+       if(!gconn) {
+               ERR("_bt_get_system_gconn returned NULL, return");
+               return BT_STATUS_FAIL;
+       }
+
+       adapter_path = _bt_hal_get_adapter_path();
+       if(!adapter_path) {
+               ERR("adapter_path is NULL");
+               return BT_STATUS_FAIL;
+       }
+
+       proxy = g_dbus_proxy_new_sync(gconn, G_DBUS_PROXY_FLAGS_NONE, NULL,
+                       BT_HAL_BLUEZ_NAME, adapter_path, BT_HAL_MEDIA_INTERFACE, NULL, &error);
+       g_free(adapter_path);
+       if (proxy == NULL) {
+               ERR("Unable to create proxy");
+
+               if (error) {
+                       ERR("Error: %s", error->message);
+                       g_clear_error(&error);
+               }
+               return BT_STATUS_FAIL;
+       }
+
+       ret = g_dbus_proxy_call_sync(proxy, "SelectRole", g_variant_new("(s)", "source"),
+                       G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error);
+       g_object_unref(proxy);
+       if (ret == NULL) {
+               ERR("Call SelectRole Failed");
+               if (error) {
+                       ERR("errCode[%x], message[%s]", error->code, error->message);
+                       g_clear_error(&error);
+               }
+               return BT_STATUS_FAIL;
+       }
+
+       g_variant_unref(ret);
+       DBG("-");
+       return BT_STATUS_SUCCESS;
+}
index 7165d97..a192ec3 100644 (file)
@@ -43,6 +43,8 @@ bt_status_t _bt_hal_dbus_handler_av_connect(bt_bdaddr_t *bd_addr);
 
 bt_status_t _bt_hal_dbus_handler_av_disconnect(bt_bdaddr_t *bd_addr);
 
+bt_status_t _bt_hal_dbus_handler_enable_a2dp_source(void);
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */
index 1dddd9e..871b7e2 100644 (file)
@@ -95,6 +95,11 @@ static bt_status_t init(btav_callbacks_t* callbacks)
        if (interface_ready())
                return BT_STATUS_DONE;
 
+       if (BT_STATUS_SUCCESS != _bt_hal_dbus_handler_enable_a2dp_source()) {
+               ERR("_bt_hal_dbus_handler_enable_a2dp_source failed");
+               return BT_STATUS_FAIL;
+       }
+
        bt_hal_av_cbacks = callbacks;
        DBG("Register A2DP Src events callback function");
        _bt_hal_register_av_dbus_handler_cb(__bt_hal_handle_av_events);
index 7953d65..e39a0b0 100644 (file)
@@ -290,27 +290,10 @@ bt_status_t hal_avrcp_tg_disconnect(bt_bdaddr_t *rem_addr)
 }
 #endif
 
-void _bt_hal_avrcp_tg_register_media_player(void)
+static bt_status_t init(btrc_callbacks_t *callbacks)
 {
        int ret;
 
-       DBG("+");
-
-       if (!interface_ready()) {
-               INFO("AVRCP target not enabled");
-               return;
-       }
-
-       /* Register AVRCP Media player */
-       ret = _bt_hal_dbus_handler_register_media_player();
-       if (BT_STATUS_SUCCESS != ret)
-               ERR("_bt_hal_dbus_handler_register_media_player failed");
-
-       DBG("-");
-}
-
-static bt_status_t init(btrc_callbacks_t *callbacks)
-{
        DBG("");
 
        if (interface_ready())
@@ -319,6 +302,11 @@ static bt_status_t init(btrc_callbacks_t *callbacks)
        if (!callbacks)
                return BT_STATUS_PARM_INVALID;
 
+       /* Register AVRCP Media player */
+       ret = _bt_hal_dbus_handler_register_media_player();
+       if (BT_STATUS_SUCCESS != ret)
+               ERR("_bt_hal_dbus_handler_register_media_player failed");
+
        /* Register AVRCP event callback */
        _bt_hal_register_avrcp_tg_dbus_handler_cb(
                        __bt_hal_handle_avrcp_tg_events);
index 1a34ae3..ddca74f 100644 (file)
@@ -28,7 +28,6 @@
 #include <dlog.h>
 #include <stdio.h>
 
-void _bt_hal_avrcp_tg_register_media_player(void);
 btrc_interface_t *bt_get_avrcp_tg_interface(void);
 
 #endif //__BT_HAL_AVRCP_TG_H__
index a9b0538..9a99660 100644 (file)
@@ -422,9 +422,6 @@ static void __bt_hal_handle_adapter_state_changed(void *buf, uint16_t len)
 
        if (bt_hal_cbacks->adapter_state_changed_cb)
                bt_hal_cbacks->adapter_state_changed_cb(ev->state);
-
-       if (HAL_POWER_ON == ev->state)
-               _bt_hal_avrcp_tg_register_media_player();
 }
 
 #ifdef TIZEN_BT_HAL
index 0606864..954f2cc 100644 (file)
@@ -1696,3 +1696,58 @@ int bt_hal_gatt_convert_perm2string(
 
         return flag_count;
 }
+
+gboolean _bt_hal_is_service_enabled(const char *uuid)
+{
+       GDBusProxy *proxy;
+       GError *error = NULL;
+       GVariant *result;
+       GVariant *temp;
+       GVariantIter *iter = NULL;
+       gchar *uuid_str;
+       gboolean ret = FALSE;
+
+       DBG("+");
+
+       proxy = _bt_get_adapter_properties_proxy();
+       if (!proxy) {
+               DBG("_bt_hal_dbus_get_local_name: Adapter Properties proxy get failed!!!");
+               return FALSE;
+       }
+
+       result = g_dbus_proxy_call_sync(proxy,
+                       "Get", g_variant_new("(ss)",
+                               BT_HAL_ADAPTER_INTERFACE, "UUIDs"),
+                       G_DBUS_CALL_FLAGS_NONE, -1,
+                       NULL, &error);
+       if (!result) {
+               if (error != NULL) {
+                       ERR("Failed to get UUIDs (Error: %s)", error->message);
+                       g_clear_error(&error);
+               } else
+                       ERR("Failed to get UUIDs");
+               return FALSE;
+       }
+
+       g_variant_get(result, "(v)", &temp);
+       g_variant_get(temp, "as", &iter);
+       if (!iter) {
+               ERR("Failed to get UUIDs");
+               g_variant_unref(result);
+               return FALSE;
+       }
+
+       while (g_variant_iter_loop(iter, "s", &uuid_str)) {
+               DBG("UUID string [%s]\n", uuid_str);
+               if (!strncasecmp(uuid, uuid_str, strlen(uuid))) {
+                       ret = TRUE;
+                       break;
+               }
+       }
+
+       g_variant_iter_free(iter);
+       g_variant_unref(result);
+       g_variant_unref(temp);
+       DBG("-");
+       return ret;
+}
index a03d3ab..daf08e5 100644 (file)
@@ -474,6 +474,8 @@ int bt_hal_gatt_convert_perm2string(
 
 gboolean _bt_hal_uuid_is_standard(bt_uuid_t *p_uuid);
 
+gboolean _bt_hal_is_service_enabled(const char *uuid);
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */
index 885a030..6324d2b 100644 (file)
@@ -566,7 +566,6 @@ static gboolean __bt_hal_parse_device_properties(GVariant *item)
                        int uuid_count = 0;
                        gsize size1 = 0;
                        int i =0;
-                       int z;
                        size1 = g_variant_get_size(val);
                        DBG("UUID count from size  [%d]\n", size1);
                        int num_props_tmp = ev->num_props;
@@ -589,9 +588,6 @@ static gboolean __bt_hal_parse_device_properties(GVariant *item)
                                        uuid_str = g_strdup(uuid_value[i]);
                                        DBG("UUID string [%s]\n", uuid_str);
                                        _bt_convert_uuid_string_to_type(uuid, uuid_str);
-                                       for(z=0; z < 16; z++)
-                                               DBG("[0x%x]", uuid[z]);
-
                                        memcpy(uuids+i*BT_HAL_STACK_UUID_SIZE, uuid, BT_HAL_STACK_UUID_SIZE);
                                        g_free(uuid_str);
                                }
@@ -929,7 +925,6 @@ static  void __bt_hal_manager_event_filter(GDBusConnection *connection,
        param->signal_name = g_strdup(signal_name);
        param->parameters = g_variant_ref(parameters);
 
-       DBG("Switch Context to Main thread for event");
        g_idle_add(__bt_hal_event_manager, (gpointer)param);
        return;
 }
index 27aa529..df04d6e 100644 (file)
@@ -1105,7 +1105,7 @@ gboolean _bt_hal_gap_agent_unregister_osp_server(GapAgentPrivate *agent, unsigne
 
        server = _bt_hal_gap_agent_find_osp_server_by_type(priv->osp_servers, type);
        if (server == NULL)
-               return FALSE;
+               return TRUE;
 
        priv->osp_servers = g_slist_remove(priv->osp_servers, server);
        __bt_hal_free_osp_server(server);