bundle_free(kb);
}
-static void __bt_adapter_set_status(bt_status_t status)
+void _bt_adapter_set_status(bt_status_t status)
{
adapter_status = status;
}
__bt_set_enabled();
- __bt_adapter_set_status(BT_ACTIVATED);
+ _bt_adapter_set_status(BT_ACTIVATED);
}
void _bt_handle_adapter_removed(void)
{
- __bt_adapter_set_status(BT_DEACTIVATED);
+ _bt_adapter_set_status(BT_DEACTIVATED);
vconf_ignore_key_changed(VCONFKEY_SETAPPL_DEVICE_NAME_STR,
(vconf_callback_fn)__bt_phone_name_changed_cb);
return BLUETOOTH_ERROR_DEVICE_ALREADY_ENABLED;
}
- __bt_adapter_set_status(BT_ACTIVATING);
+ _bt_adapter_set_status(BT_ACTIVATING);
proxy = __bt_get_core_proxy();
if (!proxy)
G_TYPE_INVALID,
G_TYPE_INVALID) == FALSE) {
- __bt_adapter_set_status(BT_DEACTIVATED);
+ _bt_adapter_set_status(BT_DEACTIVATED);
if (err != NULL) {
BT_ERR("Bt core call failed: [%s]", err->message);
return BLUETOOTH_ERROR_DEVICE_NOT_ENABLED;
}
- __bt_adapter_set_status(BT_DEACTIVATING);
+ _bt_adapter_set_status(BT_DEACTIVATING);
proxy = __bt_get_core_proxy();
if (!proxy)
if (dbus_g_proxy_call(proxy, "DisableAdapter", NULL,
G_TYPE_INVALID, G_TYPE_INVALID) == FALSE) {
BT_ERR("Bt core call failed");
- __bt_adapter_set_status(BT_ACTIVATED);
+ _bt_adapter_set_status(BT_ACTIVATED);
return BLUETOOTH_ERROR_INTERNAL;
}
dbus_message_iter_recurse(&dict_iter, &value_iter);
dbus_message_iter_get_basic(&value_iter, &power);
- power_event = (power == TRUE) ? BLUETOOTH_EVENT_ENABLED :
- BLUETOOTH_EVENT_DISABLED;
+ if (power == TRUE) {
+ power_event = BLUETOOTH_EVENT_ENABLED;
+ _bt_adapter_set_status(BT_ACTIVATED);
+ } else {
+ power_event = BLUETOOTH_EVENT_DISABLED;
+ _bt_adapter_set_status(BT_DEACTIVATED);
+ }
BT_ERR("send power state: %d", power);
/* Send event to application */
GList *node;
bt_remote_dev_info_t *dev_info;
+ bt_remote_dev_info_t *new_dev_info;
dbus_message_iter_recurse(&dict_iter, &value_iter);
dbus_message_iter_get_basic(&value_iter, &paired);
if (strcasecmp(dev_info->address, address) == 0) {
g_list = g_list_remove(g_list, dev_info);
_bt_free_device_info(dev_info);
+
+ new_dev_info = _bt_get_remote_device_info(address);
+ if (new_dev_info == NULL) {
+ g_free(address);
+ return;
+ }
+ g_list = g_list_append(g_list, new_dev_info);
}
node = g_list_next(node);
}
if (_bt_is_device_creating() == TRUE) {
- BT_DBG("Try to Pair by me");
+ BT_DBG("Try to Pair by me or already paired");
} else {
_bt_send_event(BT_ADAPTER_EVENT,
BLUETOOTH_EVENT_BONDING_FINISHED,
_bt_convert_device_path_to_address(object_path, address);
- _bt_send_event(BT_ADAPTER_EVENT,
- BLUETOOTH_EVENT_BONDED_DEVICE_REMOVED,
- DBUS_TYPE_INT32, &result,
- DBUS_TYPE_STRING, &address,
- DBUS_TYPE_INVALID);
-
node = g_list_first(g_list);
while (node != NULL){
dev_info = (bt_remote_dev_info_t *)node->data;
- if (strcasecmp(dev_info->address,
- address) == 0) {
+ if (strcasecmp(dev_info->address, address) == 0) {
+ if (dev_info->paired) {
+ BT_DBG("send bt bond destroy event");
+ _bt_send_event(BT_ADAPTER_EVENT,
+ BLUETOOTH_EVENT_BONDED_DEVICE_REMOVED,
+ DBUS_TYPE_INT32, &result,
+ DBUS_TYPE_STRING, &address,
+ DBUS_TYPE_INVALID);
+ } else {
+ BT_DBG("Bluez removes device %s, send device disappear event", dev_info->name);
+ _bt_send_event(BT_ADAPTER_EVENT,
+ BLUETOOTH_EVENT_REMOTE_DEVICE_DISAPPEARED,
+ DBUS_TYPE_INT32, &result,
+ DBUS_TYPE_STRING, &dev_info->address,
+ DBUS_TYPE_UINT32, &dev_info->class,
+ DBUS_TYPE_INT16, &dev_info->rssi,
+ DBUS_TYPE_STRING, &dev_info->name,
+ DBUS_TYPE_BOOLEAN, &dev_info->paired,
+ DBUS_TYPE_BOOLEAN, &dev_info->connected,
+ DBUS_TYPE_BOOLEAN, &dev_info->trust,
+ DBUS_TYPE_ARRAY, DBUS_TYPE_STRING,
+ &dev_info->uuids, dev_info->uuid_count,
+ DBUS_TYPE_INVALID);
+ }
g_list = g_list_remove(g_list, dev_info);
_bt_free_device_info(dev_info);
break;
node = g_list_first(g_list);
- while (node != NULL){
+ while (node != NULL) {
dev_info = (bt_remote_dev_info_t *)node->data;
-
- _bt_send_event(BT_ADAPTER_EVENT,
- BLUETOOTH_EVENT_REMOTE_DEVICE_FOUND,
- DBUS_TYPE_INT32, &result,
- DBUS_TYPE_STRING, &dev_info->address,
- DBUS_TYPE_UINT32, &dev_info->class,
- DBUS_TYPE_INT16, &dev_info->rssi,
- DBUS_TYPE_STRING, &dev_info->name,
- DBUS_TYPE_BOOLEAN, &dev_info->paired,
- DBUS_TYPE_BOOLEAN, &dev_info->connected,
- DBUS_TYPE_BOOLEAN, &dev_info->trust,
- DBUS_TYPE_ARRAY, DBUS_TYPE_STRING,
- &dev_info->uuids, dev_info->uuid_count,
- DBUS_TYPE_INVALID);
-
+ /* do not search paired devices.
+ * Paired devices are in g_list in order to trig device disappear
+ * or remove bonding events */
+ if (!dev_info->paired) {
+ _bt_send_event(BT_ADAPTER_EVENT,
+ BLUETOOTH_EVENT_REMOTE_DEVICE_FOUND,
+ DBUS_TYPE_INT32, &result,
+ DBUS_TYPE_STRING, &dev_info->address,
+ DBUS_TYPE_UINT32, &dev_info->class,
+ DBUS_TYPE_INT16, &dev_info->rssi,
+ DBUS_TYPE_STRING, &dev_info->name,
+ DBUS_TYPE_BOOLEAN, &dev_info->paired,
+ DBUS_TYPE_BOOLEAN, &dev_info->connected,
+ DBUS_TYPE_BOOLEAN, &dev_info->trust,
+ DBUS_TYPE_ARRAY, DBUS_TYPE_STRING,
+ &dev_info->uuids, dev_info->uuid_count,
+ DBUS_TYPE_INVALID);
+ }
node = g_list_next(node);
}
}