diff --git a/plugins/sixaxis.c b/plugins/sixaxis.c
index 4fdeff3..8045448 100644
--- a/plugins/sixaxis.c
+++ b/plugins/sixaxis.c
/* This can happen if controller was plugged while already connected
* eg. to charge up battery.
* Don't set LEDs in that case, hence return false */
- device = btd_adapter_find_device(adapter, &device_bdaddr);
+ device = btd_adapter_find_device(adapter, &device_bdaddr,
+ BDADDR_BREDR);
if (device && btd_device_is_connected(device))
return false;
diff --git a/profiles/audio/avctp.c b/profiles/audio/avctp.c
index f88e634..74d3512 100644
--- a/profiles/audio/avctp.c
+++ b/profiles/audio/avctp.c
DBG("AVCTP: incoming connect from %s", address);
- device = btd_adapter_find_device(adapter_find(&src), &dst);
+ device = btd_adapter_find_device(adapter_find(&src), &dst,
+ BDADDR_BREDR);
if (!device)
return;
diff --git a/profiles/audio/avdtp.c b/profiles/audio/avdtp.c
index fbf61f0..8a7d1c0 100644
--- a/profiles/audio/avdtp.c
+++ b/profiles/audio/avdtp.c
DBG("AVDTP: incoming connect from %s", address);
- device = btd_adapter_find_device(adapter_find(&src), &dst);
+ device = btd_adapter_find_device(adapter_find(&src), &dst,
+ BDADDR_BREDR);
if (!device)
goto drop;
diff --git a/profiles/input/device.c b/profiles/input/device.c
index 5235dfd..a2329c6 100644
--- a/profiles/input/device.c
+++ b/profiles/input/device.c
struct btd_device *device;
struct btd_service *service;
- device = btd_adapter_find_device(adapter_find(src), dst);
+ device = btd_adapter_find_device(adapter_find(src), dst, BDADDR_BREDR);
if (device == NULL)
return NULL;
diff --git a/profiles/input/server.c b/profiles/input/server.c
index 650ece1..772a605 100644
--- a/profiles/input/server.c
+++ b/profiles/input/server.c
struct btd_device *device;
struct sixaxis_data *data;
- device = btd_adapter_find_device(adapter_find(src), dst);
+ device = btd_adapter_find_device(adapter_find(src), dst, BDADDR_BREDR);
if (!device)
return;
struct btd_device *device;
uint16_t vid, pid;
- device = btd_adapter_find_device(adapter_find(src), dst);
+ device = btd_adapter_find_device(adapter_find(src), dst, BDADDR_BREDR);
if (!device)
return false;
diff --git a/src/adapter.c b/src/adapter.c
index e3de8cf..61fae2a 100644
--- a/src/adapter.c
+++ b/src/adapter.c
}
struct btd_device *btd_adapter_find_device(struct btd_adapter *adapter,
- const bdaddr_t *dst)
+ const bdaddr_t *dst,
+ uint8_t bdaddr_type)
{
+ struct device_addr_type addr;
struct btd_device *device;
- char addr[18];
GSList *list;
if (!adapter)
return NULL;
- ba2str(dst, addr);
+ bacpy(&addr.bdaddr, dst);
+ addr.bdaddr_type = bdaddr_type;
- list = g_slist_find_custom(adapter->devices, addr, device_address_cmp);
+ list = g_slist_find_custom(adapter->devices, &addr,
+ device_addr_type_cmp);
if (!list)
return NULL;
if (!adapter)
return NULL;
- device = btd_adapter_find_device(adapter, addr);
+ device = btd_adapter_find_device(adapter, addr, addr_type);
if (device)
return device;
struct btd_device *device;
static guint id = 0;
- device = btd_adapter_find_device(adapter, dst);
+ device = btd_adapter_find_device(adapter, dst, BDADDR_BREDR);
if (!device)
return 0;
/* Since a pincode was requested, update the starting time to
* the point where the pincode is provided. */
- device = btd_adapter_find_device(adapter, bdaddr);
+ device = btd_adapter_find_device(adapter, bdaddr, BDADDR_BREDR);
device_bonding_restart_timer(device);
id = mgmt_reply(adapter->mgmt, MGMT_OP_PIN_CODE_REPLY,
if (status == 0)
device = btd_adapter_get_device(adapter, bdaddr, addr_type);
else
- device = btd_adapter_find_device(adapter, bdaddr);
+ device = btd_adapter_find_device(adapter, bdaddr, addr_type);
if (device != NULL)
device_bonding_complete(device, addr_type, status);
if (status == 0)
device = btd_adapter_get_device(adapter, bdaddr, addr_type);
else
- device = btd_adapter_find_device(adapter, bdaddr);
+ device = btd_adapter_find_device(adapter, bdaddr, addr_type);
if (status == MGMT_STATUS_AUTH_FAILED && adapter->pincode_requested) {
/* On faliure, issue a bonding_retry if possible. */
DBG("Device %s disconnected, reason %u", dst, reason);
- device = btd_adapter_find_device(adapter, &addr->bdaddr);
+ device = btd_adapter_find_device(adapter, &addr->bdaddr, addr->type);
if (device)
adapter_remove_connection(adapter, device, addr->type);
if (bacmp(&ev->rpa, BDADDR_ANY)) {
device = btd_adapter_get_device(adapter, &ev->rpa,
BDADDR_LE_RANDOM);
- duplicate = btd_adapter_find_device(adapter, &addr->bdaddr);
+ duplicate = btd_adapter_find_device(adapter, &addr->bdaddr,
+ addr->type);
if (duplicate == device)
duplicate = NULL;
} else {
ba2str(&ev->addr.bdaddr, addr);
DBG("hci%u %s blocked", index, addr);
- device = btd_adapter_find_device(adapter, &ev->addr.bdaddr);
+ device = btd_adapter_find_device(adapter, &ev->addr.bdaddr,
+ ev->addr.type);
if (device)
device_block(device, TRUE);
}
ba2str(&ev->addr.bdaddr, addr);
DBG("hci%u %s unblocked", index, addr);
- device = btd_adapter_find_device(adapter, &ev->addr.bdaddr);
+ device = btd_adapter_find_device(adapter, &ev->addr.bdaddr,
+ ev->addr.type);
if (device)
device_unblock(device, FALSE, TRUE);
}
DBG("hci%u %s status %u", index, addr, ev->status);
- device = btd_adapter_find_device(adapter, &ev->addr.bdaddr);
+ device = btd_adapter_find_device(adapter, &ev->addr.bdaddr,
+ ev->addr.type);
if (device) {
/* If the device is in a bonding process cancel any auth request
* sent to the agent before proceeding, but keep the bonding
DBG("hci%u addr %s", index, addr);
- device = btd_adapter_find_device(adapter, &ev->addr.bdaddr);
+ device = btd_adapter_find_device(adapter, &ev->addr.bdaddr,
+ ev->addr.type);
if (!device) {
warn("No device object for unpaired device %s", addr);
return;
diff --git a/src/adapter.h b/src/adapter.h
index e497d1b..49eca11 100644
--- a/src/adapter.h
+++ b/src/adapter.h
sdp_list_t *btd_adapter_get_services(struct btd_adapter *adapter);
struct btd_device *btd_adapter_find_device(struct btd_adapter *adapter,
- const bdaddr_t *dst);
+ const bdaddr_t *dst,
+ uint8_t dst_type);
const char *adapter_get_path(struct btd_adapter *adapter);
const bdaddr_t *btd_adapter_get_address(struct btd_adapter *adapter);
diff --git a/src/attrib-server.c b/src/attrib-server.c
index 3f579bb..889ef20 100644
--- a/src/attrib-server.c
+++ b/src/attrib-server.c
channel = g_new0(struct gatt_channel, 1);
channel->server = server;
- device = btd_adapter_find_device(server->adapter, &dst);
+ device = btd_adapter_find_device(server->adapter, &dst, bdaddr_type);
if (device == NULL) {
error("Device object not found for attrib server");
g_free(channel);
diff --git a/src/profile.c b/src/profile.c
index 4b9d8e5..f6aa970 100644
--- a/src/profile.c
+++ b/src/profile.c
GIOCondition cond;
char addr[18];
- device = btd_adapter_find_device(server->adapter, dst);
+ device = btd_adapter_find_device(server->adapter, dst, BDADDR_BREDR);
if (device == NULL) {
ba2str(dst, addr);
error("%s device %s not found", server->ext->name, addr);