void __bt_adapter_property_changed_event(DBusMessageIter *msg_iter, const char *path)
{
- DBusGProxy *adapter_proxy;
int mode = 0;
int result = BLUETOOTH_ERROR_NONE;
DBusMessageIter value_iter;
DBUS_TYPE_INVALID);
} else if (strcasecmp(property, "Powered") == 0) {
gboolean power = FALSE;
- int power_event;
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;
+ BT_DBG("power state changed: %d", power);
+
+ if (power == TRUE)
+ _bt_set_enabled();
+ else
+ _bt_set_disabled();
- BT_ERR("send power state: %d", power);
- /* Send event to application */
- _bt_send_event(BT_ADAPTER_EVENT,
- power_event,
- DBUS_TYPE_INT32, &result,
- DBUS_TYPE_INVALID);
} else if (strcasecmp(property, "Discoverable") == 0) {
gboolean discoverable = FALSE;
if (discoverable == FALSE) {
if (_bt_get_discoverable_timeout_property() > 0) {
+ DBusGProxy *adapter_proxy;
g_value_init(&timeout, G_TYPE_UINT);
g_value_set_uint(&timeout, 0);
char *address, gboolean connected)
{
int result = BLUETOOTH_ERROR_NONE;
- int i;
BT_DBG("+");
if (remote_dev_info->uuid_count > 0 ) {
- for (i = 0; i<remote_dev_info->uuid_count; i++) {
+ for (int 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) ?
+ int event = (connected == TRUE) ?
BLUETOOTH_HID_CONNECTED :
BLUETOOTH_HID_DISCONNECTED;
gboolean paired = FALSE;
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);
node = g_list_first(g_list);
while (node != NULL) {
+ bt_remote_dev_info_t *dev_info;
dev_info = (bt_remote_dev_info_t *)node->data;
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,
ret_if(property == NULL);
if (strcasecmp(property, "Connected") == 0) {
- int event = BLUETOOTH_EVENT_NONE;
+ int event;
char *address;
dbus_message_iter_next(&item_iter);
void _bt_handle_device_event(DBusMessage *msg)
{
- int event;
int result = BLUETOOTH_ERROR_NONE;
DBusMessageIter item_iter;
DBusMessageIter value_iter;
ret_if(property == NULL);
if (strcasecmp(property, "Connected") == 0) {
+ int event;
gboolean connected = FALSE;
dbus_message_iter_next(&item_iter);
dbus_message_iter_recurse(&item_iter, &value_iter);
ret_if(!dbus_message_iter_next(&dict_iter));
if (strcasecmp(property, "Connected") == 0) {
- int event = BLUETOOTH_EVENT_NONE;
+ int event;
char *address;
dbus_message_iter_recurse(&dict_iter, &value_iter);
static void __bt_devices_list_free()
{
- bt_remote_dev_info_t *dev_info;
GList *node;
node = g_list_first(g_list);
while (node != NULL){
+ bt_remote_dev_info_t *dev_info;
dev_info = (bt_remote_dev_info_t *)node->data;
g_list = g_list_remove(g_list, dev_info);
_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);
}
}