diff --git a/src/adapter.c b/src/adapter.c
index 73a503c..0231a08 100644
--- a/src/adapter.c
+++ b/src/adapter.c
int btd_adapter_block_address(struct btd_adapter *adapter,
const bdaddr_t *bdaddr, uint8_t bdaddr_type)
{
- return mgmt_block_device(adapter->dev_id, bdaddr, bdaddr_type);
+ struct mgmt_cp_block_device cp;
+ char addr[18];
+
+ ba2str(bdaddr, addr);
+ DBG("hci%u %s", adapter->dev_id, addr);
+
+ memset(&cp, 0, sizeof(cp));
+ bacpy(&cp.addr.bdaddr, bdaddr);
+ cp.addr.type = bdaddr_type;
+
+ if (mgmt_send(adapter->mgmt, MGMT_OP_BLOCK_DEVICE,
+ adapter->dev_id, sizeof(cp), &cp,
+ NULL, NULL, NULL) > 0)
+ return 0;
+
+ return -EIO;
}
int btd_adapter_unblock_address(struct btd_adapter *adapter,
const bdaddr_t *bdaddr, uint8_t bdaddr_type)
{
- return mgmt_unblock_device(adapter->dev_id, bdaddr,
- bdaddr_type);
+ struct mgmt_cp_unblock_device cp;
+ char addr[18];
+
+ ba2str(bdaddr, addr);
+ DBG("hci%u %s", adapter->dev_id, addr);
+
+ memset(&cp, 0, sizeof(cp));
+ bacpy(&cp.addr.bdaddr, bdaddr);
+ cp.addr.type = bdaddr_type;
+
+ if (mgmt_send(adapter->mgmt, MGMT_OP_UNBLOCK_DEVICE,
+ adapter->dev_id, sizeof(cp), &cp,
+ NULL, NULL, NULL) > 0)
+ return 0;
+
+ return -EIO;
}
-static void clear_blocked(struct btd_adapter *adapter)
+static int clear_blocked(struct btd_adapter *adapter)
{
- int err;
-
- err = mgmt_unblock_device(adapter->dev_id, BDADDR_ANY, 0);
- if (err < 0)
- error("Clearing blocked list failed: %s (%d)",
- strerror(-err), -err);
+ return btd_adapter_unblock_address(adapter, BDADDR_ANY, 0);
}
static void probe_driver(struct btd_adapter *adapter, gpointer user_data)
diff --git a/src/mgmt.c b/src/mgmt.c
index d330848..685d376 100644
--- a/src/mgmt.c
+++ b/src/mgmt.c
}
}
-int mgmt_block_device(int index, const bdaddr_t *bdaddr, uint8_t bdaddr_type)
-{
- char buf[MGMT_HDR_SIZE + sizeof(struct mgmt_cp_block_device)];
- struct mgmt_hdr *hdr = (void *) buf;
- struct mgmt_cp_block_device *cp;
- size_t buf_len;
- char addr[18];
-
- ba2str(bdaddr, addr);
- DBG("index %d addr %s", index, addr);
-
- memset(buf, 0, sizeof(buf));
-
- hdr->opcode = htobs(MGMT_OP_BLOCK_DEVICE);
- hdr->len = htobs(sizeof(*cp));
- hdr->index = htobs(index);
-
- cp = (void *) &buf[sizeof(*hdr)];
- bacpy(&cp->addr.bdaddr, bdaddr);
- cp->addr.type = bdaddr_type;
-
- buf_len = sizeof(*hdr) + sizeof(*cp);
-
- if (write(mgmt_sock, buf, buf_len) < 0)
- return -errno;
-
- return 0;
-}
-
-int mgmt_unblock_device(int index, const bdaddr_t *bdaddr, uint8_t bdaddr_type)
-{
- char buf[MGMT_HDR_SIZE + sizeof(struct mgmt_cp_unblock_device)];
- struct mgmt_hdr *hdr = (void *) buf;
- struct mgmt_cp_unblock_device *cp;
- size_t buf_len;
- char addr[18];
-
- ba2str(bdaddr, addr);
- DBG("index %d addr %s", index, addr);
-
- memset(buf, 0, sizeof(buf));
-
- hdr->opcode = htobs(MGMT_OP_UNBLOCK_DEVICE);
- hdr->len = htobs(sizeof(*cp));
- hdr->index = htobs(index);
-
- cp = (void *) &buf[sizeof(*hdr)];
- bacpy(&cp->addr.bdaddr, bdaddr);
- cp->addr.type = bdaddr_type;
-
- buf_len = sizeof(*hdr) + sizeof(*cp);
-
- if (write(mgmt_sock, buf, buf_len) < 0)
- return -errno;
-
- return 0;
-}
-
int mgmt_set_did(int index, uint16_t vendor, uint16_t product,
uint16_t version, uint16_t source)
{
diff --git a/src/mgmt.h b/src/mgmt.h
index 1e6f980..24f7e1d 100644
--- a/src/mgmt.h
+++ b/src/mgmt.h
int mgmt_setup(void);
void mgmt_cleanup(void);
-int mgmt_block_device(int index, const bdaddr_t *bdaddr, uint8_t bdaddr_type);
-int mgmt_unblock_device(int index, const bdaddr_t *bdaddr, uint8_t bdaddr_type);
-
int mgmt_set_did(int index, uint16_t vendor, uint16_t product,
uint16_t version, uint16_t source);