static GDBusConnection *opc_obexd_conn;
static GDBusConnection *map_obexd_conn;
-static GList *p_cache_list = NULL;
-
static guint event_id;
static guint session_reinit_timer;
-typedef struct {
- bt_remote_dev_info_t *dev_info;
-} bt_cache_info_t;
-
/**
* obexd connection type
*/
void _bt_map_client_event_deinit(void);
void _bt_map_on_transfer_finished(const char *transfer_object_path, const int error);
-static void __bt_free_cache_info(bt_cache_info_t *cache_info)
-{
- ret_if(cache_info == NULL);
- _bt_free_remote_dev(cache_info->dev_info);
- g_free(cache_info);
-}
-
-
/* Temp Adapter changes required to make OBEX work for handling device events here ,
This code will be removed and moved to OAL Event Handling part .
*/
return BLUETOOTH_ERROR_NONE;
}
-void __bt_update_remote_cache_devinfo(const char *address, gboolean paired_status)
-{
- BT_DBG("+");
-
- ret_if(address == NULL);
-
- GList * node;
- bt_cache_info_t *cache_info;
- bt_remote_dev_info_t *dev_info;
-
- node = g_list_first(p_cache_list);
-
- while (node != NULL) {
- cache_info = (bt_cache_info_t *)node->data;
-
- if (cache_info == NULL) {
- node = g_list_next(node);
- continue;
- }
-
- dev_info = cache_info->dev_info;
- if (strcasecmp(dev_info->address,
- address) == 0) {
- BT_DBG("Device Found");
- if (paired_status == TRUE)
- cache_info->dev_info->paired = TRUE;
- else
- cache_info->dev_info->paired = FALSE;
- break;
- }
- node = g_list_next(node);
- }
- BT_DBG("-");
-}
-
gboolean __bt_handle_is_flight_mode_enabled(void)
{
if (TIZEN_FEATURE_FLIGHTMODE_ENABLED) {
_bt_convert_device_path_to_address((const char*)object_path, address);
g_free(address);
- } else if (strcasecmp(member, "InterfacesRemoved") == 0) {
- char *object_path = NULL;
- char *address;
- bt_cache_info_t *cache_info;
- bt_remote_dev_info_t *dev_info;
- GList * node;
-
- /* Bonding from remote device */
- address = g_malloc0(BT_ADDRESS_STRING_SIZE);
-
- g_variant_get(msg, "(&o)", &object_path);
-
- _bt_convert_device_path_to_address((const char *)object_path, address);
-
- node = g_list_first(p_cache_list);
-
- while (node != NULL) {
- cache_info = (bt_cache_info_t *)node->data;
-
- if (cache_info == NULL) {
- node = g_list_next(node);
- continue;
- }
-
- dev_info = cache_info->dev_info;
- if (strcasecmp(dev_info->address,
- address) == 0) {
- p_cache_list = g_list_remove(p_cache_list,
- cache_info);
- __bt_free_cache_info(cache_info);
- break;
- }
- node = g_list_next(node);
- }
- g_free(address);
} else if (strcasecmp(member, BT_HARDWARE_ERROR) == 0) {
BT_ERR_C("### Hardware error received from BLUEZ");
} else if (strcasecmp(member, BT_TX_TIMEOUT_ERROR) == 0) {
}
BT_DBG("-");
}
+
static void __bt_obex_property_changed_event(GVariant *msg, const char *path)
{
BT_DBG("+");
BT_DBG("-");
}
-#if 0
-static void __bt_device_remote_connected_properties(
- bt_remote_dev_info_t *remote_dev_info,
- char *address, gboolean connected)
-{
- int result = BLUETOOTH_ERROR_NONE;
- int i;
- GVariant *param = NULL;
- BT_DBG("+");
-
- if (remote_dev_info->uuid_count > 0) {
- for (i = 0; i < remote_dev_info->uuid_count; i++) {
- char *uuid = remote_dev_info->uuids[i];
- if (strcasecmp(uuid, HID_UUID) == 0) {
- int event = BLUETOOTH_EVENT_NONE;
-
- event = (connected == TRUE) ?
- BLUETOOTH_HID_CONNECTED :
- BLUETOOTH_HID_DISCONNECTED;
- param = g_variant_new("(is)", result,
- address);
- _bt_send_event(BT_HID_EVENT, event,
- param);
- break;
- }
- }
- }
-
- BT_DBG("-");
-}
-
-bt_remote_dev_info_t *_bt_get_remote_device_info_by_object_path(
- const char *object_path)
-{
- bt_remote_dev_info_t *dev_info;
- GDBusProxy *adapter_proxy;
- GDBusProxy *device_proxy;
- GVariant *value;
- GVariant *tmp_value;
- gchar *name;
- gchar * address;
- GDBusConnection *conn;
- GError *error = NULL;
- GVariant *result = NULL;
- GVariantIter *value_iter;
- guint8 m_value;
- int i = 0;
-
- adapter_proxy = _bt_get_adapter_proxy();
- retv_if(adapter_proxy == NULL, NULL);
-
- retv_if(object_path == NULL, NULL);
-
- conn = _bt_gdbus_get_system_gconn();
- if (conn == NULL) {
- BT_ERR("conn == NULL");
- return NULL;
- }
-
- device_proxy = g_dbus_proxy_new_sync(conn, G_DBUS_PROXY_FLAGS_NONE,
- NULL, BT_BLUEZ_NAME, object_path,
- BT_PROPERTIES_INTERFACE, NULL, NULL);
-
- retv_if(device_proxy == NULL, NULL);
-
- result = g_dbus_proxy_call_sync(device_proxy, "GetAll",
- g_variant_new("(s)", BT_DEVICE_INTERFACE),
- G_DBUS_CALL_FLAGS_NONE,
- -1,
- NULL,
- &error);
-
- g_object_unref(device_proxy);
-
- dev_info = g_malloc0(sizeof(bt_remote_dev_info_t));
-
- if (result != NULL) {
- g_variant_get(result , "(@a{sv})", &value);
- g_variant_unref(result);
-
- tmp_value = g_variant_lookup_value(value, "Alias", G_VARIANT_TYPE_STRING);
-
- g_variant_get(tmp_value, "s", &name);
- g_variant_unref(tmp_value);
- if (name != NULL)
- DBG_SECURE("Alias Name [%s]", name);
- else {
- tmp_value = g_variant_lookup_value(value, "Name", G_VARIANT_TYPE_STRING);
- g_variant_get(tmp_value, "s", &name);
- g_variant_unref(tmp_value);
- }
-
- tmp_value = g_variant_lookup_value(value, "IsAliasSet", G_VARIANT_TYPE_BOOLEAN);
- if (tmp_value) {
- dev_info->is_alias_set = g_variant_get_boolean(tmp_value);
- g_variant_unref(tmp_value);
- } else {
- dev_info->is_alias_set = FALSE;
- }
- BT_DBG("IsAliasSet: [%s]", dev_info->is_alias_set ? "TRUE" : "FALSE");
-
- tmp_value = g_variant_lookup_value(value, "Class", G_VARIANT_TYPE_UINT32);
- if (tmp_value) {
- dev_info->class = g_variant_get_uint32(tmp_value);
- g_variant_unref(tmp_value);
- } else
- dev_info->class = 0;
-
- tmp_value = g_variant_lookup_value(value, "Connected", G_VARIANT_TYPE_BYTE);
- if (tmp_value) {
- dev_info->connected = g_variant_get_byte(tmp_value);
- g_variant_unref(tmp_value);
- } else
- dev_info->connected = BLUETOOTH_CONNECTED_LINK_NONE;
- BT_DBG("connected link : %d", dev_info->connected);
-
- tmp_value = g_variant_lookup_value(value, "Trusted", G_VARIANT_TYPE_BOOLEAN);
- if (tmp_value) {
- dev_info->trust = g_variant_get_boolean(tmp_value);
- g_variant_unref(tmp_value);
- } else
- dev_info->trust = FALSE;
-
- tmp_value = g_variant_lookup_value(value, "Paired", G_VARIANT_TYPE_BOOLEAN);
- if (tmp_value) {
- dev_info->paired = g_variant_get_boolean(tmp_value);
- g_variant_unref(tmp_value);
- } else
- dev_info->paired = FALSE;
-
- tmp_value = g_variant_lookup_value(value, "RSSI", G_VARIANT_TYPE_INT16);
- if (tmp_value) {
- dev_info->rssi = g_variant_get_int16(tmp_value);
- g_variant_unref(tmp_value);
- } else
- dev_info->rssi = 0;
-
- tmp_value = g_variant_lookup_value(value, "LastAddrType", G_VARIANT_TYPE_BYTE);
- if (tmp_value) {
- dev_info->addr_type = g_variant_get_byte(tmp_value);
- g_variant_unref(tmp_value);
- } else
- dev_info->addr_type = 0;
-
- tmp_value = g_variant_lookup_value(value, "UUIDs", G_VARIANT_TYPE_STRING_ARRAY);
- if (tmp_value) {
- __bt_get_uuids(tmp_value, dev_info);
- g_variant_unref(tmp_value);
- }
-
- tmp_value = g_variant_lookup_value(value, "ManufacturerDataLen", G_VARIANT_TYPE_UINT16);
- if (tmp_value) {
- dev_info->manufacturer_data_len = g_variant_get_uint16(tmp_value);
- if (dev_info->manufacturer_data_len > BLUETOOTH_MANUFACTURER_DATA_LENGTH_MAX) {
- BT_ERR("manufacturer_data_len is too long(len = %d)", dev_info->manufacturer_data_len);
- dev_info->manufacturer_data_len = BLUETOOTH_MANUFACTURER_DATA_LENGTH_MAX;
- }
- g_variant_unref(tmp_value);
- } else
- dev_info->manufacturer_data_len = 0;
-
- tmp_value = g_variant_lookup_value(value, "ManufacturerData", G_VARIANT_TYPE_ARRAY);
- if (tmp_value) {
- if ((dev_info->manufacturer_data_len == 0) ||
- dev_info->manufacturer_data_len != g_variant_get_size(tmp_value)) {
- BT_ERR("manufacturer data length doesn't match");
- dev_info->manufacturer_data_len = 0;
- dev_info->manufacturer_data = NULL;
- } else {
- dev_info->manufacturer_data = g_malloc0(dev_info->manufacturer_data_len);
- g_variant_get(tmp_value, "ay", &value_iter);
- while (g_variant_iter_loop(value_iter, "y", &m_value))
- dev_info->manufacturer_data[i++] = m_value;
- }
- g_variant_unref(tmp_value);
- } else {
- BT_INFO("manufacture data is not a G_VARIANT_TYPE_ARRAY ");
- dev_info->manufacturer_data_len = 0;
- dev_info->manufacturer_data = NULL;
- }
-
- tmp_value = g_variant_lookup_value(value, "Address", G_VARIANT_TYPE_STRING);
- g_variant_get(tmp_value, "s", &address);
- g_variant_unref(tmp_value);
-
- dev_info->address = g_strdup(address);
- dev_info->name = g_strdup(name);
- g_free(name);
- g_variant_unref(value);
- } else {
- BT_ERR("result is NULL\n");
- g_free(dev_info);
- dev_info = NULL;
- }
-
- return dev_info;
-}
-#endif
-
void _bt_handle_property_changed_event(GVariant *msg, const char *object_path)
{
char *interface_name = NULL;
g_variant_get(msg, "(&s@a{sv}@as)", &interface_name, &val, NULL);
BT_DBG("_bt_handle_property_changed_event");
- if (strcasecmp(interface_name, BT_OBEX_TRANSFER_INTERFACE) == 0) {
+ if (strcasecmp(interface_name, BT_ADAPTER_INTERFACE) == 0) {
+ gboolean ret = FALSE;
+ gboolean powered = FALSE;
+
+ /* Check if Adapter is disabled, cancle queued transfers if any */
+ ret = g_variant_lookup(msg, "Powered", "b", &powered);
+ if (ret && !powered)
+ _bt_cancel_queued_transfers();
+ } else if (strcasecmp(interface_name, BT_OBEX_TRANSFER_INTERFACE) == 0) {
BT_DBG("BT_OBEX_TRANSFER_INTERFACE");
__bt_obex_property_changed_event(val,
object_path);
return BLUETOOTH_ERROR_NONE;
}
-#if 0
-static void __bt_get_service_list(GVariant *value, bluetooth_device_info_t *dev)
-{
- int i = 0;
- char **parts;
- GVariantIter *iter;
- gchar *uuid = NULL;
-
- ret_if(value == NULL);
- ret_if(dev == NULL);
-
- dev->service_index = 0;
-
- g_variant_get(value, "as", &iter);
- while (g_variant_iter_loop(iter, "s", &uuid)) {
- g_strlcpy(dev->uuids[i], uuid, BLUETOOTH_UUID_STRING_MAX);
- parts = g_strsplit(uuid, "-", -1);
-
- if (parts == NULL || parts[0] == NULL) {
- g_free(uuid);
- break;
- }
-
- dev->service_list_array[i] = g_ascii_strtoull(parts[0], NULL, 16);
- g_strfreev(parts);
-
- dev->service_index++;
- i++;
- }
- g_variant_iter_free(iter);
-}
-
-static int __bt_get_bonded_device_info(gchar *device_path,
- bluetooth_device_info_t *dev_info)
-{
- GError *error = NULL;
- GDBusProxy *device_proxy;
- gchar *address = NULL;
- gchar *name = NULL;
- unsigned int cod = 0;
- gint rssi = 0;
- gboolean trust = FALSE;
- gboolean paired = FALSE;
- guchar connected = 0;
- GByteArray *manufacturer_data = NULL;
- int ret;
- GDBusConnection *conn;
- GVariant *result;
- GVariantIter *property_iter;
- const gchar *key;
- GVariant *value;
- guint8 char_value;
- GVariantIter *char_value_iter;
-
- BT_CHECK_PARAMETER(device_path, return);
- BT_CHECK_PARAMETER(dev_info, return);
-
- conn = _bt_gdbus_get_system_gconn();
- retv_if(conn == NULL, BLUETOOTH_ERROR_INTERNAL);
-
- device_proxy = g_dbus_proxy_new_sync(conn, G_DBUS_PROXY_FLAGS_NONE,
- NULL,
- BT_BLUEZ_NAME,
- device_path,
- BT_PROPERTIES_INTERFACE,
- NULL, NULL);
-
- retv_if(device_proxy == NULL, BLUETOOTH_ERROR_INTERNAL);
-
- result = g_dbus_proxy_call_sync(device_proxy,
- "GetAll",
- g_variant_new("(s)", BT_DEVICE_INTERFACE),
- G_DBUS_CALL_FLAGS_NONE,
- -1,
- NULL,
- &error);
-
- if (!result) {
- BT_ERR("Error occured in Proxy call");
- if (error != NULL) {
- BT_ERR("Error occured in Proxy call (Error: %s)", error->message);
- g_clear_error(&error);
- }
- g_object_unref(device_proxy);
- return BLUETOOTH_ERROR_INTERNAL;
- }
-
- g_object_unref(device_proxy);
-
- g_variant_get(result, "(a{sv})", &property_iter);
-
- while (g_variant_iter_loop(property_iter, "{sv}", &key, &value)) {
- if (!g_strcmp0(key, "Paired")) {
- paired = g_variant_get_boolean(value);
- } else if (!g_strcmp0(key, "Address")) {
- g_variant_get(value, "s", &address);
- } else if (!g_strcmp0(key, "Alias")) {
- g_variant_get(value, "s", &name);
- } else if (!g_strcmp0(key, "Name")) {
- if (!name)
- g_variant_get(value, "s", &name);
- } else if (!g_strcmp0(key, "Class")) {
- cod = g_variant_get_uint32(value);
- } else if (!g_strcmp0(key, "Connected")) {
- connected = g_variant_get_byte(value);
- } else if (!g_strcmp0(key, "Trusted")) {
- trust = g_variant_get_boolean(value);
- } else if (!g_strcmp0(key, "RSSI")) {
- rssi = g_variant_get_int16(value);
- } else if (!g_strcmp0(key, "UUIDs")) {
- __bt_get_service_list(value, dev_info);
- } else if (!g_strcmp0(key, "ManufacturerDataLen")) {
- dev_info->manufacturer_data.data_len = g_variant_get_uint16(value);
- } else if (!g_strcmp0(key, "ManufacturerData")) {
- manufacturer_data = g_byte_array_new();
- g_variant_get(value, "ay", &char_value_iter);
- while (g_variant_iter_loop(char_value_iter, "y", &char_value))
- g_byte_array_append(manufacturer_data, &char_value, 1);
-
- g_variant_iter_free(char_value_iter);
-
- if (manufacturer_data) {
- if (manufacturer_data->len > 0) {
- memcpy(dev_info->manufacturer_data.data, manufacturer_data->data,
- manufacturer_data->len);
- }
- }
- g_byte_array_free(manufacturer_data, TRUE);
- }
- }
- g_variant_iter_free(property_iter);
-
- BT_DBG("trust: %d, paired: %d", trust, paired);
-
- g_variant_unref(result);
-
- if ((paired == FALSE) && (trust == FALSE)) {
- g_free(address);
- g_free(name);
- return BLUETOOTH_ERROR_NOT_PAIRED;
- }
-
- _bt_convert_addr_string_to_type(dev_info->device_address.addr,
- address);
-
- _bt_divide_device_class(&dev_info->device_class, cod);
-
- g_strlcpy(dev_info->device_name.name, name,
- BLUETOOTH_DEVICE_NAME_LENGTH_MAX+1);
-
- dev_info->rssi = rssi;
- dev_info->trust = trust;
- dev_info->paired = paired;
- dev_info->connected = connected;
- ret = BLUETOOTH_ERROR_NONE;
- g_free(address);
- g_free(name);
-
- return ret;
-}
-
-int _bt_get_bonded_device_info(bluetooth_device_address_t *device_address,
- bluetooth_device_info_t *dev_info)
-{
- char *object_path = NULL;
- GDBusProxy *adapter_proxy;
- char address[BT_ADDRESS_STRING_SIZE] = { 0 };
- int ret = BLUETOOTH_ERROR_NONE;
-
- BT_CHECK_PARAMETER(device_address, return);
- BT_CHECK_PARAMETER(dev_info, return);
-
- adapter_proxy = _bt_get_adapter_proxy();
- retv_if(adapter_proxy == NULL, BLUETOOTH_ERROR_INTERNAL);
-
- _bt_convert_addr_type_to_string(address, device_address->addr);
-
- object_path = _bt_get_device_object_path(address);
-
- retv_if(object_path == NULL, BLUETOOTH_ERROR_NOT_PAIRED);
-
- ret = __bt_get_bonded_device_info(object_path, dev_info);
- g_free(object_path);
-
- return ret;
-}
-#endif
-
char *_bt_get_bonded_device_name(char *address)
{
bt_remote_dev_info_t *dev_info;
void _bt_handle_device_event(GVariant *msg, const char *member, const char *path)
{
-// int event = 0;
- int result = BLUETOOTH_ERROR_NONE;
char *address;
- char *dev_name = NULL;
-// const char *property = NULL;
- GVariant *param = NULL;
char secure_address[BT_ADDRESS_STRING_SIZE] = { 0 };
ret_if(path == NULL);
- if (strcasecmp(member, "DeviceConnected") == 0) {
- unsigned char addr_type = 0;
-
- g_variant_get(msg, "(y)", &addr_type);
-
- address = g_malloc0(BT_ADDRESS_STRING_SIZE);
-
- _bt_convert_device_path_to_address(path, address);
- dev_name = _bt_get_bonded_device_name(address);
-
- _bt_convert_addr_string_to_secure_string(secure_address, address);
- BT_INFO("Address : %s Type : %d", secure_address, addr_type);
- BT_ERR_C("### Connected [%s] [%s]", !addr_type ? "BREDR" : "LE",
- !addr_type ? dev_name : secure_address);
- g_free(dev_name);
-
- _bt_logging_connection(TRUE, addr_type);
- param = g_variant_new("(isy)", result, address, addr_type);
- /*Send event to application*/
- _bt_send_event(BT_DEVICE_EVENT,
- BLUETOOTH_EVENT_DEVICE_CONNECTED,
- param);
- g_free(address);
- } else if (strcasecmp(member, "Disconnected") == 0) {
+ if (strcasecmp(member, "Disconnected") == 0) {
unsigned char disc_reason = 0;
unsigned char addr_type = 0;
char *dev_name = NULL;
g_variant_get(msg, "(yys)", &addr_type, &disc_reason, &dev_name);
- result = disc_reason;
-
address = g_malloc0(BT_ADDRESS_STRING_SIZE);
_bt_convert_device_path_to_address(path, address);
!addr_type ? dev_name : secure_address);
g_free(dev_name);
- //_bt_headset_set_local_connection(FALSE);
- _bt_logging_connection(FALSE, addr_type);
-
if (!addr_type) {
-#ifdef TIZEN_BT_A2DP_SINK_AUTO_CONNECT
- {
- int bt_device_state = VCONFKEY_BT_DEVICE_NONE;
-
- if (vconf_get_int(VCONFKEY_BT_DEVICE, &bt_device_state) != 0)
- BT_ERR("vconf_get_int failed");
-
- BT_INFO("conn_state[0x%x], adapter_state [%d]",
- bt_device_state, _bt_adapter_get_status_for_Obex());
-
- if (disc_reason == BLUETOOTH_ERROR_CONNECTION_TIMEOUT) {
- _bt_audio_start_auto_connect(TRUE);
- } else if (bt_device_state &
- VCONFKEY_BT_DEVICE_A2DP_SOURCE_CONNECTED) {
- BT_INFO("Disconnected due to turning BT off. Skip a address");
- } else {
- char *last_connected = NULL;
- last_connected = vconf_get_str(BT_LAST_CONNECTED_DEVICE);
- if (!g_strcmp0(address, last_connected))
- _bt_audio_set_auto_connect_device_addr("");
- if (last_connected)
- free(last_connected);
- }
- }
-
-#endif
/*Check for any OPP transfer on the device and cancel
* the transfer
*/
_bt_opp_client_check_pending_transfer(address);
/* TODO: MAP? see above */
}
- param = g_variant_new("(isy)", result, address, addr_type);
- _bt_send_event(BT_DEVICE_EVENT,
- BLUETOOTH_EVENT_DEVICE_DISCONNECTED,
- param);
g_free(address);
} else if (strcasecmp(member, "ProfileStateChanged") == 0) {
int state = 0;
g_free(address);
}
}
-static gboolean __bt_parse_device_properties(GVariant *item,
- bt_remote_dev_info_t *dev_info)
-{
- GVariantIter iter;
- gchar *key;
- GVariant *val;
- gsize len = 0;
- if (item == NULL)
- return FALSE;
-
- g_variant_iter_init(&iter, item);
- while (g_variant_iter_loop(&iter, "{sv}", &key, &val)) {
- if (strcasecmp(key, "Address") == 0) {
- dev_info->address = g_variant_dup_string(val, &len);
- } else if (strcasecmp(key, "Class") == 0) {
- dev_info->class = g_variant_get_uint32(val);
- } else if (strcasecmp(key, "name") == 0) {
- if (dev_info->name == NULL)
- dev_info->name = g_variant_dup_string(val, &len);
- } else if (strcasecmp(key, "Connected") == 0) {
- dev_info->connected = g_variant_get_byte(val);
- } else if (strcasecmp(key, "paired") == 0) {
- dev_info->paired = g_variant_get_boolean(val);
- } else if (strcasecmp(key, "Trusted") == 0) {
- dev_info->trust = g_variant_get_boolean(val);
- } else if (strcasecmp(key, "RSSI") == 0) {
- dev_info->rssi = g_variant_get_int16(val);
- } else if (strcasecmp(key, "LastAddrType") == 0) {
- dev_info->addr_type = g_variant_get_byte(val);
- } else if (strcasecmp(key, "UUIDs") == 0) {
- char **uuid_value;
- gsize size = 0;
- int i = 0;
- size = g_variant_get_size(val);
-
- if (size > 0) {
- uuid_value = (char **)g_variant_get_strv(val, &size);
- if (dev_info->uuids == NULL)
- dev_info->uuids = g_malloc0(sizeof(char *) * size);
-
- for (i = 0; uuid_value[i] != NULL; i++) {
- dev_info->uuid_count++;
- dev_info->uuids[i] = g_strdup(uuid_value[i]);
- }
- g_free(uuid_value);
- }
- } else if (strcasecmp(key, "ManufacturerDataLen") == 0) {
- g_variant_get(val, "q", &dev_info->manufacturer_data_len);
- if (dev_info->manufacturer_data_len > BLUETOOTH_MANUFACTURER_DATA_LENGTH_MAX) {
- BT_ERR("manufacturer_data_len is too long(len = %d)", dev_info->manufacturer_data_len);
- dev_info->manufacturer_data_len = BLUETOOTH_MANUFACTURER_DATA_LENGTH_MAX;
- }
-
- if (dev_info->manufacturer_data_len == 0)
- dev_info->manufacturer_data = g_strdup("");
- } else if (strcasecmp(key, "ManufacturerData") == 0) {
- int i = 0;
- int len = 0;
- GVariantIter *value_iter;
- guint8 m_value;
-
- len = g_variant_get_size(val);
- if (len <= 0)
- continue;
-
- dev_info->manufacturer_data = g_malloc0(len);
-
- g_variant_get(val, "ay", &value_iter);
- while (g_variant_iter_loop(value_iter, "y", &m_value))
- dev_info->manufacturer_data[i++] = m_value;
- g_variant_iter_free(value_iter);
- }
- }
-
- BT_DBG("-");
- return TRUE;
-}
-
-static gboolean __bt_parse_interface(GVariant *msg,
- bt_remote_dev_info_t *dev_info)
-{
- char *path = NULL;
- GVariant *optional_param = NULL;
- GVariantIter iter;
- GVariant *child;
- char *interface_name = NULL;
- GVariant *inner_iter = NULL;
- g_variant_get(msg, "(&o@a{sa{sv}})",
- &path, &optional_param);
- g_variant_iter_init(&iter, optional_param);
-
- retv_if(optional_param == NULL, FALSE);
-
- while ((child = g_variant_iter_next_value(&iter))) {
- g_variant_get(child, "{&s@a{sv}}", &interface_name, &inner_iter);
- if (g_strcmp0(interface_name, BT_DEVICE_INTERFACE) == 0) {
- BT_DBG("Found a device: %s", path);
- if (__bt_parse_device_properties(inner_iter,
- dev_info) == FALSE) {
- g_variant_unref(inner_iter);
- g_variant_unref(child);
- g_variant_unref(optional_param);
- BT_ERR("Fail to parse the properies");
- return FALSE;
- } else {
- g_variant_unref(inner_iter);
- g_variant_unref(child);
- g_variant_unref(optional_param);
- return TRUE;
- }
- }
- g_variant_unref(inner_iter);
- g_variant_unref(child);
- }
-
- g_variant_unref(optional_param);
-
- return FALSE;
-}
-
-static int __bt_parse_event(GVariant *msg)
-{
- GVariantIter iter;
- GVariant *child;
- char *interface_name = NULL;
- GVariant *inner_iter = NULL;
-
- g_variant_iter_init(&iter, msg);
-
- while ((child = g_variant_iter_next_value(&iter))) {
- g_variant_get(child, "{&s@a{sv}}", &interface_name, &inner_iter);
- if (g_strcmp0(interface_name,
- BT_DEVICE_INTERFACE) == 0) {
- g_variant_unref(inner_iter);
- g_variant_unref(child);
- return BT_DEVICE_EVENT;
- } else if (g_strcmp0(interface_name,
- BT_MEDIATRANSPORT_INTERFACE) == 0) {
- g_variant_unref(inner_iter);
- g_variant_unref(child);
- return BT_MEDIA_TRANSFER_EVENT;
- } else if (g_strcmp0(interface_name,
- BT_PLAYER_CONTROL_INTERFACE) == 0) {
- g_variant_unref(inner_iter);
- g_variant_unref(child);
- return BT_AVRCP_CONTROL_EVENT;
- }
- g_variant_unref(inner_iter);
- g_variant_unref(child);
- }
-
- return 0;
-}
static void __bt_manager_event_filter(GDBusConnection *connection,
const gchar *sender_name,
gpointer user_data)
{
- bt_event_type_t bt_event = 0x00;
- int result = BLUETOOTH_ERROR_NONE;
GVariant *value;
char *obj_path = NULL;
- GVariant *param = NULL;
-#ifdef TIZEN_FEATURE_BT_DPM
- int desktop_state = DPM_BT_ERROR;
-#endif
if (signal_name == NULL)
return;
if (strcasecmp(signal_name, "InterfacesAdded") == 0) {
g_variant_get(parameters, "(&o@a{sa{sv}})", &obj_path, &value);
- if (strcasecmp(obj_path, BT_BLUEZ_HCI_PATH) == 0) {
+ if (strcasecmp(obj_path, BT_BLUEZ_HCI_PATH) == 0)
if (!TIZEN_FEATURE_BT_USB_DONGLE) {
if (_bt_register_obex_server() != BLUETOOTH_ERROR_NONE)
BT_ERR("Fail to init obex server");
}
- } else {
- bt_event = __bt_parse_event(value);
- if (bt_event == BT_DEVICE_EVENT) {
- bt_cache_info_t *cache_info;
- bt_remote_dev_info_t *dev_info;
-
- if (_bt_is_discovering() == FALSE) {
- g_variant_unref(value);
- return;
- }
-
- cache_info = g_malloc0(sizeof(bt_cache_info_t));
- ret_if(cache_info == NULL);
-
- dev_info = g_malloc0(sizeof(bt_remote_dev_info_t));
- if (dev_info == NULL) {
- __bt_free_cache_info(cache_info);
- return;
- }
-
- cache_info->dev_info = dev_info;
-
- if (__bt_parse_interface(parameters, dev_info) == FALSE) {
- BT_ERR("Fail to parse the properies");
- __bt_free_cache_info(cache_info);
- g_variant_unref(value);
- return;
- }
-
- if (dev_info->addr_type != BDADDR_BREDR) {
- /* Whenever emit the property changed from bluez,
- some property doesn't reach to bt-service.
- So LE device is handled as AdvReport signal */
- __bt_free_cache_info(cache_info);
- g_variant_unref(value);
- return;
- }
-
- if (dev_info->name == NULL)
- /* If Remote device name is NULL or still RNR is not done
- * then display address as name.
- */
- dev_info->name = g_strdup(dev_info->address);
-
-#ifdef TIZEN_FEATURE_BT_DPM
- _bt_dpm_get_bluetooth_desktop_connectivity_state(&desktop_state);
- if (desktop_state == DPM_RESTRICTED) {
- bluetooth_device_class_t device_class;
- _bt_divide_device_class(&device_class, dev_info->class);
- BT_DBG("[%s]device_class.major_class : %d", dev_info->name, device_class.major_class);
-
- if (device_class.major_class ==
- BLUETOOTH_DEVICE_MAJOR_CLASS_COMPUTER) {
- __bt_free_cache_info(cache_info);
- g_variant_unref(value);
- return;
- }
- }
-#endif
-
- GVariant *uuids = NULL;
- GVariantBuilder *builder = NULL;
- int i = 0;
- builder = g_variant_builder_new(G_VARIANT_TYPE("as"));
- for (i = 0; i < dev_info->uuid_count; i++) {
- g_variant_builder_add(builder, "s",
- dev_info->uuids[i]);
- }
- uuids = g_variant_new("as", builder);
- g_variant_builder_unref(builder);
- GVariant *manufacturer_data = NULL;
- manufacturer_data = g_variant_new_from_data(
- G_VARIANT_TYPE_BYTESTRING,
- dev_info->manufacturer_data,
- dev_info->manufacturer_data_len,
- TRUE, NULL, NULL);
- param = g_variant_new("(isunsbub@asn@ay)", result,
- dev_info->address,
- dev_info->class,
- dev_info->rssi,
- dev_info->name,
- dev_info->paired,
- dev_info->connected,
- dev_info->trust,
- uuids,
- dev_info->manufacturer_data_len,
- manufacturer_data);
- _bt_send_event(BT_ADAPTER_EVENT,
- BLUETOOTH_EVENT_REMOTE_DEVICE_FOUND,
- param);
- p_cache_list = g_list_append(p_cache_list, cache_info);
- } else if (bt_event == BT_AVRCP_CONTROL_EVENT) {
- BT_DBG("Device path : %s ", obj_path);
- //_bt_set_control_device_path(obj_path);
- }
- }
g_variant_unref(value);
- } else if (strcasecmp(signal_name, "InterfacesRemoved") == 0) {
+ } else if (strcasecmp(signal_name, "InterfacesRemoved") == 0) {
if (TIZEN_FEATURE_BT_USB_DONGLE) {
if (_bt_unregister_obex_server() != BLUETOOTH_ERROR_NONE)
BT_ERR("Fail to unregister obex server");