diff --git a/android/bluetooth.c b/android/bluetooth.c
index 0ea6a08..c664461 100644
--- a/android/bluetooth.c
+++ b/android/bluetooth.c
static struct ipc *hal_ipc = NULL;
+static void get_device_android_addr(struct device *dev, uint8_t *addr)
+{
+ bdaddr2android(&dev->bdaddr, addr);
+}
+
static void mgmt_debug(const char *str, void *user_data)
{
const char *prefix = user_data;
ev.status = status;
ev.state = state;
- bdaddr2android(&dev->bdaddr, ev.bdaddr);
+ get_device_android_addr(dev, ev.bdaddr);
ipc_send_notif(hal_ipc, HAL_SERVICE_ID_BLUETOOTH,
HAL_EV_BOND_STATE_CHANGED, sizeof(ev), &ev);
struct hal_ev_remote_device_props *ev = (void *) buf;
ev->status = HAL_STATUS_SUCCESS;
- bdaddr2android(&dev->bdaddr, ev->bdaddr);
+ get_device_android_addr(dev, ev->bdaddr);
ev->num_props = 1;
ev->props[0].type = type;
ev->props[0].len = len;
/* Name already sent in remote device prop */
memset(&hal_ev, 0, sizeof(hal_ev));
- bdaddr2android(&ev->addr.bdaddr, hal_ev.bdaddr);
+ get_device_android_addr(dev, hal_ev.bdaddr);
hal_ev.class_of_dev = dev->class;
ipc_send_notif(hal_ipc, HAL_SERVICE_ID_BLUETOOTH, HAL_EV_PIN_REQUEST,
memset(&ev, 0, sizeof(ev));
- bdaddr2android(&dev->bdaddr, ev.bdaddr);
+ get_device_android_addr(dev, ev.bdaddr);
memcpy(ev.name, dev->name, strlen(dev->name));
ev.class_of_dev = dev->class;
{
uint8_t buf[IPC_MTU];
struct hal_ev_device_found *ev = (void *) buf;
- bdaddr_t android_bdaddr;
+ uint8_t android_bdaddr[6];
uint8_t android_type;
int size;
size = sizeof(*ev);
- bdaddr2android(&dev->bdaddr, &android_bdaddr);
+ get_device_android_addr(dev, android_bdaddr);
size += fill_hal_prop(buf + size, HAL_PROP_DEVICE_ADDR,
- sizeof(android_bdaddr),
- &android_bdaddr);
+ sizeof(android_bdaddr), android_bdaddr);
ev->num_props++;
android_type = get_device_android_type(dev);
size = sizeof(*ev);
ev->status = HAL_STATUS_SUCCESS;
- bdaddr2android(&dev->bdaddr, ev->bdaddr);
+ get_device_android_addr(dev, ev->bdaddr);
old_type = get_device_android_type(dev);
{
const struct mgmt_ev_device_connected *ev = param;
struct hal_ev_acl_state_changed hal_ev;
+ struct device *dev;
if (length < sizeof(*ev)) {
error("Too short device connected event (%u bytes)", length);
hal_ev.status = HAL_STATUS_SUCCESS;
hal_ev.state = HAL_ACL_STATE_CONNECTED;
- bdaddr2android(&ev->addr.bdaddr, hal_ev.bdaddr);
+
+ dev = find_device(&ev->addr.bdaddr);
+ if (!dev)
+ return;
+
+ get_device_android_addr(dev, hal_ev.bdaddr);
ipc_send_notif(hal_ipc, HAL_SERVICE_ID_BLUETOOTH,
HAL_EV_ACL_STATE_CHANGED, sizeof(hal_ev), &hal_ev);
{
const struct mgmt_ev_device_disconnected *ev = param;
struct hal_ev_acl_state_changed hal_ev;
+ struct device *dev;
if (length < sizeof(*ev)) {
error("Too short device disconnected event (%u bytes)", length);
return;
}
+ dev = find_device(&ev->addr.bdaddr);
+ if (!dev)
+ return;
+
hal_ev.status = HAL_STATUS_SUCCESS;
hal_ev.state = HAL_ACL_STATE_DISCONNECTED;
- bdaddr2android(&ev->addr.bdaddr, hal_ev.bdaddr);
+ get_device_android_addr(dev, hal_ev.bdaddr);
ipc_send_notif(hal_ipc, HAL_SERVICE_ID_BLUETOOTH,
HAL_EV_ACL_STATE_CHANGED, sizeof(hal_ev), &hal_ev);
for (l = bonded_devices; l; l = g_slist_next(l)) {
struct device *dev = l->data;
- bdaddr2android(&dev->bdaddr, buf + (i * sizeof(bdaddr_t)));
+ get_device_android_addr(dev, buf + (i * sizeof(bdaddr_t)));
i++;
}
for (i = 0, l = bonded_devices; l; l = g_slist_next(l), i++) {
struct device *dev = l->data;
- bdaddr2android(&dev->bdaddr, bonded + (i * sizeof(bdaddr_t)));
+ get_device_android_addr(dev, bonded + (i * sizeof(bdaddr_t)));
}
size += fill_hal_prop(buf + size, HAL_PROP_ADAPTER_BONDED_DEVICES,
size = sizeof(*ev);
ev->status = HAL_STATUS_SUCCESS;
- bdaddr2android(&dev->bdaddr, ev->bdaddr);
+ get_device_android_addr(dev, ev->bdaddr);
android_type = get_device_android_type(dev);
size += fill_hal_prop(buf + size, HAL_PROP_DEVICE_TYPE,