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;
+}
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 */
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);
#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;
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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;
+}
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 */
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);
}
#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())
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);
#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__
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
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;
+}
gboolean _bt_hal_uuid_is_standard(bt_uuid_t *p_uuid);
+gboolean _bt_hal_is_service_enabled(const char *uuid);
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
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;
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);
}
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;
}
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);