#include "bt-service-headset-connection.h"
#ifdef TIZEN_SUPPORT_DUAL_HF
+#ifdef TIZEN_PROFILE_WEARABLE
#define VCONF_KEY_BT_HOST_BT_MAC_ADDR "db/wms/host_bt_mac"
#endif
+#endif
typedef struct {
unsigned int type;
}
check_req_info:
+ req_info = _bt_get_request_info(func_data->req_id);
+ if (req_info == NULL) {
+ BT_ERR("req_info == NULL");
+ goto done;
+ }
+
if (g_error == NULL)
goto dbus_return;
/* Event will be sent by the event reciever */
dbus_return:
- req_info = _bt_get_request_info(func_data->req_id);
- if (req_info == NULL) {
- BT_ERR("req_info == NULL");
- goto done;
- } else if (req_info->context == NULL) {
- BT_ERR("req_info->context is NULL");
+ if (req_info->context == NULL) {
+ BT_DBG("req_info->context is NULL");
goto done;
}
}
}
-#ifdef TIZEN_BT_DUAL_HEADSET_CONNECT
-void _bt_check_already_connected_headset(int type, char *address)
-{
- GList *node;
- char connected_address[BT_ADDRESS_STRING_SIZE + 1];
- bluetooth_device_address_t device_address;
- int device_count = 0;
-
- if (address != NULL) {
- node = g_list_first(g_connected_list);
- while (node != NULL) {
- bt_connected_headset_data_t *connected_device = node->data;
- if ((connected_device->type & type) &&
- (g_strcmp0(connected_device->device_address, address) != 0)) {
- device_count++;
- /* Disconnect the earliest(1st) connected headset */
- if (device_count == 1) {
- g_strlcpy(connected_address,
- connected_device->device_address,
- BT_ADDRESS_STRING_SIZE + 1);
- BT_DBG("Earliest/First Connected headset %s",
- connected_address);
- } else if (device_count == MAX_CONNECTED_HEADSET) {
- _bt_convert_addr_string_to_type(device_address.addr,
- connected_address);
- _bt_audio_disconnect(0, type, &device_address, NULL);
- return;
- }
- }
- node = g_list_next(node);
- }
- }
-}
-#endif
-
gboolean _bt_is_headset_type_connected(int type, char *address)
{
GList *node;
#ifdef TIZEN_SUPPORT_DUAL_HF
gboolean __bt_is_companion_device(const char *addr)
{
- if (TIZEN_PROFILE_WEARABLE) {
- char *host_device_address = NULL;
- host_device_address = vconf_get_str(VCONF_KEY_BT_HOST_BT_MAC_ADDR);
+#ifdef TIZEN_PROFILE_WEARABLE
+ char *host_device_address = NULL;
+ host_device_address = vconf_get_str(VCONF_KEY_BT_HOST_BT_MAC_ADDR);
- if (!host_device_address) {
- BT_INFO("Failed to get a companion device address");
- return FALSE;
- }
-
- if (g_strcmp0(host_device_address, addr) == 0) {
- BT_INFO("Found companion device");
- free(host_device_address);
- return TRUE;
- }
+ if (!host_device_address) {
+ BT_INFO("Failed to get a companion device address");
+ return FALSE;
+ }
+ if (g_strcmp0(host_device_address, addr) == 0) {
+ BT_INFO("Found companion device");
free(host_device_address);
- return FALSE;
- } else {
- /* TODO : Need to add companion device check condition for Phone models */
- return FALSE;
+ return TRUE;
}
+
+ free(host_device_address);
+ return FALSE;
+#else
+ /* TODO : Need to add companion device check condition for Phone models */
+ return FALSE;
+#endif
}
#endif
while (node != NULL) {
connected_device = node->data;
if ((connected_device->type & type)) {
-#ifdef TIZEN_BT_DUAL_HEADSET_CONNECT
- device_count++;
- /* Disconnect the earliest(1st) connected headset */
- if (device_count == 1)
- g_strlcpy(connected_address, connected_device->device_address,
- BT_ADDRESS_STRING_SIZE + 1);
-
- if (g_strcmp0(connected_device->device_address, address) == 0)
- return BLUETOOTH_ERROR_ALREADY_CONNECT;
-#else
g_strlcpy(connected_address, connected_device->device_address,
BT_ADDRESS_STRING_SIZE + 1);
-#endif
#ifdef TIZEN_SUPPORT_DUAL_HF
is_companion_device = __bt_is_companion_device(connected_address);
BT_INFO(" is_companion_device[%d]", is_companion_device);
break;
}
#else
-#ifdef TIZEN_BT_DUAL_HEADSET_CONNECT
- if (device_count == MAX_CONNECTED_HEADSET) {
- connected = TRUE;
- break;
- }
-#else
connected = TRUE;
break;
#endif
-#endif
}
node = g_list_next(node);
}
- if (!connected) {
- __bt_free_wait_data();
+ if (!connected)
return BLUETOOTH_ERROR_NOT_CONNECTED;
- }
BT_DBG("connected headset %s", connected_address);
}
connected_device = g_malloc0(sizeof(bt_connected_headset_data_t));
+ /* Fix : NULL_RETURNS */
+ if (connected_device == NULL) {
+ BT_ERR("No memory allocated");
+ return;
+ }
+
connected_device->device_state = status;
if ((status == BT_STATE_CONNECTED) || (status == BT_STATE_CONNECTING))
connected_device->type |= type;
_bt_convert_addr_type_to_string(address, device_address->addr);
func_data = g_malloc0(sizeof(bt_audio_function_data_t));
+ /* Fix : NULL_RETURNS */
+ if (func_data == NULL) {
+ result = BLUETOOTH_ERROR_MEMORY_ALLOCATION;
+ goto fail;
+ }
+
func_data->address = g_strdup(address);
func_data->req_id = request_id;
func_data->type = type;
goto fail;
}
BT_INFO("Connecting to service %s", uuid);
- /* First Check if device is in connecting state if it than return error */
- value = __bt_is_headset_connecting(type);
- if (value != BLUETOOTH_ERROR_NONE) {
- result = BLUETOOTH_ERROR_IN_PROGRESS;
- goto fail;
- }
value = __bt_is_headset_connected(type, request_id, address);
if (value == BLUETOOTH_ERROR_ALREADY_CONNECT) {
- result = BLUETOOTH_ERROR_ALREADY_CONNECT;
- goto fail;
+ return BLUETOOTH_ERROR_ALREADY_CONNECT;
} else if (value == BLUETOOTH_ERROR_NOT_CONNECTED) {
+ value = __bt_is_headset_connecting(type);
+ if (value != BLUETOOTH_ERROR_NONE) {
+ result = BLUETOOTH_ERROR_IN_PROGRESS;
+ goto fail;
+ }
_bt_headset_set_local_connection(TRUE);
ret = _bt_connect_profile(address, uuid,
__bt_audio_request_cb, func_data);
/* Add data to the connected list */
_bt_add_headset_to_list(type, BT_STATE_CONNECTING, address);
} else if (value == BLUETOOTH_ERROR_IN_PROGRESS) {
- result = BLUETOOTH_ERROR_IN_PROGRESS;
- goto fail;
+ return BLUETOOTH_ERROR_IN_PROGRESS;
}
if (out_param1)
g_array_append_vals(out_param1, address,
BT_ADDRESS_STR_LEN);
- g_free(func_data->address);
- g_free(func_data);
-
return result;
}
_bt_convert_addr_type_to_string(address, device_address->addr);
func_data = g_malloc0(sizeof(bt_audio_function_data_t));
+ /* Fix : NULL_RETURNS */
+ if (func_data == NULL) {
+ BT_ERR("Memory allocation error");
+ result = BLUETOOTH_ERROR_MEMORY_ALLOCATION;
+ goto fail;
+ }
func_data->address = g_strdup(address);
func_data->req_id = request_id;
func_data->pending = BT_PENDING_NONE;
g_array_append_vals(out_param1, address,
BT_ADDRESS_STR_LEN);
- g_free(func_data->address);
- g_free(func_data);
-
return result;
}
}
func_data = g_malloc0(sizeof(bt_function_data_t));
+ /* Fix : NULL_RETURNS */
+ if (func_data == NULL) {
+ result = BLUETOOTH_ERROR_MEMORY_ALLOCATION;
+ goto fail;
+ }
+
func_data->address = g_strdup(address);
func_data->req_id = request_id;
uuid = g_strdup(HFP_AG_UUID);
}
func_data = g_malloc0(sizeof(bt_function_data_t));
+ /* Fix : NULL_RETURNS */
+ if (func_data == NULL) {
+ result = BLUETOOTH_ERROR_MEMORY_ALLOCATION;
+ goto fail;
+ }
+
func_data->address = g_strdup(address);
func_data->req_id = request_id;
uuid = g_strdup(HFP_AG_UUID);
vconf_set_str(BT_LAST_CONNECTED_DEVICE, address);
}
#endif /*TIZEN_BT_A2DP_SINK_AUTO_CONNECT */
-
-int _bt_audio_select_role(bluetooth_audio_role_t role)
-{
-
- GDBusProxy *proxy;
- GVariant *ret;
- GError *error = NULL;
- GDBusConnection *g_conn = _bt_gdbus_get_system_gconn();
- gchar *adapter_path = _bt_get_adapter_path();
-
- BT_INFO("_bt_audio_select_role called [%d]", role);
-
- retv_if(adapter_path == NULL, BLUETOOTH_ERROR_INTERNAL);
- BT_INFO("Adapter Path = %s", adapter_path);
-
- proxy = g_dbus_proxy_new_sync(g_conn, G_DBUS_PROXY_FLAGS_NONE, NULL,
- BT_BLUEZ_NAME, adapter_path, BT_MEDIA_INTERFACE, NULL, &error);
-
- g_free(adapter_path);
-
- if (proxy == NULL) {
- BT_ERR("Unable to create proxy");
-
- if (error) {
- BT_ERR("Error: %s", error->message);
- g_clear_error(&error);
- }
-
- return BLUETOOTH_ERROR_INTERNAL;
- }
-
- if (role == BLUETOOTH_A2DP_SOURCE)
- ret = g_dbus_proxy_call_sync(proxy, "SelectRole", g_variant_new("(s)", "source"),
- G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error);
- else
- 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) {
- BT_ERR("Call SelectRole Failed");
- if (error) {
- BT_ERR("errCode[%x], message[%s]", error->code, error->message);
- g_clear_error(&error);
- }
-
- return BLUETOOTH_ERROR_INTERNAL;
- }
-
- g_variant_unref(ret);
- return BLUETOOTH_ERROR_NONE;
-}