}
}
-void _bt_convert_addr_string_to_type(unsigned char *addr,
- const char *address)
+void _bt_convert_addr_string_to_type(unsigned char *addr, const char *address)
{
int i;
char *ptr = NULL;
}
}
-void _bt_convert_addr_string_to_secure_string(char *addr,
- const char *address)
+void _bt_convert_addr_string_to_secure_string(char *addr, const char *address)
{
int len;
return;
}
-void _bt_convert_addr_type_to_string(char *address,
- unsigned char *addr)
+void _bt_convert_addr_type_to_string(char *address, unsigned char *addr)
{
ret_if(address == NULL);
ret_if(addr == NULL);
addr[3], addr[4], addr[5]);
}
+void _bt_convert_addr_type_to_secure_string(char *address, unsigned char *addr)
+{
+ ret_if(address == NULL);
+ ret_if(addr == NULL);
+
+ g_snprintf(address, BT_ADDRESS_STRING_SIZE,
+ "%2.2X:%2.2X:%2.2X:%2.2X:XX:XX",
+ addr[0], addr[1], addr[2], addr[3]);
+}
+
const char *_bt_convert_error_to_string(int error)
{
switch (error) {
}
+void _bt_convert_device_path_to_addr_type(const char *device_path,
+ unsigned char *addr)
+{
+ char *dev_addr;
+ char address[BT_ADDRESS_STRING_SIZE] = { 0 };
+ int i;
+ char *addr_ptr = address;
+ char *ptr = NULL;
+
+ ret_if(device_path == NULL);
+ ret_if(addr == NULL);
+
+ dev_addr = strstr(device_path, "dev_");
+ if (dev_addr != NULL) {
+ dev_addr += 4;
+ g_strlcpy(addr_ptr, dev_addr, BT_ADDRESS_STRING_SIZE);
+
+ for (i = 0; i < BT_ADDRESS_LENGTH_MAX; i++) {
+ addr[i] = strtol(addr_ptr, &ptr, 16);
+ if (ptr[0] != '\0') {
+ if (ptr[0] != '_')
+ return;
+
+ addr_ptr = ptr + 1;
+ }
+ }
+ }
+}
+
void _bt_convert_device_path_to_address(const char *device_path,
char *device_address)
{
GVariantIter *interface_iter = NULL;
char *interface_str = NULL;
bt_gatt_service_change_t change;
- char address[BT_ADDRESS_STRING_SIZE] = { 0 };
char secure_address[BT_ADDRESS_STRING_SIZE] = { 0 };
bt_user_info_t *user_info = NULL;
+ user_info = _bt_get_user_data(BT_COMMON);
+ if (user_info == NULL) {
+ BT_ERR("There is no registered common event callback");
+ return;
+ }
+
if (strcasecmp(signal_name, "GattServiceAdded") == 0) {
g_variant_get(parameters, "(&s)", &path);
- _bt_convert_device_path_to_address(path, address);
- _bt_convert_addr_string_to_type(change.device_addr.addr, address);
- _bt_convert_addr_string_to_secure_string(secure_address, address);
+ _bt_convert_device_path_to_addr_type(path, change.device_addr.addr);
+ _bt_convert_addr_type_to_secure_string(secure_address,
+ change.device_addr.addr);
if (_bluetooth_gatt_check_service_change_watcher_address(&change.device_addr)
== FALSE) {
BT_INFO("GATT Service [%s] added, but no watcher for %s",
- path, secure_address);
+ path, secure_address);
return;
} else
BT_INFO(" ### GATT Service added [%s] [%s]",
- path, secure_address);
+ path, secure_address);
change.svc_path = g_strdup(path);
change.change_type = BLUETOOTH_GATT_SERVICE_CHANGE_TYPE_ADD;
-
- user_info = _bt_get_user_data(BT_COMMON);
- if (user_info != NULL) {
- _bt_common_event_cb(
- BLUETOOTH_EVENT_GATT_CLIENT_SERVICE_CHANGED,
- BLUETOOTH_ERROR_NONE, &change,
- user_info->cb, user_info->user_data);
- }
-
+ _bt_common_event_cb(BLUETOOTH_EVENT_GATT_CLIENT_SERVICE_CHANGED,
+ BLUETOOTH_ERROR_NONE, &change,
+ user_info->cb, user_info->user_data);
g_free(change.svc_path);
} else if (strcasecmp(signal_name, "InterfacesRemoved") == 0) {
- g_variant_get(parameters, "(&oas)",
- &path, &interface_iter);
-
+ g_variant_get(parameters, "(&oas)", &path, &interface_iter);
if (!path) {
BT_ERR("Invalid adapter path");
+ g_variant_iter_free(interface_iter);
return;
}
- while (g_variant_iter_loop(interface_iter, "s", &interface_str)) {
- if (g_strcmp0(interface_str, GATT_SERV_INTERFACE) == 0) {
- _bt_convert_device_path_to_address(path, address);
- _bt_convert_addr_string_to_type(change.device_addr.addr, address);
- _bt_convert_addr_string_to_secure_string(secure_address, address);
-
- if (_bluetooth_gatt_check_service_change_watcher_address(&change.device_addr)
- == FALSE) {
- BT_INFO("GATT Service [%s] removed, but no watcher for %s",
- path, secure_address);
- return;
- }
-
- change.svc_path = g_strdup(path);
- change.change_type = BLUETOOTH_GATT_SERVICE_CHANGE_TYPE_REMOVE;
+ _bt_convert_device_path_to_addr_type(path, change.device_addr.addr);
+ if (!_bluetooth_gatt_check_service_change_watcher_address(&change.device_addr)) {
+ g_variant_iter_free(interface_iter);
+ return;
+ }
- BT_INFO(" ### GATT Service removed [%s] [%s]",
- path, secure_address);
+ while (g_variant_iter_loop(interface_iter, "&s", &interface_str)) {
+ if (g_strcmp0(interface_str, GATT_SERV_INTERFACE) != 0)
+ continue;
- user_info = _bt_get_user_data(BT_COMMON);
- if (user_info != NULL) {
- _bt_common_event_cb(
- BLUETOOTH_EVENT_GATT_CLIENT_SERVICE_CHANGED,
- BLUETOOTH_ERROR_NONE, &change,
- user_info->cb, user_info->user_data);
- }
+ _bt_convert_addr_type_to_secure_string(secure_address,
+ change.device_addr.addr);
+ BT_INFO(" ### GATT Service removed [%s] [%s]",
+ path, secure_address);
- g_free(change.svc_path);
- break;
- }
+ change.svc_path = g_strdup(path);
+ change.change_type = BLUETOOTH_GATT_SERVICE_CHANGE_TYPE_REMOVE;
+ _bt_common_event_cb(
+ BLUETOOTH_EVENT_GATT_CLIENT_SERVICE_CHANGED,
+ BLUETOOTH_ERROR_NONE, &change,
+ user_info->cb, user_info->user_data);
+ g_free(change.svc_path);
+ break;
}
g_variant_iter_free(interface_iter);
}
const bluetooth_device_address_t *device_addr)
{
GSList *l;
- char device_address[BT_ADDRESS_STRING_SIZE] = { 0 };
- char secure_address[BT_ADDRESS_STRING_SIZE] = { 0 };
-
- _bt_convert_addr_type_to_string(device_address,
- (unsigned char *)device_addr->addr);
for (l = service_monitor_list; l != NULL; l = l->next) {
- char device_address2[BT_ADDRESS_STRING_SIZE] = { 0 };
- char secure_address2[BT_ADDRESS_STRING_SIZE] = { 0 };
bluetooth_device_address_t *addr = l->data;
- _bt_convert_addr_type_to_string(device_address2,
- (unsigned char *)addr->addr);
- _bt_convert_addr_string_to_secure_string(secure_address,
- device_address);
- _bt_convert_addr_string_to_secure_string(secure_address2,
- device_address2);
- BT_INFO("service_monitor_list [%s] - Input [%s]",
- secure_address2, secure_address);
-
if (!memcmp(device_addr, addr,
- sizeof(bluetooth_device_address_t)))
+ sizeof(bluetooth_device_address_t)))
return TRUE;
}
{
GSList *l;
bluetooth_device_address_t *addr = NULL;
- char device_address[BT_ADDRESS_STRING_SIZE] = { 0 };
char secure_address[BT_ADDRESS_STRING_SIZE] = { 0 };
- _bt_convert_addr_type_to_string(device_address,
- (unsigned char *)address->addr);
- _bt_convert_addr_string_to_secure_string(secure_address,
- device_address);
+ _bt_convert_addr_type_to_secure_string(secure_address, (unsigned char *)address->addr);
BT_INFO("Set watcher for %s with %d", secure_address, enable);
if (enable == TRUE) {
- if (service_monitor_list == NULL)
- _bt_register_manager_subscribe_signal(TRUE);
-
if (_bluetooth_gatt_check_service_change_watcher_address(address)
== TRUE) {
BT_INFO("The watcher is already set");
return BLUETOOTH_ERROR_NONE;
}
+
+ if (service_monitor_list == NULL) {
+ _bt_register_manager_subscribe_signal(TRUE);
+ }
+
addr = g_malloc0(sizeof(bluetooth_device_address_t));
memcpy(addr, address, sizeof(bluetooth_device_address_t));
service_monitor_list =
g_slist_append(service_monitor_list, addr);
} else {
-
for (l = service_monitor_list; l != NULL; l = l->next) {
addr = l->data;
+
if (!memcmp(address, addr,
- sizeof(bluetooth_device_address_t))) {
+ sizeof(bluetooth_device_address_t))) {
service_monitor_list =
g_slist_remove(service_monitor_list, addr);
g_free(addr);
void _bt_divide_device_class(bluetooth_device_class_t *device_class,
unsigned int cod);
-void _bt_convert_addr_string_to_type(unsigned char *addr,
- const char *address);
+void _bt_convert_addr_string_to_type(unsigned char *addr, const char *address);
-void _bt_convert_addr_string_to_secure_string(char *addr,
- const char *address);
+void _bt_convert_addr_string_to_secure_string(char *addr, const char *address);
-void _bt_convert_addr_type_to_string(char *address,
- unsigned char *addr);
+void _bt_convert_addr_type_to_string(char *address, unsigned char *addr);
+
+void _bt_convert_addr_type_to_secure_string(char *address, unsigned char *addr);
const char *_bt_convert_error_to_string(int error);
int _bt_get_uuid_specification_name(const char *uuid, char **name);
+void _bt_convert_device_path_to_addr_type(const char *device_path,
+ unsigned char *addr);
+
void _bt_convert_device_path_to_address(const char *device_path,
- char *device_address);
+ char *device_address);
#ifdef TIZEN_FEATURE_BT_RFCOMM_DIRECT
void _bt_rfcomm_server_free_all(void);