static gboolean read_btclock(struct mcap_mcl *mcl, uint32_t *btclock,
uint16_t *btaccuracy)
{
- int ret, handle, which = 1;
+ int which = 1;
struct btd_adapter *adapter;
adapter = manager_find_adapter(&mcl->mi->src);
if (!adapter)
return FALSE;
- if (btd_adapter_get_conn_handle(adapter, &mcl->addr, &handle))
+ if (btd_adapter_read_clock(adapter, &mcl->addr, which, 1000,
+ btclock, btaccuracy) < 0)
return FALSE;
- ret = btd_adapter_read_clock(adapter, handle, which, 1000, btclock,
- btaccuracy);
-
- return ret < 0 ? FALSE : TRUE;
+ return TRUE;
}
static gboolean read_btclock_retry(struct mcap_mcl *mcl, uint32_t *btclock,
return -ENOENT;
}
+static int get_handle(int index, const bdaddr_t *bdaddr, uint16_t *handle)
+{
+ struct dev_info *dev = &devs[index];
+ struct hci_conn_info_req *cr;
+ char addr[18];
+ int err;
+
+ ba2str(bdaddr, addr);
+ DBG("hci%d dba %s", index, addr);
+
+ cr = g_malloc0(sizeof(*cr) + sizeof(struct hci_conn_info));
+ bacpy(&cr->bdaddr, bdaddr);
+ cr->type = ACL_LINK;
+
+ if (ioctl(dev->sk, HCIGETCONNINFO, (unsigned long) cr) < 0) {
+ err = -errno;
+ goto fail;
+ }
+
+ err = 0;
+ *handle = cr->conn_info->handle;
+
+fail:
+ g_free(cr);
+ return err;
+}
+
/* Link Key handling */
static void link_key_request(int index, bdaddr_t *dba)
return 0;
}
-static int hciops_read_clock(int index, uint16_t handle, int which,
+static int hciops_read_clock(int index, bdaddr_t *bdaddr, int which,
int timeout, uint32_t *clock,
uint16_t *accuracy)
{
struct dev_info *dev = &devs[index];
+ uint16_t handle = 0;
+ char addr[18];
+ int ret;
- DBG("hci%d handle %d which %d timeout %d", index, handle, which,
- timeout);
+ ba2str(bdaddr, addr);
+ DBG("hci%d addr %s which %d timeout %d", index, addr, which, timeout);
+
+ ret = get_handle(index, bdaddr, &handle);
+ if (ret < 0)
+ return ret;
if (hci_read_clock(dev->sk, htobs(handle), which, clock, accuracy,
timeout) < 0)
return 0;
}
-static int hciops_conn_handle(int index, const bdaddr_t *bdaddr, int *handle)
-{
- struct dev_info *dev = &devs[index];
- struct hci_conn_info_req *cr;
- char addr[18];
- int err;
-
- ba2str(bdaddr, addr);
- DBG("hci%d dba %s", index, addr);
-
- cr = g_malloc0(sizeof(*cr) + sizeof(struct hci_conn_info));
- bacpy(&cr->bdaddr, bdaddr);
- cr->type = ACL_LINK;
-
- if (ioctl(dev->sk, HCIGETCONNINFO, (unsigned long) cr) < 0) {
- err = -errno;
- goto fail;
- }
-
- err = 0;
- *handle = cr->conn_info->handle;
-
-fail:
- g_free(cr);
- return err;
-}
-
static int hciops_read_bdaddr(int index, bdaddr_t *bdaddr)
{
struct dev_info *dev = &devs[index];
.set_dev_class = hciops_set_dev_class,
.set_fast_connectable = hciops_fast_connectable,
.read_clock = hciops_read_clock,
- .get_conn_handle = hciops_conn_handle,
.read_bdaddr = hciops_read_bdaddr,
.block_device = hciops_block_device,
.unblock_device = hciops_unblock_device,
return -ENOSYS;
}
-static int mgmt_read_clock(int index, uint16_t handle, int which, int timeout,
+static int mgmt_read_clock(int index, bdaddr_t *bdaddr, int which, int timeout,
uint32_t *clock, uint16_t *accuracy)
{
- DBG("index %d handle %d which %d timeout %d", index, handle,
- which, timeout);
- return -ENOSYS;
-}
-
-static int mgmt_conn_handle(int index, const bdaddr_t *bdaddr, int *handle)
-{
char addr[18];
ba2str(bdaddr, addr);
- DBG("index %d addr %s", index, addr);
+ DBG("index %d addr %s which %d timeout %d", index, addr, which,
+ timeout);
return -ENOSYS;
}
.set_dev_class = mgmt_set_dev_class,
.set_fast_connectable = mgmt_fast_connectable,
.read_clock = mgmt_read_clock,
- .get_conn_handle = mgmt_conn_handle,
.read_bdaddr = mgmt_read_bdaddr,
.block_device = mgmt_block_device,
.unblock_device = mgmt_unblock_device,
return adapter_ops->set_fast_connectable(adapter->dev_id, enable);
}
-int btd_adapter_read_clock(struct btd_adapter *adapter, uint16_t handle,
+int btd_adapter_read_clock(struct btd_adapter *adapter, bdaddr_t *bdaddr,
int which, int timeout, uint32_t *clock,
uint16_t *accuracy)
{
if (!adapter->up)
return -EINVAL;
- return adapter_ops->read_clock(adapter->dev_id, handle, which,
+ return adapter_ops->read_clock(adapter->dev_id, bdaddr, which,
timeout, clock, accuracy);
}
-int btd_adapter_get_conn_handle(struct btd_adapter *adapter,
- const bdaddr_t *bdaddr, int *handle)
-{
- if (!adapter_ops)
- return -EINVAL;
-
- if (!adapter->up)
- return -EINVAL;
-
- return adapter_ops->get_conn_handle(adapter->dev_id, bdaddr, handle);
-}
-
int btd_adapter_disconnect_device(struct btd_adapter *adapter, uint16_t handle)
{
return adapter_ops->disconnect(adapter->dev_id, handle);
int (*set_name) (int index, const char *name);
int (*set_dev_class) (int index, uint8_t major, uint8_t minor);
int (*set_fast_connectable) (int index, gboolean enable);
- int (*read_clock) (int index, uint16_t handle, int which, int timeout,
+ int (*read_clock) (int index, bdaddr_t *bdaddr, int which, int timeout,
uint32_t *clock, uint16_t *accuracy);
- int (*get_conn_handle) (int index, const bdaddr_t *bdaddr, int *handle);
int (*read_bdaddr) (int index, bdaddr_t *bdaddr);
int (*block_device) (int index, bdaddr_t *bdaddr);
int (*unblock_device) (int index, bdaddr_t *bdaddr);
int btd_adapter_set_fast_connectable(struct btd_adapter *adapter,
gboolean enable);
-int btd_adapter_read_clock(struct btd_adapter *adapter, uint16_t handle,
+int btd_adapter_read_clock(struct btd_adapter *adapter, bdaddr_t *bdaddr,
int which, int timeout, uint32_t *clock,
uint16_t *accuracy);
-int btd_adapter_get_conn_handle(struct btd_adapter *adapter,
- const bdaddr_t *bdaddr, int *handle);
int btd_adapter_block_address(struct btd_adapter *adapter, bdaddr_t *bdaddr);
int btd_adapter_unblock_address(struct btd_adapter *adapter, bdaddr_t *bdaddr);