From 344789216712689037f57cb7bc2dc7a333a95333 Mon Sep 17 00:00:00 2001 From: Alok Barsode Date: Tue, 26 Aug 2008 16:41:43 +0530 Subject: Removing pinq_idle from struct adapter. --- src/adapter.c | 1 - 1 file changed, 1 deletion(-) (limited to 'src/adapter.c') diff --git a/src/adapter.c b/src/adapter.c index 16d03958..bc49090c 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -2492,7 +2492,6 @@ int adapter_stop(struct adapter *adapter) adapter->up = 0; adapter->scan_mode = SCAN_DISABLED; adapter->mode = MODE_OFF; - adapter->pinq_idle = 0; adapter->state = DISCOVER_TYPE_NONE; unload_drivers(adapter); -- cgit From 67696e910549b77004bf7f68003a46728c891f05 Mon Sep 17 00:00:00 2001 From: Alok Barsode Date: Thu, 28 Aug 2008 14:47:04 +0530 Subject: Freeing found_devices list on end of standard/periodic inquiry. --- src/adapter.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'src/adapter.c') diff --git a/src/adapter.c b/src/adapter.c index bc49090c..43f0521f 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -2739,6 +2739,21 @@ void adapter_set_state(struct adapter *adapter, int state) if (!adapter) return; + /* Both Standard and periodic Inquiry are in progress */ + if ((state & STD_INQUIRY) && (state & PERIODIC_INQUIRY)) + goto set; + + if (!adapter->found_devices) + goto set; + + /* Free list if standard/periodic inquiry is done */ + if ((adapter->state & (STD_INQUIRY | PERIODIC_INQUIRY)) && + (state & (~STD_INQUIRY | ~PERIODIC_INQUIRY))) { + g_slist_foreach(adapter->found_devices, (GFunc) g_free, NULL); + g_slist_free(adapter->found_devices); + adapter->found_devices = NULL; + } +set: adapter->state = state; } -- cgit From e6253167b709768e457e7ccce1f64afc44aef1c2 Mon Sep 17 00:00:00 2001 From: Alok Barsode Date: Thu, 28 Aug 2008 14:04:25 +0530 Subject: Adding adapter_search_found_devices. --- src/adapter.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'src/adapter.c') diff --git a/src/adapter.c b/src/adapter.c index 43f0521f..e2504f7a 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -2762,6 +2762,19 @@ int adapter_get_state(struct adapter *adapter) return adapter->state; } +struct remote_dev_info *adapter_search_found_devices(struct adapter *adapter, + struct remote_dev_info *match) +{ + GSList *l; + + l = g_slist_find_custom(adapter->found_devices, match, + (GCompareFunc) found_device_cmp); + if (l) + return l->data; + + return NULL; +} + int btd_register_adapter_driver(struct btd_adapter_driver *driver) { adapter_drivers = g_slist_append(adapter_drivers, driver); -- cgit From 57e67f6802fc718057fddcd3b155c2d4b0adb68f Mon Sep 17 00:00:00 2001 From: Alok Barsode Date: Thu, 28 Aug 2008 15:15:10 +0530 Subject: Renaming found_device_add to adapter_add_found_device and moving it to adapter.c --- src/adapter.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) (limited to 'src/adapter.c') diff --git a/src/adapter.c b/src/adapter.c index e2504f7a..24c1518d 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -2775,6 +2775,57 @@ struct remote_dev_info *adapter_search_found_devices(struct adapter *adapter, return NULL; } +int dev_rssi_cmp(struct remote_dev_info *d1, struct remote_dev_info *d2) +{ + int rssi1, rssi2; + + rssi1 = d1->rssi < 0 ? -d1->rssi : d1->rssi; + rssi2 = d2->rssi < 0 ? -d2->rssi : d2->rssi; + + return rssi1 - rssi2; +} + +int adapter_add_found_device(struct adapter *adapter, bdaddr_t *bdaddr, + int8_t rssi, name_status_t name_status) +{ + struct remote_dev_info *dev, match; + + memset(&match, 0, sizeof(struct remote_dev_info)); + bacpy(&match.bdaddr, bdaddr); + match.name_status = NAME_ANY; + + /* ignore repeated entries */ + dev = adapter_search_found_devices(adapter, &match); + if (dev) { + /* device found, update the attributes */ + if (rssi != 0) + dev->rssi = rssi; + + /* Get remote name can be received while inquiring. + * Keep in mind that multiple inquiry result events can + * be received from the same remote device. + */ + if (name_status != NAME_NOT_REQUIRED) + dev->name_status = name_status; + + adapter->found_devices = g_slist_sort(adapter->found_devices, + (GCompareFunc) dev_rssi_cmp); + + return -EALREADY; + } + + dev = g_new0(struct remote_dev_info, 1); + + bacpy(&dev->bdaddr, bdaddr); + dev->rssi = rssi; + dev->name_status = name_status; + + adapter->found_devices = g_slist_insert_sorted(adapter->found_devices, + dev, (GCompareFunc) dev_rssi_cmp); + + return 0; +} + int btd_register_adapter_driver(struct btd_adapter_driver *driver) { adapter_drivers = g_slist_append(adapter_drivers, driver); -- cgit From a4cbf5540b53cf4b0558c5d420354aa1b3421d61 Mon Sep 17 00:00:00 2001 From: Alok Barsode Date: Thu, 28 Aug 2008 15:22:40 +0530 Subject: Renaming found_device_remove to adapter_remove_found_device and moving it to adapter.c --- src/adapter.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'src/adapter.c') diff --git a/src/adapter.c b/src/adapter.c index 24c1518d..0c85fe52 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -2826,6 +2826,23 @@ int adapter_add_found_device(struct adapter *adapter, bdaddr_t *bdaddr, return 0; } +int adapter_remove_found_device(struct adapter *adapter, bdaddr_t *bdaddr) +{ + struct remote_dev_info *dev, match; + + memset(&match, 0, sizeof(struct remote_dev_info)); + bacpy(&match.bdaddr, bdaddr); + + dev = adapter_search_found_devices(adapter, &match); + if (!dev) + return -1; + + adapter->found_devices = g_slist_remove(adapter->found_devices, dev); + g_free(dev); + + return 0; +} + int btd_register_adapter_driver(struct btd_adapter_driver *driver) { adapter_drivers = g_slist_append(adapter_drivers, driver); -- cgit From 5d936ee9bb433445272d3c2a377e42ae4ba5e5ec Mon Sep 17 00:00:00 2001 From: Alok Barsode Date: Thu, 28 Aug 2008 15:25:40 +0530 Subject: Moving found_device_cmp to adapter.c --- src/adapter.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'src/adapter.c') diff --git a/src/adapter.c b/src/adapter.c index 0c85fe52..53a06101 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -167,6 +167,26 @@ static DBusHandlerResult error_connection_attempt_failed(DBusConnection *conn, err > 0 ? strerror(err) : "Connection attempt failed"); } +static int found_device_cmp(const struct remote_dev_info *d1, + const struct remote_dev_info *d2) +{ + int ret; + + if (bacmp(&d2->bdaddr, BDADDR_ANY)) { + ret = bacmp(&d1->bdaddr, &d2->bdaddr); + if (ret) + return ret; + } + + if (d2->name_status != NAME_ANY) { + ret = (d1->name_status - d2->name_status); + if (ret) + return ret; + } + + return 0; +} + static int auth_req_cmp(const void *p1, const void *p2) { const struct pending_auth_info *pb1 = p1; -- cgit From 271183bccb0ac55f7fe3ae6b76211251387e3b5c Mon Sep 17 00:00:00 2001 From: Alok Barsode Date: Thu, 28 Aug 2008 18:03:55 +0530 Subject: Adding adapter_update_oor_devices. --- src/adapter.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'src/adapter.c') diff --git a/src/adapter.c b/src/adapter.c index 53a06101..701f49a1 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -2863,6 +2863,25 @@ int adapter_remove_found_device(struct adapter *adapter, bdaddr_t *bdaddr) return 0; } +void adapter_update_oor_devices(struct adapter *adapter) +{ + GSList *l = adapter->found_devices; + struct remote_dev_info *dev; + bdaddr_t tmp; + + g_slist_foreach(adapter->oor_devices, (GFunc) free, NULL); + g_slist_free(adapter->oor_devices); + adapter->oor_devices = NULL; + + while (l) { + dev = l->data; + baswap(&tmp, &dev->bdaddr); + adapter->oor_devices = g_slist_append(adapter->oor_devices, + batostr(&tmp)); + l = l->next; + } +} + int btd_register_adapter_driver(struct btd_adapter_driver *driver) { adapter_drivers = g_slist_append(adapter_drivers, driver); -- cgit From aeecbf7e45383c48ccb4fd70417500e568cda3bb Mon Sep 17 00:00:00 2001 From: Alok Barsode Date: Fri, 29 Aug 2008 14:22:01 +0530 Subject: Moving send_out_of_range to adapter.c --- src/adapter.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'src/adapter.c') diff --git a/src/adapter.c b/src/adapter.c index 701f49a1..4926d14f 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -167,6 +167,20 @@ static DBusHandlerResult error_connection_attempt_failed(DBusConnection *conn, err > 0 ? strerror(err) : "Connection attempt failed"); } +static void send_out_of_range(const char *path, GSList *l) +{ + while (l) { + const char *peer_addr = l->data; + + g_dbus_emit_signal(connection, path, + ADAPTER_INTERFACE, "DeviceDisappeared", + DBUS_TYPE_STRING, &peer_addr, + DBUS_TYPE_INVALID); + + l = l->next; + } +} + static int found_device_cmp(const struct remote_dev_info *d1, const struct remote_dev_info *d2) { @@ -2869,6 +2883,8 @@ void adapter_update_oor_devices(struct adapter *adapter) struct remote_dev_info *dev; bdaddr_t tmp; + send_out_of_range(adapter->path, adapter->oor_devices); + g_slist_foreach(adapter->oor_devices, (GFunc) free, NULL); g_slist_free(adapter->oor_devices); adapter->oor_devices = NULL; -- cgit From 93750261a6093a8d987cd23327fd3d90467b5739 Mon Sep 17 00:00:00 2001 From: Alok Barsode Date: Thu, 28 Aug 2008 20:00:01 +0530 Subject: Adding adapter_remove_oor_devices. --- src/adapter.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'src/adapter.c') diff --git a/src/adapter.c b/src/adapter.c index 4926d14f..04c219ca 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -2898,6 +2898,20 @@ void adapter_update_oor_devices(struct adapter *adapter) } } +void adapter_remove_oor_device(struct adapter *adapter, char *peer_addr) +{ + GSList *l; + + l = g_slist_find_custom(adapter->oor_devices, peer_addr, + (GCompareFunc) strcmp); + if (l) { + char *dev = l->data; + adapter->oor_devices = g_slist_remove(adapter->oor_devices, + dev); + g_free(dev); + } +} + int btd_register_adapter_driver(struct btd_adapter_driver *driver) { adapter_drivers = g_slist_append(adapter_drivers, driver); -- cgit