|
|
@@ -19,19 +19,12 @@
|
|
|
|
|
|
#include <assert.h>
|
|
|
#include <string.h>
|
|
|
-#include "os/mynewt.h"
|
|
|
-#include "bsp/bsp.h"
|
|
|
|
|
|
/* BLE */
|
|
|
#include "nimble/ble.h"
|
|
|
#include "nimble/ble_hci_trans.h"
|
|
|
#include "nimble/hci_common.h"
|
|
|
#include "host/ble_hs.h"
|
|
|
-#include "controller/ble_ll.h"
|
|
|
-#include "controller/ble_ll_hci.h"
|
|
|
-#include "controller/ble_ll_conn.h"
|
|
|
-#include "controller/ble_ll_scan.h"
|
|
|
-#include "controller/ble_ll_adv.h"
|
|
|
|
|
|
/* XXX: An app should not include private headers from a library. The bletest
|
|
|
* app uses some of nimble's internal details for logging.
|
|
|
@@ -70,18 +63,14 @@ int
|
|
|
bletest_send_ltk_req_neg_reply(uint16_t handle)
|
|
|
{
|
|
|
int rc;
|
|
|
- uint8_t *dst;
|
|
|
- uint8_t buf[BLE_HCI_CMD_HDR_LEN + sizeof(uint16_t)];
|
|
|
+ uint8_t buf[sizeof(uint16_t)];
|
|
|
uint16_t ack_conn_handle;
|
|
|
uint8_t rsplen;
|
|
|
|
|
|
- dst = buf;
|
|
|
- ble_hs_hci_cmd_write_hdr(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_LT_KEY_REQ_NEG_REPLY,
|
|
|
- sizeof(uint16_t), dst);
|
|
|
- dst += BLE_HCI_CMD_HDR_LEN;
|
|
|
-
|
|
|
- put_le16(dst, handle);
|
|
|
- rc = ble_hs_hci_cmd_tx(buf, &ack_conn_handle, 2, &rsplen);
|
|
|
+ put_le16(buf, handle);
|
|
|
+ rc = ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE,
|
|
|
+ BLE_HCI_OCF_LE_LT_KEY_REQ_NEG_REPLY),
|
|
|
+ buf, sizeof(uint16_t), &ack_conn_handle, 2, &rsplen);
|
|
|
if (rc == 0) {
|
|
|
if (rsplen != 2) {
|
|
|
rc = -1;
|
|
|
@@ -91,12 +80,13 @@ bletest_send_ltk_req_neg_reply(uint16_t handle)
|
|
|
return rc;
|
|
|
}
|
|
|
|
|
|
+extern const uint8_t g_bletest_LTK[];
|
|
|
int
|
|
|
bletest_send_ltk_req_reply(uint16_t handle)
|
|
|
{
|
|
|
struct hci_lt_key_req_reply hkr;
|
|
|
uint16_t ack_conn_handle;
|
|
|
- uint8_t buf[BLE_HCI_CMD_HDR_LEN + BLE_HCI_LT_KEY_REQ_REPLY_LEN];
|
|
|
+ uint8_t buf[BLE_HCI_LT_KEY_REQ_REPLY_LEN];
|
|
|
uint8_t ack_params_len;
|
|
|
int rc;
|
|
|
|
|
|
@@ -104,8 +94,10 @@ bletest_send_ltk_req_reply(uint16_t handle)
|
|
|
swap_buf(hkr.long_term_key, (uint8_t *)g_bletest_LTK, 16);
|
|
|
|
|
|
ble_hs_hci_cmd_build_le_lt_key_req_reply(&hkr, buf, sizeof buf);
|
|
|
- rc = ble_hs_hci_cmd_tx(buf, &ack_conn_handle, sizeof ack_conn_handle,
|
|
|
- &ack_params_len);
|
|
|
+ rc = ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE,
|
|
|
+ BLE_HCI_OCF_LE_LT_KEY_REQ_REPLY),
|
|
|
+ buf, sizeof(buf), &ack_conn_handle,
|
|
|
+ sizeof(ack_conn_handle), &ack_params_len);
|
|
|
if (rc != 0) {
|
|
|
return rc;
|
|
|
}
|
|
|
@@ -123,24 +115,21 @@ bletest_send_ltk_req_reply(uint16_t handle)
|
|
|
int
|
|
|
bletest_hci_reset_ctlr(void)
|
|
|
{
|
|
|
- uint8_t buf[BLE_HCI_CMD_HDR_LEN];
|
|
|
-
|
|
|
- ble_hs_hci_cmd_write_hdr(BLE_HCI_OGF_CTLR_BASEBAND, BLE_HCI_OCF_CB_RESET,
|
|
|
- 0, buf);
|
|
|
- return ble_hs_hci_cmd_tx(buf, NULL, 0, NULL);
|
|
|
+ return ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_CTLR_BASEBAND,
|
|
|
+ BLE_HCI_OCF_CB_RESET),
|
|
|
+ NULL, 0, NULL, 0, NULL);
|
|
|
}
|
|
|
|
|
|
int
|
|
|
bletest_hci_rd_bd_addr(void)
|
|
|
{
|
|
|
int rc;
|
|
|
- uint8_t buf[BLE_HCI_CMD_HDR_LEN];
|
|
|
uint8_t rspbuf[BLE_DEV_ADDR_LEN];
|
|
|
uint8_t rsplen;
|
|
|
|
|
|
- ble_hs_hci_cmd_write_hdr(BLE_HCI_OGF_INFO_PARAMS, BLE_HCI_OCF_IP_RD_BD_ADDR, 0,
|
|
|
- buf);
|
|
|
- rc = ble_hs_hci_cmd_tx(buf, rspbuf, BLE_DEV_ADDR_LEN, &rsplen);
|
|
|
+ rc = ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_INFO_PARAMS,
|
|
|
+ BLE_HCI_OCF_IP_RD_BD_ADDR),
|
|
|
+ NULL, 0, rspbuf, BLE_DEV_ADDR_LEN, &rsplen);
|
|
|
if (rc != 0) {
|
|
|
return rc;
|
|
|
}
|
|
|
@@ -157,19 +146,15 @@ int
|
|
|
bletest_hci_le_encrypt(uint8_t *key, uint8_t *pt)
|
|
|
{
|
|
|
int rc;
|
|
|
- uint8_t *dst;
|
|
|
- uint8_t buf[BLE_HCI_CMD_HDR_LEN + BLE_HCI_LE_ENCRYPT_LEN];
|
|
|
+ uint8_t buf[BLE_HCI_LE_ENCRYPT_LEN];
|
|
|
uint8_t rspbuf[16];
|
|
|
uint8_t rsplen;
|
|
|
|
|
|
- dst = buf;
|
|
|
- ble_hs_hci_cmd_write_hdr(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_ENCRYPT,
|
|
|
- BLE_HCI_LE_ENCRYPT_LEN, dst);
|
|
|
- dst += BLE_HCI_CMD_HDR_LEN;
|
|
|
-
|
|
|
- swap_buf(dst, key, BLE_ENC_BLOCK_SIZE);
|
|
|
- swap_buf(dst + BLE_ENC_BLOCK_SIZE, pt, BLE_ENC_BLOCK_SIZE);
|
|
|
- rc = ble_hs_hci_cmd_tx(buf, rspbuf, 16, &rsplen);
|
|
|
+ swap_buf(buf, key, BLE_ENC_BLOCK_SIZE);
|
|
|
+ swap_buf(buf + BLE_ENC_BLOCK_SIZE, pt, BLE_ENC_BLOCK_SIZE);
|
|
|
+ rc = ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE,
|
|
|
+ BLE_HCI_OCF_LE_ENCRYPT),
|
|
|
+ buf, sizeof(buf), rspbuf, 16, &rsplen);
|
|
|
if (rc != 0) {
|
|
|
return rc;
|
|
|
}
|
|
|
@@ -185,20 +170,15 @@ int
|
|
|
bletest_hci_le_set_datalen(uint16_t handle, uint16_t txoctets, uint16_t txtime)
|
|
|
{
|
|
|
int rc;
|
|
|
- uint8_t *dst;
|
|
|
- uint8_t buf[BLE_HCI_CMD_HDR_LEN + BLE_HCI_SET_DATALEN_LEN];
|
|
|
+ uint8_t buf[BLE_HCI_SET_DATALEN_LEN];
|
|
|
uint8_t rspbuf[2];
|
|
|
uint8_t rsplen;
|
|
|
|
|
|
- dst = buf;
|
|
|
- ble_hs_hci_cmd_write_hdr(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_SET_DATA_LEN,
|
|
|
- BLE_HCI_SET_DATALEN_LEN, dst);
|
|
|
- dst += BLE_HCI_CMD_HDR_LEN;
|
|
|
-
|
|
|
- put_le16(dst, handle);
|
|
|
- put_le16(dst + 2, txoctets);
|
|
|
- put_le16(dst + 4, txtime);
|
|
|
- rc = ble_hs_hci_cmd_tx(buf, rspbuf, 2, &rsplen);
|
|
|
+ put_le16(buf, handle);
|
|
|
+ put_le16(buf + 2, txoctets);
|
|
|
+ put_le16(buf + 4, txtime);
|
|
|
+ rc = ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_SET_DATA_LEN),
|
|
|
+ buf, sizeof(buf), rspbuf, 2, &rsplen);
|
|
|
if (rc != 0) {
|
|
|
return rc;
|
|
|
}
|
|
|
@@ -213,31 +193,23 @@ bletest_hci_le_set_datalen(uint16_t handle, uint16_t txoctets, uint16_t txtime)
|
|
|
int
|
|
|
bletest_hci_le_write_sugg_datalen(uint16_t txoctets, uint16_t txtime)
|
|
|
{
|
|
|
- uint8_t *dst;
|
|
|
- uint8_t buf[BLE_HCI_CMD_HDR_LEN + BLE_HCI_WR_SUGG_DATALEN_LEN];
|
|
|
+ uint8_t buf[BLE_HCI_WR_SUGG_DATALEN_LEN];
|
|
|
|
|
|
- dst = buf;
|
|
|
- ble_hs_hci_cmd_write_hdr(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_WR_SUGG_DEF_DATA_LEN,
|
|
|
- BLE_HCI_WR_SUGG_DATALEN_LEN, dst);
|
|
|
- dst += BLE_HCI_CMD_HDR_LEN;
|
|
|
-
|
|
|
- put_le16(dst, txoctets);
|
|
|
- put_le16(dst + 2, txtime);
|
|
|
- return ble_hs_hci_cmd_tx(buf, NULL, 0, NULL);
|
|
|
+ put_le16(buf, txoctets);
|
|
|
+ put_le16(buf + 2, txtime);
|
|
|
+ return ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_WR_SUGG_DEF_DATA_LEN),
|
|
|
+ buf, sizeof(buf), NULL, 0, NULL);
|
|
|
}
|
|
|
|
|
|
int
|
|
|
bletest_hci_le_rd_sugg_datalen(void)
|
|
|
{
|
|
|
int rc;
|
|
|
- uint8_t buf[BLE_HCI_CMD_HDR_LEN];
|
|
|
uint8_t rspbuf[BLE_HCI_RD_SUGG_DATALEN_RSPLEN];
|
|
|
uint8_t rsplen;
|
|
|
|
|
|
- ble_hs_hci_cmd_write_hdr(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_RD_SUGG_DEF_DATA_LEN, 0,
|
|
|
- buf);
|
|
|
-
|
|
|
- rc = ble_hs_hci_cmd_tx(buf, rspbuf, BLE_HCI_RD_SUGG_DATALEN_RSPLEN, &rsplen);
|
|
|
+ rc = ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_RD_SUGG_DEF_DATA_LEN),
|
|
|
+ NULL, 0, rspbuf, BLE_HCI_RD_SUGG_DATALEN_RSPLEN, &rsplen);
|
|
|
if (rc != 0) {
|
|
|
return rc;
|
|
|
}
|
|
|
@@ -253,13 +225,11 @@ int
|
|
|
bletest_hci_rd_local_version(void)
|
|
|
{
|
|
|
int rc;
|
|
|
- uint8_t buf[BLE_HCI_CMD_HDR_LEN];
|
|
|
uint8_t rspbuf[BLE_HCI_RD_LOC_VER_INFO_RSPLEN];
|
|
|
uint8_t rsplen;
|
|
|
|
|
|
- ble_hs_hci_cmd_write_hdr(BLE_HCI_OGF_INFO_PARAMS, BLE_HCI_OCF_IP_RD_LOCAL_VER, 0,
|
|
|
- buf);
|
|
|
- rc = ble_hs_hci_cmd_tx(buf, rspbuf, BLE_HCI_RD_LOC_VER_INFO_RSPLEN, &rsplen);
|
|
|
+ rc = ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_INFO_PARAMS, BLE_HCI_OCF_IP_RD_LOCAL_VER),
|
|
|
+ NULL, 0, rspbuf, BLE_HCI_RD_LOC_VER_INFO_RSPLEN, &rsplen);
|
|
|
if (rc != 0) {
|
|
|
return rc;
|
|
|
}
|
|
|
@@ -274,13 +244,11 @@ int
|
|
|
bletest_hci_rd_local_feat(void)
|
|
|
{
|
|
|
int rc;
|
|
|
- uint8_t buf[BLE_HCI_CMD_HDR_LEN];
|
|
|
uint8_t rspbuf[BLE_HCI_RD_LOC_SUPP_FEAT_RSPLEN];
|
|
|
uint8_t rsplen;
|
|
|
|
|
|
- ble_hs_hci_cmd_write_hdr(BLE_HCI_OGF_INFO_PARAMS, BLE_HCI_OCF_IP_RD_LOC_SUPP_FEAT,
|
|
|
- 0, buf);
|
|
|
- rc = ble_hs_hci_cmd_tx(buf, rspbuf, BLE_HCI_RD_LOC_SUPP_FEAT_RSPLEN, &rsplen);
|
|
|
+ rc = ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_INFO_PARAMS, BLE_HCI_OCF_IP_RD_LOC_SUPP_FEAT),
|
|
|
+ NULL, 0, rspbuf, BLE_HCI_RD_LOC_SUPP_FEAT_RSPLEN, &rsplen);
|
|
|
if (rc != 0) {
|
|
|
return rc;
|
|
|
}
|
|
|
@@ -295,13 +263,11 @@ int
|
|
|
bletest_hci_rd_local_supp_cmd(void)
|
|
|
{
|
|
|
int rc;
|
|
|
- uint8_t buf[BLE_HCI_CMD_HDR_LEN];
|
|
|
uint8_t rspbuf[BLE_HCI_RD_LOC_SUPP_CMD_RSPLEN];
|
|
|
uint8_t rsplen;
|
|
|
|
|
|
- ble_hs_hci_cmd_write_hdr(BLE_HCI_OGF_INFO_PARAMS, BLE_HCI_OCF_IP_RD_LOC_SUPP_CMD,
|
|
|
- 0, buf);
|
|
|
- rc = ble_hs_hci_cmd_tx(buf, rspbuf, BLE_HCI_RD_LOC_SUPP_CMD_RSPLEN, &rsplen);
|
|
|
+ rc = ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_INFO_PARAMS, BLE_HCI_OCF_IP_RD_LOC_SUPP_CMD),
|
|
|
+ NULL, 0, rspbuf, BLE_HCI_RD_LOC_SUPP_CMD_RSPLEN, &rsplen);
|
|
|
if (rc != 0) {
|
|
|
return rc;
|
|
|
}
|
|
|
@@ -323,13 +289,12 @@ bletest_hci_rd_local_supp_cmd(void)
|
|
|
int
|
|
|
bletest_hci_le_read_supp_states(void)
|
|
|
{
|
|
|
- int rc;
|
|
|
- uint8_t buf[BLE_HCI_CMD_HDR_LEN];
|
|
|
+ int rc;;
|
|
|
uint8_t rspbuf[BLE_HCI_RD_SUPP_STATES_RSPLEN];
|
|
|
uint8_t rsplen;
|
|
|
|
|
|
- ble_hs_hci_cmd_write_hdr(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_RD_SUPP_STATES, 0, buf);
|
|
|
- rc = ble_hs_hci_cmd_tx(buf, rspbuf, BLE_HCI_RD_SUPP_STATES_RSPLEN, &rsplen);
|
|
|
+ rc = ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_RD_SUPP_STATES),
|
|
|
+ NULL, 0, rspbuf, BLE_HCI_RD_SUPP_STATES_RSPLEN, &rsplen);
|
|
|
if (rc != 0) {
|
|
|
return rc;
|
|
|
}
|
|
|
@@ -344,12 +309,11 @@ int
|
|
|
bletest_hci_le_rd_max_datalen(void)
|
|
|
{
|
|
|
int rc;
|
|
|
- uint8_t buf[BLE_HCI_CMD_HDR_LEN];
|
|
|
uint8_t rspbuf[BLE_HCI_RD_MAX_DATALEN_RSPLEN];
|
|
|
uint8_t rsplen;
|
|
|
|
|
|
- ble_hs_hci_cmd_write_hdr(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_RD_MAX_DATA_LEN, 0, buf);
|
|
|
- rc = ble_hs_hci_cmd_tx(buf, rspbuf, BLE_HCI_RD_MAX_DATALEN_RSPLEN, &rsplen);
|
|
|
+ rc = ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_RD_MAX_DATA_LEN),
|
|
|
+ NULL, 0, rspbuf, BLE_HCI_RD_MAX_DATALEN_RSPLEN, &rsplen);
|
|
|
if (rc != 0) {
|
|
|
return rc;
|
|
|
}
|
|
|
@@ -393,11 +357,13 @@ int
|
|
|
bletest_hci_le_set_adv_data(uint8_t *data, uint8_t len)
|
|
|
{
|
|
|
int rc;
|
|
|
- uint8_t buf[BLE_HCI_CMD_HDR_LEN + BLE_HCI_SET_ADV_DATA_LEN];
|
|
|
+ uint16_t opcode;
|
|
|
+ uint8_t buf[BLE_HCI_SET_ADV_DATA_LEN];
|
|
|
|
|
|
+ opcode = BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_SET_ADV_DATA);
|
|
|
rc = ble_hs_hci_cmd_build_le_set_adv_data(data, len, buf, sizeof buf);
|
|
|
assert(rc == 0);
|
|
|
- return ble_hs_hci_cmd_tx_empty_ack(buf);
|
|
|
+ return ble_hs_hci_cmd_tx_empty_ack(opcode, buf, sizeof(buf));
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
@@ -405,26 +371,25 @@ bletest_hci_le_set_adv_data(uint8_t *data, uint8_t len)
|
|
|
int
|
|
|
bletest_hci_le_start_encrypt(struct hci_start_encrypt *cmd)
|
|
|
{
|
|
|
- uint8_t buf[BLE_HCI_CMD_HDR_LEN + BLE_HCI_LE_START_ENCRYPT_LEN];
|
|
|
+ int rc;
|
|
|
+ uint8_t buf[BLE_HCI_LE_START_ENCRYPT_LEN];
|
|
|
|
|
|
ble_hs_hci_cmd_build_le_start_encrypt(cmd, buf, sizeof buf);
|
|
|
- return ble_hs_hci_cmd_tx_empty_ack(buf);
|
|
|
+ rc = ble_hs_hci_cmd_tx_empty_ack(BLE_HCI_OP(BLE_HCI_OGF_LE,
|
|
|
+ BLE_HCI_OCF_LE_START_ENCRYPT),
|
|
|
+ buf, sizeof(buf));
|
|
|
+ return rc;
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
int
|
|
|
bletest_hci_le_read_rem_used_feat(uint16_t handle)
|
|
|
{
|
|
|
- uint8_t *dst;
|
|
|
- uint8_t buf[BLE_HCI_CMD_HDR_LEN + BLE_HCI_CONN_RD_REM_FEAT_LEN];
|
|
|
+ uint8_t buf[BLE_HCI_CONN_RD_REM_FEAT_LEN];
|
|
|
|
|
|
- dst = buf;
|
|
|
- ble_hs_hci_cmd_write_hdr(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_RD_REM_FEAT,
|
|
|
- BLE_HCI_CONN_RD_REM_FEAT_LEN, dst);
|
|
|
- dst += BLE_HCI_CMD_HDR_LEN;
|
|
|
-
|
|
|
- put_le16(dst, handle);
|
|
|
- return ble_hs_hci_cmd_tx(buf, NULL, 0, NULL);
|
|
|
+ put_le16(buf, handle);
|
|
|
+ return ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_RD_REM_FEAT),
|
|
|
+ buf, sizeof(buf), NULL, 0, NULL);
|
|
|
}
|
|
|
|
|
|
#if MYNEWT_VAL(BLE_ANDROID_MULTI_ADV_SUPPORT)
|
|
|
@@ -493,11 +458,13 @@ int
|
|
|
bletest_hci_le_set_adv_params(struct hci_adv_params *adv)
|
|
|
{
|
|
|
int rc;
|
|
|
- uint8_t buf[BLE_HCI_CMD_HDR_LEN + BLE_HCI_SET_ADV_PARAM_LEN];
|
|
|
+ uint8_t buf[BLE_HCI_SET_ADV_PARAM_LEN];
|
|
|
|
|
|
rc = ble_hs_hci_cmd_build_le_set_adv_params(adv, buf, sizeof buf);
|
|
|
if (!rc) {
|
|
|
- rc = ble_hs_hci_cmd_tx_empty_ack(buf);
|
|
|
+ rc = ble_hs_hci_cmd_tx_empty_ack(BLE_HCI_OP(BLE_HCI_OGF_LE,
|
|
|
+ BLE_HCI_OCF_LE_SET_ADV_PARAMS),
|
|
|
+ buf, sizeof(buf));
|
|
|
}
|
|
|
return rc;
|
|
|
}
|
|
|
@@ -506,16 +473,11 @@ bletest_hci_le_set_adv_params(struct hci_adv_params *adv)
|
|
|
int
|
|
|
bletest_hci_le_set_rand_addr(uint8_t *addr)
|
|
|
{
|
|
|
- uint8_t *dst;
|
|
|
- uint8_t buf[BLE_HCI_CMD_HDR_LEN + BLE_HCI_SET_RAND_ADDR_LEN];
|
|
|
-
|
|
|
- dst = buf;
|
|
|
- ble_hs_hci_cmd_write_hdr(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_SET_RAND_ADDR,
|
|
|
- BLE_DEV_ADDR_LEN, dst);
|
|
|
- dst += BLE_HCI_CMD_HDR_LEN;
|
|
|
+ uint8_t buf[BLE_HCI_SET_RAND_ADDR_LEN];
|
|
|
|
|
|
- memcpy(dst, addr, BLE_DEV_ADDR_LEN);
|
|
|
- return ble_hs_hci_cmd_tx(buf, NULL, 0, NULL);
|
|
|
+ memcpy(buf, addr, BLE_DEV_ADDR_LEN);
|
|
|
+ return ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_SET_RAND_ADDR),
|
|
|
+ buf, sizeof(buf), NULL, 0, NULL);
|
|
|
}
|
|
|
|
|
|
#if MYNEWT_VAL(BLE_ANDROID_MULTI_ADV_SUPPORT)
|
|
|
@@ -544,49 +506,34 @@ bletest_hci_le_set_multi_rand_addr(uint8_t *addr, uint8_t instance)
|
|
|
int
|
|
|
bletest_hci_rd_rem_version(uint16_t handle)
|
|
|
{
|
|
|
- uint8_t *dst;
|
|
|
- uint8_t buf[BLE_HCI_CMD_HDR_LEN + sizeof(uint16_t)];
|
|
|
+ uint8_t buf[sizeof(uint16_t)];
|
|
|
|
|
|
- dst = buf;
|
|
|
- ble_hs_hci_cmd_write_hdr(BLE_HCI_OGF_LINK_CTRL, BLE_HCI_OCF_RD_REM_VER_INFO,
|
|
|
- sizeof(uint16_t), dst);
|
|
|
- dst += BLE_HCI_CMD_HDR_LEN;
|
|
|
-
|
|
|
- put_le16(dst, handle);
|
|
|
- return ble_hs_hci_cmd_tx(buf, NULL, 0, NULL);
|
|
|
+ put_le16(buf, handle);
|
|
|
+ return ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LINK_CTRL, BLE_HCI_OCF_RD_REM_VER_INFO),
|
|
|
+ buf, sizeof(buf), NULL, 0, NULL);
|
|
|
}
|
|
|
|
|
|
int
|
|
|
bletest_hci_le_set_host_chan_class(uint8_t *chanmap)
|
|
|
{
|
|
|
- uint8_t *dst;
|
|
|
- uint8_t buf[BLE_HCI_CMD_HDR_LEN + BLE_HCI_SET_HOST_CHAN_CLASS_LEN];
|
|
|
+ uint8_t buf[BLE_HCI_SET_HOST_CHAN_CLASS_LEN];
|
|
|
|
|
|
- dst = buf;
|
|
|
- ble_hs_hci_cmd_write_hdr(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_SET_HOST_CHAN_CLASS,
|
|
|
- BLE_HCI_SET_HOST_CHAN_CLASS_LEN, dst);
|
|
|
- dst += BLE_HCI_CMD_HDR_LEN;
|
|
|
-
|
|
|
- memcpy(dst, chanmap, BLE_HCI_SET_HOST_CHAN_CLASS_LEN);
|
|
|
- return ble_hs_hci_cmd_tx(buf, NULL, 0, NULL);
|
|
|
+ memcpy(buf, chanmap, BLE_HCI_SET_HOST_CHAN_CLASS_LEN);
|
|
|
+ return ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_SET_HOST_CHAN_CLASS),
|
|
|
+ buf, sizeof(buf), NULL, 0, NULL);
|
|
|
}
|
|
|
|
|
|
int
|
|
|
bletest_hci_le_rd_chanmap(uint16_t handle)
|
|
|
{
|
|
|
int rc;
|
|
|
- uint8_t *dst;
|
|
|
- uint8_t buf[BLE_HCI_CMD_HDR_LEN + BLE_HCI_RD_CHANMAP_LEN];
|
|
|
+ uint8_t buf[BLE_HCI_RD_CHANMAP_LEN];
|
|
|
uint8_t rspbuf[BLE_HCI_RD_CHANMAP_RSP_LEN];
|
|
|
uint8_t rsplen;
|
|
|
|
|
|
- dst = buf;
|
|
|
- ble_hs_hci_cmd_write_hdr(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_RD_CHAN_MAP,
|
|
|
- BLE_HCI_RD_CHANMAP_LEN, dst);
|
|
|
- dst += BLE_HCI_CMD_HDR_LEN;
|
|
|
-
|
|
|
- put_le16(dst, handle);
|
|
|
- rc = ble_hs_hci_cmd_tx(buf, rspbuf, BLE_HCI_RD_CHANMAP_RSP_LEN, &rsplen);
|
|
|
+ put_le16(buf, handle);
|
|
|
+ rc = ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_RD_CHAN_MAP),
|
|
|
+ buf, sizeof(buf), rspbuf, BLE_HCI_RD_CHANMAP_RSP_LEN, &rsplen);
|
|
|
if (rc != 0) {
|
|
|
return rc;
|
|
|
}
|
|
|
@@ -623,35 +570,34 @@ bletest_hci_le_set_multi_adv_enable(uint8_t enable, uint8_t instance)
|
|
|
int
|
|
|
bletest_hci_le_set_adv_enable(uint8_t enable)
|
|
|
{
|
|
|
- uint8_t *dst;
|
|
|
- uint8_t buf[BLE_HCI_CMD_HDR_LEN + BLE_HCI_SET_ADV_ENABLE_LEN];
|
|
|
-
|
|
|
- dst = buf;
|
|
|
- ble_hs_hci_cmd_write_hdr(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_SET_ADV_ENABLE,
|
|
|
- BLE_HCI_SET_ADV_ENABLE_LEN, dst);
|
|
|
- dst += BLE_HCI_CMD_HDR_LEN;
|
|
|
+ uint8_t buf[BLE_HCI_SET_ADV_ENABLE_LEN];
|
|
|
|
|
|
- dst[0] = enable;
|
|
|
- return ble_hs_hci_cmd_tx(buf, NULL, 0, NULL);
|
|
|
+ buf[0] = enable;
|
|
|
+ return ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_SET_ADV_ENABLE),
|
|
|
+ buf, sizeof(buf), NULL, 0, NULL);
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
int
|
|
|
bletest_hci_le_set_event_mask(uint64_t event_mask)
|
|
|
{
|
|
|
- uint8_t buf[BLE_HCI_CMD_HDR_LEN + BLE_HCI_SET_LE_EVENT_MASK_LEN];
|
|
|
+ uint8_t buf[BLE_HCI_SET_LE_EVENT_MASK_LEN];
|
|
|
|
|
|
ble_hs_hci_cmd_build_le_set_event_mask(event_mask, buf, sizeof buf);
|
|
|
- return ble_hs_hci_cmd_tx_empty_ack(buf);
|
|
|
+ return ble_hs_hci_cmd_tx_empty_ack(BLE_HCI_OP(BLE_HCI_OGF_LE,
|
|
|
+ BLE_HCI_OCF_LE_SET_EVENT_MASK),
|
|
|
+ buf, sizeof(buf));
|
|
|
}
|
|
|
|
|
|
int
|
|
|
bletest_hci_set_event_mask(uint64_t event_mask)
|
|
|
{
|
|
|
- uint8_t buf[BLE_HCI_CMD_HDR_LEN + BLE_HCI_SET_EVENT_MASK_LEN];
|
|
|
+ uint8_t buf[BLE_HCI_SET_EVENT_MASK_LEN];
|
|
|
|
|
|
ble_hs_hci_cmd_build_set_event_mask(event_mask, buf, sizeof buf);
|
|
|
- return ble_hs_hci_cmd_tx_empty_ack(buf);
|
|
|
+ return ble_hs_hci_cmd_tx_empty_ack(BLE_HCI_OP(BLE_HCI_OGF_CTLR_BASEBAND,
|
|
|
+ BLE_HCI_OCF_CB_SET_EVENT_MASK2),
|
|
|
+ buf, sizeof(buf));
|
|
|
}
|
|
|
|
|
|
#if MYNEWT_VAL(BLE_ANDROID_MULTI_ADV_SUPPORT)
|
|
|
@@ -687,11 +633,13 @@ int
|
|
|
bletest_hci_le_set_scan_rsp_data(uint8_t *data, uint8_t len)
|
|
|
{
|
|
|
int rc;
|
|
|
- uint8_t buf[BLE_HCI_CMD_HDR_LEN + BLE_HCI_SET_SCAN_RSP_DATA_LEN];
|
|
|
+ uint16_t opcode;
|
|
|
+ uint8_t buf[BLE_HCI_SET_SCAN_RSP_DATA_LEN];
|
|
|
|
|
|
+ opcode = BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_SET_SCAN_RSP_DATA);
|
|
|
rc = ble_hs_hci_cmd_build_le_set_scan_rsp_data(data, len, buf, sizeof buf);
|
|
|
assert(rc == 0);
|
|
|
- return ble_hs_hci_cmd_tx_empty_ack(buf);
|
|
|
+ return ble_hs_hci_cmd_tx_empty_ack(opcode, buf, sizeof(buf));
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
@@ -700,13 +648,14 @@ bletest_hci_cmd_le_set_scan_params(uint8_t scan_type, uint16_t scan_itvl,
|
|
|
uint16_t scan_window, uint8_t own_addr_type,
|
|
|
uint8_t filter_policy) {
|
|
|
int rc;
|
|
|
- uint8_t buf[BLE_HCI_CMD_HDR_LEN + BLE_HCI_SET_SCAN_PARAM_LEN];
|
|
|
+ uint8_t buf[BLE_HCI_SET_SCAN_PARAM_LEN];
|
|
|
|
|
|
rc = ble_hs_hci_cmd_build_le_set_scan_params(scan_type, scan_itvl,
|
|
|
scan_window, own_addr_type,
|
|
|
filter_policy, buf, sizeof buf);
|
|
|
if (!rc) {
|
|
|
- rc = ble_hs_hci_cmd_tx_empty_ack(buf);
|
|
|
+ rc = ble_hs_hci_cmd_tx_empty_ack(BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_SET_SCAN_PARAMS),
|
|
|
+ buf, sizeof(buf));
|
|
|
}
|
|
|
return rc;
|
|
|
}
|
|
|
@@ -715,12 +664,14 @@ int
|
|
|
bletest_hci_le_add_to_whitelist(uint8_t *addr, uint8_t addr_type)
|
|
|
{
|
|
|
int rc;
|
|
|
- uint8_t buf[BLE_HCI_CMD_HDR_LEN + BLE_HCI_SET_SCAN_PARAM_LEN];
|
|
|
+ uint8_t buf[BLE_HCI_ADD_WHITE_LIST_LEN];
|
|
|
|
|
|
rc = ble_hs_hci_cmd_build_le_add_to_whitelist(addr, addr_type, buf,
|
|
|
sizeof buf);
|
|
|
if (!rc) {
|
|
|
- rc = ble_hs_hci_cmd_tx_empty_ack(buf);
|
|
|
+ rc = ble_hs_hci_cmd_tx_empty_ack(BLE_HCI_OP(BLE_HCI_OGF_LE,
|
|
|
+ BLE_HCI_OCF_LE_ADD_WHITE_LIST),
|
|
|
+ buf, sizeof(buf));
|
|
|
}
|
|
|
return rc;
|
|
|
}
|
|
|
@@ -728,21 +679,27 @@ bletest_hci_le_add_to_whitelist(uint8_t *addr, uint8_t addr_type)
|
|
|
int
|
|
|
bletest_hci_le_set_scan_enable(uint8_t enable, uint8_t filter_dups)
|
|
|
{
|
|
|
- uint8_t buf[BLE_HCI_CMD_HDR_LEN + BLE_HCI_SET_SCAN_ENABLE_LEN];
|
|
|
+ uint8_t buf[BLE_HCI_SET_SCAN_ENABLE_LEN];
|
|
|
+
|
|
|
+ ble_hs_hci_cmd_build_le_set_scan_enable(!!enable, !!filter_dups,
|
|
|
+ buf, sizeof buf);
|
|
|
+ return ble_hs_hci_cmd_tx_empty_ack(
|
|
|
+ BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_SET_SCAN_ENABLE),
|
|
|
+ buf, sizeof(buf));
|
|
|
|
|
|
- ble_hs_hci_cmd_build_le_set_scan_enable(enable, filter_dups, buf, sizeof buf);
|
|
|
- return ble_hs_hci_cmd_tx_empty_ack(buf);
|
|
|
}
|
|
|
|
|
|
int
|
|
|
bletest_hci_le_create_connection(struct hci_create_conn *hcc)
|
|
|
{
|
|
|
int rc;
|
|
|
- uint8_t buf[BLE_HCI_CMD_HDR_LEN + BLE_HCI_CREATE_CONN_LEN];
|
|
|
+ uint8_t buf[BLE_HCI_CREATE_CONN_LEN];
|
|
|
|
|
|
rc = ble_hs_hci_cmd_build_le_create_connection(hcc, buf, sizeof buf);
|
|
|
if (!rc) {
|
|
|
- rc = ble_hs_hci_cmd_tx_empty_ack(buf);
|
|
|
+ rc = ble_hs_hci_cmd_tx_empty_ack(BLE_HCI_OP(BLE_HCI_OGF_LE,
|
|
|
+ BLE_HCI_OCF_LE_CREATE_CONN),
|
|
|
+ buf, sizeof(buf));
|
|
|
}
|
|
|
return rc;
|
|
|
}
|
|
|
@@ -753,7 +710,7 @@ bletest_hci_le_add_resolv_list(uint8_t *local_irk, uint8_t *peer_irk,
|
|
|
{
|
|
|
int rc;
|
|
|
struct hci_add_dev_to_resolving_list padd;
|
|
|
- uint8_t buf[BLE_HCI_CMD_HDR_LEN + BLE_HCI_ADD_TO_RESOLV_LIST_LEN];
|
|
|
+ uint8_t buf[BLE_HCI_ADD_TO_RESOLV_LIST_LEN];
|
|
|
|
|
|
padd.addr_type = addr_type;
|
|
|
memcpy(padd.addr, peer_ident_addr, BLE_DEV_ADDR_LEN);
|
|
|
@@ -761,7 +718,9 @@ bletest_hci_le_add_resolv_list(uint8_t *local_irk, uint8_t *peer_irk,
|
|
|
swap_buf(padd.peer_irk, peer_irk, 16);
|
|
|
rc = ble_hs_hci_cmd_build_add_to_resolv_list(&padd, buf, sizeof buf);
|
|
|
if (!rc) {
|
|
|
- rc = ble_hs_hci_cmd_tx_empty_ack(buf);
|
|
|
+ rc = ble_hs_hci_cmd_tx_empty_ack(BLE_HCI_OP(BLE_HCI_OGF_LE,
|
|
|
+ BLE_HCI_OCF_LE_ADD_RESOLV_LIST),
|
|
|
+ buf, sizeof(buf));
|
|
|
}
|
|
|
return rc;
|
|
|
}
|
|
|
@@ -770,13 +729,14 @@ int
|
|
|
bletest_hci_le_enable_resolv_list(uint8_t enable)
|
|
|
{
|
|
|
int rc;
|
|
|
- uint8_t buf[BLE_HCI_CMD_HDR_LEN + BLE_HCI_SET_ADDR_RESOL_ENA_LEN];
|
|
|
+ uint8_t buf[BLE_HCI_SET_ADDR_RESOL_ENA_LEN];
|
|
|
|
|
|
|
|
|
rc = ble_hs_hci_cmd_build_set_addr_res_en(enable, buf, sizeof buf);
|
|
|
if (!rc) {
|
|
|
- rc = ble_hs_hci_cmd_tx_empty_ack(buf);
|
|
|
+ rc = ble_hs_hci_cmd_tx_empty_ack(BLE_HCI_OP(BLE_HCI_OGF_LE,
|
|
|
+ BLE_HCI_OCF_LE_SET_ADDR_RES_EN),
|
|
|
+ buf, sizeof(buf));
|
|
|
}
|
|
|
return rc;
|
|
|
}
|
|
|
-
|