summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohan Hedberg <johan.hedberg@nokia.com>2008-11-29 23:16:46 +0200
committerJohan Hedberg <johan.hedberg@nokia.com>2008-11-29 23:16:46 +0200
commitb719da3a91634b99e766639fac5c05a7890245b4 (patch)
treecfb4e8991659c3045d56dc1d5c7f93f546cd4629
parentfe664d0fa0119e527b2a17e4d2e0ae5840306785 (diff)
Fix discov_timeout_handler to do WRITE_SCAN_ENABLE asynchronously
-rw-r--r--src/adapter.c27
1 files changed, 11 insertions, 16 deletions
diff --git a/src/adapter.c b/src/adapter.c
index 3491d60b..bda52f84 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -577,35 +577,30 @@ static int write_scan_enable(int dd, uint8_t scan)
return 0;
}
-static gboolean discov_timeout_handler(void *data)
+static gboolean discov_timeout_handler(gpointer user_data)
{
- struct btd_adapter *adapter = data;
+ struct btd_adapter *adapter = user_data;
int dd;
- uint8_t scan_enable = adapter->scan_mode;
- gboolean retval = TRUE;
+ uint8_t scan_enable;
uint16_t dev_id = adapter->dev_id;
- scan_enable &= ~SCAN_INQUIRY;
+ adapter->discov_timeout = 0;
dd = hci_open_dev(dev_id);
if (dd < 0) {
error("HCI device open failed: hci%d", dev_id);
- return TRUE;
+ return FALSE;
}
- if (write_scan_enable(dd, scan_enable) < 0)
- goto failed;
-
- set_limited_discoverable(dd, adapter->dev.class, FALSE);
+ scan_enable = adapter->scan_mode & ~SCAN_INQUIRY;
- adapter_remove_discov_timeout(adapter);
- retval = FALSE;
+ hci_send_cmd(dd, OGF_HOST_CTL, OCF_WRITE_SCAN_ENABLE,
+ 1, &scan_enable);
+ hci_close_dev(dd);
-failed:
- if (dd >= 0)
- hci_close_dev(dd);
+ set_limited_discoverable(dd, adapter->dev.class, FALSE);
- return retval;
+ return FALSE;
}
static void adapter_set_discov_timeout(struct btd_adapter *adapter,