summaryrefslogtreecommitdiffstats
path: root/src/adapter.c
diff options
context:
space:
mode:
authorJohan Hedberg <johan.hedberg@nokia.com>2008-11-30 01:09:57 +0200
committerJohan Hedberg <johan.hedberg@nokia.com>2008-11-30 01:09:57 +0200
commiteed1a86011aa8f3b17b74380c7e4478a36ea3137 (patch)
tree50cac76a39a6d474e0d54d4b8957924de9754119 /src/adapter.c
parent24403d166c5a1048ad5a7e997f28a6127d1fb216 (diff)
Fix sending the Pairable property
Diffstat (limited to 'src/adapter.c')
-rw-r--r--src/adapter.c24
1 files changed, 18 insertions, 6 deletions
diff --git a/src/adapter.c b/src/adapter.c
index db0335f3..e30b9b8e 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -2591,10 +2591,6 @@ proceed:
ADAPTER_INTERFACE, "Powered",
DBUS_TYPE_BOOLEAN, &powered);
- emit_property_changed(connection, adapter->path,
- ADAPTER_INTERFACE, "Pairable",
- DBUS_TYPE_BOOLEAN, &adapter->pairable);
-
load_drivers(adapter);
load_devices(adapter);
}
@@ -2764,7 +2760,7 @@ static void unload_drivers(struct btd_adapter *adapter)
int adapter_stop(struct btd_adapter *adapter)
{
- gboolean powered, discoverable;
+ gboolean powered, discoverable, pairable;
/* cancel pending timeout */
if (adapter->discov_timeout_id) {
@@ -2820,6 +2816,13 @@ int adapter_stop(struct btd_adapter *adapter)
DBUS_TYPE_BOOLEAN, &discoverable);
}
+ if ((adapter->scan_mode & SCAN_PAGE) && adapter->pairable == TRUE) {
+ pairable = FALSE;
+ emit_property_changed(connection, adapter->path,
+ ADAPTER_INTERFACE, "Pairable",
+ DBUS_TYPE_BOOLEAN, &pairable);
+ }
+
adapter->up = 0;
adapter->scan_mode = SCAN_DISABLED;
adapter->mode = MODE_OFF;
@@ -3136,7 +3139,7 @@ void adapter_remove_oor_device(struct btd_adapter *adapter, char *peer_addr)
void adapter_mode_changed(struct btd_adapter *adapter, uint8_t scan_mode)
{
const gchar *path = adapter_get_path(adapter);
- gboolean powered, discoverable;
+ gboolean powered, discoverable, pairable;
int dd;
if (adapter->scan_mode == scan_mode)
@@ -3149,16 +3152,19 @@ void adapter_mode_changed(struct btd_adapter *adapter, uint8_t scan_mode)
adapter->mode = MODE_OFF;
powered = FALSE;
discoverable = FALSE;
+ pairable = FALSE;
break;
case SCAN_PAGE:
adapter->mode = MODE_CONNECTABLE;
powered = TRUE;
discoverable = FALSE;
+ pairable = adapter->pairable;
break;
case (SCAN_PAGE | SCAN_INQUIRY):
adapter->mode = MODE_DISCOVERABLE;
powered = TRUE;
discoverable = TRUE;
+ pairable = adapter->pairable;
if (adapter->discov_timeout != 0)
adapter_set_discov_timeout(adapter,
adapter->discov_timeout);
@@ -3183,6 +3189,12 @@ void adapter_mode_changed(struct btd_adapter *adapter, uint8_t scan_mode)
ADAPTER_INTERFACE, "Powered",
DBUS_TYPE_BOOLEAN, &powered);
+ /* If page scanning gets toggled emit the Pairable property */
+ if ((adapter->scan_mode & SCAN_PAGE) != (scan_mode & SCAN_PAGE))
+ emit_property_changed(connection, adapter->path,
+ ADAPTER_INTERFACE, "Pairable",
+ DBUS_TYPE_BOOLEAN, &pairable);
+
dd = hci_open_dev(adapter->dev_id);
if (dd < 0) {
error("HCI device open failed: hci%d", adapter->dev_id);