Hi Will, I think some folks were looking for these features, should they try develop branch to test them out?
Cheers, Sterling Begin forwarded message: > From: w...@apache.org > Date: March 22, 2016 at 11:13:29 PM PDT > To: comm...@mynewt.incubator.apache.org > Subject: [1/3] incubator-mynewt-core git commit: Add read supported commands > and read local supported features commands > Reply-To: dev@mynewt.incubator.apache.org > > Repository: incubator-mynewt-core > Updated Branches: > refs/heads/develop e233384b4 -> 8a7eb7d48 > > > Add read supported commands and read local supported features commands > > > Project: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/repo > Commit: > http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/commit/8a7eb7d4 > Tree: > http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/8a7eb7d4 > Diff: > http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/8a7eb7d4 > > Branch: refs/heads/develop > Commit: 8a7eb7d4817d935feb8cf8492685d9251a7651fd > Parents: 3dc5a47 > Author: wes3 <w...@micosa.io> > Authored: Tue Mar 22 23:12:38 2016 -0700 > Committer: wes3 <w...@micosa.io> > Committed: Tue Mar 22 23:12:43 2016 -0700 > > ---------------------------------------------------------------------- > apps/bletest/src/main.c | 10 + > .../controller/include/controller/ble_ll_hci.h | 4 + > net/nimble/controller/src/ble_ll_hci.c | 49 +++++ > net/nimble/controller/src/ble_ll_supp_cmd.c | 197 +++++++++++++++++++ > net/nimble/host/include/host/host_hci.h | 2 + > net/nimble/host/src/host_dbg.c | 83 +++++--- > net/nimble/host/src/host_hci_cmd.c | 20 ++ > net/nimble/include/nimble/hci_common.h | 101 +++++----- > 8 files changed, 388 insertions(+), 78 deletions(-) > ---------------------------------------------------------------------- > > > http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/8a7eb7d4/apps/bletest/src/main.c > ---------------------------------------------------------------------- > diff --git a/apps/bletest/src/main.c b/apps/bletest/src/main.c > index 8b62c77..0863bf4 100755 > --- a/apps/bletest/src/main.c > +++ b/apps/bletest/src/main.c > @@ -792,6 +792,16 @@ bletest_task_handler(void *arg) > assert(rc == 0); > host_hci_outstanding_opcode = 0; > > + /* Read local features */ > + rc = host_hci_cmd_rd_local_feat(); > + assert(rc == 0); > + host_hci_outstanding_opcode = 0; > + > + /* Read local commands */ > + rc = host_hci_cmd_rd_local_cmd(); > + assert(rc == 0); > + host_hci_outstanding_opcode = 0; > + > /* Read version */ > rc = host_hci_cmd_rd_local_version(); > assert(rc == 0); > > http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/8a7eb7d4/net/nimble/controller/include/controller/ble_ll_hci.h > ---------------------------------------------------------------------- > diff --git a/net/nimble/controller/include/controller/ble_ll_hci.h > b/net/nimble/controller/include/controller/ble_ll_hci.h > index 3e1558f..0f80b54 100644 > --- a/net/nimble/controller/include/controller/ble_ll_hci.h > +++ b/net/nimble/controller/include/controller/ble_ll_hci.h > @@ -20,6 +20,10 @@ > #ifndef H_BLE_LL_HCI_ > #define H_BLE_LL_HCI_ > > +/* For supported commands */ > +#define BLE_LL_SUPP_CMD_LEN (36) > +extern const uint8_t g_ble_ll_supp_cmds[BLE_LL_SUPP_CMD_LEN]; > + > /* > * This determines the number of outstanding commands allowed from the > * host to the controller. > > http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/8a7eb7d4/net/nimble/controller/src/ble_ll_hci.c > ---------------------------------------------------------------------- > diff --git a/net/nimble/controller/src/ble_ll_hci.c > b/net/nimble/controller/src/ble_ll_hci.c > index 7ac07db..e726fd3 100644 > --- a/net/nimble/controller/src/ble_ll_hci.c > +++ b/net/nimble/controller/src/ble_ll_hci.c > @@ -123,6 +123,45 @@ ble_ll_hci_rd_local_version(uint8_t *rspbuf, uint8_t > *rsplen) > } > > /** > + * Reade local supported features > + * > + * @param rspbuf > + * @param rsplen > + * > + * @return int > + */ > +static int > +ble_ll_hci_rd_local_supp_feat(uint8_t *rspbuf, uint8_t *rsplen) > +{ > + /* > + * The only two bits we set here currently are: > + * BR/EDR not supported (bit 5) > + * LE supported (controller) (bit 6) > + */ > + memset(rspbuf, 0, BLE_HCI_RD_LOC_SUPP_FEAT_RSPLEN); > + rspbuf[4] = 0x60; > + *rsplen = BLE_HCI_RD_LOC_SUPP_FEAT_RSPLEN; > + return BLE_ERR_SUCCESS; > +} > + > +/** > + * Read local supported commands > + * > + * @param rspbuf > + * @param rsplen > + * > + * @return int > + */ > +static int > +ble_ll_hci_rd_local_supp_cmd(uint8_t *rspbuf, uint8_t *rsplen) > +{ > + memset(rspbuf, 0, BLE_HCI_RD_LOC_SUPP_CMD_RSPLEN); > + memcpy(rspbuf, g_ble_ll_supp_cmds, sizeof(g_ble_ll_supp_cmds)); > + *rsplen = BLE_HCI_RD_LOC_SUPP_CMD_RSPLEN; > + return BLE_ERR_SUCCESS; > +} > + > +/** > * Called to read the public device address of the device > * > * > @@ -582,6 +621,16 @@ ble_ll_hci_info_params_cmd_proc(uint8_t *cmdbuf, > uint16_t ocf, uint8_t *rsplen) > rc = ble_ll_hci_rd_local_version(rspbuf, rsplen); > } > break; > + case BLE_HCI_OCF_IP_RD_LOC_SUPP_CMD: > + if (len == 0) { > + rc = ble_ll_hci_rd_local_supp_cmd(rspbuf, rsplen); > + } > + break; > + case BLE_HCI_OCF_IP_RD_LOC_SUPP_FEAT: > + if (len == 0) { > + rc = ble_ll_hci_rd_local_supp_feat(rspbuf, rsplen); > + } > + break; > case BLE_HCI_OCF_IP_RD_BD_ADDR: > if (len == 0) { > rc = ble_ll_hci_rd_bd_addr(rspbuf, rsplen); > > http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/8a7eb7d4/net/nimble/controller/src/ble_ll_supp_cmd.c > ---------------------------------------------------------------------- > diff --git a/net/nimble/controller/src/ble_ll_supp_cmd.c > b/net/nimble/controller/src/ble_ll_supp_cmd.c > new file mode 100644 > index 0000000..1ef5780 > --- /dev/null > +++ b/net/nimble/controller/src/ble_ll_supp_cmd.c > @@ -0,0 +1,197 @@ > +/** > + * Licensed to the Apache Software Foundation (ASF) under one > + * or more contributor license agreements. See the NOTICE file > + * distributed with this work for additional information > + * regarding copyright ownership. The ASF licenses this file > + * to you under the Apache License, Version 2.0 (the > + * "License"); you may not use this file except in compliance > + * with the License. You may obtain a copy of the License at > + * > + * http://www.apache.org/licenses/LICENSE-2.0 > + * > + * Unless required by applicable law or agreed to in writing, > + * software distributed under the License is distributed on an > + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY > + * KIND, either express or implied. See the License for the > + * specific language governing permissions and limitations > + * under the License. > + */ > + > +#include <stdint.h> > +#include <string.h> > + > +#include "nimble/ble.h" > +#include "nimble/nimble_opt.h" > +#include "nimble/hci_common.h" > +#include "controller/ble_ll.h" > +#include "controller/ble_ll_hci.h" > + > +/* Octet 0 */ > +#define BLE_SUPP_CMD_DISCONNECT (1 << 5) > +#define BLE_LL_SUPP_CMD_OCTET_0 (BLE_SUPP_CMD_DISCONNECT) > + > +/* Octet 5 */ > +#define BLE_SUPP_CMD_SET_EVENT_MASK (1 << 6) > +#define BLE_LL_SUPP_CMD_OCTET_5 (BLE_SUPP_CMD_SET_EVENT_MASK) > + > +/* Octet 10 */ > +#define BLE_SUPP_CMD_RD_TX_PWR (0 << 2) > +#define BLE_LL_SUPP_CMD_OCTET_10 (BLE_SUPP_CMD_RD_TX_PWR) > + > +/* Octet 14 */ > +#define BLE_SUPP_CMD_RD_LOC_VER (1 << 3) > +#define BLE_SUPP_CMD_RD_LOC_SUPP_FEAT (1 << 5) > +#define BLE_LL_SUPP_CMD_OCTET_14 \ > +( \ > + BLE_SUPP_CMD_RD_LOC_VER | \ > + BLE_SUPP_CMD_RD_LOC_SUPP_FEAT \ > +) > + > +/* Octet 15 */ > +#define BLE_SUPP_CMD_RD_BD_ADDR (1 << 1) > +#define BLE_SUPP_CMD_RD_RSSI (1 << 5) > + > +#define BLE_LL_SUPP_CMD_OCTET_15 \ > +( \ > + BLE_SUPP_CMD_RD_BD_ADDR | \ > + BLE_SUPP_CMD_RD_RSSI \ > +) > + > +/* Octet 25 */ > +#define BLE_SUPP_CMD_LE_SET_EV_MASK (1 << 0) > +#define BLE_SUPP_CMD_LE_RD_BUF_SIZE (1 << 1) > +#define BLE_SUPP_CMD_LE_RD_LOC_FEAT (1 << 2) > +#define BLE_SUPP_CMD_LE_SET_RAND_ADDR (1 << 4) > +#define BLE_SUPP_CMD_LE_SET_ADV_PARAMS (1 << 5) > +#define BLE_SUPP_CMD_LE_SET_ADV_TX_PWR (1 << 6) > +#define BLE_SUPP_CMD_LE_SET_ADV_DATA (1 << 7) > + > +#define BLE_LL_SUPP_CMD_OCTET_25 \ > +( \ > + BLE_SUPP_CMD_LE_SET_EV_MASK | \ > + BLE_SUPP_CMD_LE_RD_BUF_SIZE | \ > + BLE_SUPP_CMD_LE_RD_LOC_FEAT | \ > + BLE_SUPP_CMD_LE_SET_RAND_ADDR | \ > + BLE_SUPP_CMD_LE_SET_ADV_PARAMS | \ > + BLE_SUPP_CMD_LE_SET_ADV_TX_PWR | \ > + BLE_SUPP_CMD_LE_SET_ADV_DATA \ > +) > + > +/* Octet 26 */ > +#define BLE_SUPP_CMD_LE_SET_SCAN_RSP_DATA (1 << 0) > +#define BLE_SUPP_CMD_LE_SET_ADV_ENABLE (1 << 1) > +#define BLE_SUPP_CMD_LE_SET_SCAN_PARAMS (1 << 2) > +#define BLE_SUPP_CMD_LE_SET_SCAN_ENABLE (1 << 3) > +#define BLE_SUPP_CMD_LE_CREATE_CONN (1 << 4) > +#define BLE_SUPP_CMD_LE_CREATE_CONN_CANCEL (1 << 5) > +#define BLE_SUPP_CMD_LE_RD_WHITELIST_SIZE (1 << 6) > +#define BLE_SUPP_CMD_LE_CLR_WHITELIST (1 << 7) > + > +#define BLE_LL_SUPP_CMD_OCTET_26 \ > +( \ > + BLE_SUPP_CMD_LE_SET_SCAN_RSP_DATA | \ > + BLE_SUPP_CMD_LE_SET_ADV_ENABLE | \ > + BLE_SUPP_CMD_LE_SET_SCAN_PARAMS | \ > + BLE_SUPP_CMD_LE_SET_SCAN_ENABLE | \ > + BLE_SUPP_CMD_LE_CREATE_CONN | \ > + BLE_SUPP_CMD_LE_CREATE_CONN_CANCEL | \ > + BLE_SUPP_CMD_LE_RD_WHITELIST_SIZE | \ > + BLE_SUPP_CMD_LE_CLR_WHITELIST \ > +) > + > +/* Octet 27 */ > +#define BLE_SUPP_CMD_LE_ADD_DEV_WHITELIST (1 << 0) > +#define BLE_SUPP_CMD_LE_RMV_DEV_WHITELIST (1 << 1) > +#define BLE_SUPP_CMD_LE_CONN_UPDATE (1 << 2) > +#define BLE_SUPP_CMD_LE_SET_HOST_CHAN_CLASS (1 << 3) > +#define BLE_SUPP_CMD_LE_RD_CHAN_MAP (1 << 4) > +#define BLE_SUPP_CMD_LE_RD_REM_USED_FEAT (1 << 5) > +#define BLE_SUPP_CMD_LE_ENCRYPT (0 << 6) > +#define BLE_SUPP_CMD_LE_RAND (0 << 7) > + > +#define BLE_LL_SUPP_CMD_OCTET_27 \ > +( \ > + BLE_SUPP_CMD_LE_ADD_DEV_WHITELIST | \ > + BLE_SUPP_CMD_LE_RMV_DEV_WHITELIST | \ > + BLE_SUPP_CMD_LE_CONN_UPDATE | \ > + BLE_SUPP_CMD_LE_SET_HOST_CHAN_CLASS | \ > + BLE_SUPP_CMD_LE_RD_CHAN_MAP | \ > + BLE_SUPP_CMD_LE_RD_REM_USED_FEAT | \ > + BLE_SUPP_CMD_LE_ENCRYPT | \ > + BLE_SUPP_CMD_LE_RAND \ > +) > + > +/* Octet 28 */ > +#define BLE_SUPP_CMD_LE_START_ENCRYPT (0 << 0) > +#define BLE_SUPP_CMD_LE_LTK_REQ_REPLY (0 << 1) > +#define BLE_SUPP_CMD_LE_LTK_REQ_NEG_REPLY (0 << 2) > +#define BLE_SUPP_CMD_LE_READ_SUPP_STATES (1 << 3) > +#define BLE_SUPP_CMD_LE_RX_TEST (0 << 4) > +#define BLE_SUPP_CMD_LE_TX_TEST (0 << 5) > +#define BLE_SUPP_CMD_LE_TEST_END (0 << 6) > + > +#define BLE_LL_SUPP_CMD_OCTET_28 \ > +( \ > + BLE_SUPP_CMD_LE_START_ENCRYPT | \ > + BLE_SUPP_CMD_LE_LTK_REQ_REPLY | \ > + BLE_SUPP_CMD_LE_LTK_REQ_NEG_REPLY | \ > + BLE_SUPP_CMD_LE_READ_SUPP_STATES | \ > + BLE_SUPP_CMD_LE_RX_TEST | \ > + BLE_SUPP_CMD_LE_TX_TEST | \ > + BLE_SUPP_CMD_LE_TEST_END \ > +) > + > +/* Octet 33 */ > +#define BLE_SUPP_CMD_LE_REM_CONN_PRR (1 << 4) > +#define BLE_SUPP_CMD_LE_REM_CONN_PRNR (1 << 5) > +#define BLE_SUPP_CMD_LE_SET_DATALEN (0 << 6) > +#define BLE_SUPP_CMD_LE_RD_SUGG_DATALEN (0 << 7) > + > +#define BLE_LL_SUPP_CMD_OCTET_33 \ > +( \ > + BLE_SUPP_CMD_LE_REM_CONN_PRR | \ > + BLE_SUPP_CMD_LE_REM_CONN_PRNR | \ > + BLE_SUPP_CMD_LE_SET_DATALEN | \ > + BLE_SUPP_CMD_LE_RD_SUGG_DATALEN \ > +) > + > +/* Defines the array of supported commands */ > +const uint8_t g_ble_ll_supp_cmds[BLE_LL_SUPP_CMD_LEN] = > +{ > + BLE_LL_SUPP_CMD_OCTET_0, /* Octet 0 */ > + 0, > + 0, > + 0, > + 0, > + BLE_LL_SUPP_CMD_OCTET_5, > + 0, > + 0, > + 0, /* Octet 8 */ > + 0, > + BLE_LL_SUPP_CMD_OCTET_10, > + 0, > + 0, > + 0, > + BLE_LL_SUPP_CMD_OCTET_14, > + BLE_LL_SUPP_CMD_OCTET_15, > + 0, /* Octet 16 */ > + 0, > + 0, > + 0, > + 0, > + 0, > + 0, > + 0, > + 0, /* Octet 24 */ > + BLE_LL_SUPP_CMD_OCTET_25, > + BLE_LL_SUPP_CMD_OCTET_26, > + BLE_LL_SUPP_CMD_OCTET_27, > + BLE_LL_SUPP_CMD_OCTET_28, > + 0, > + 0, > + 0, > + 0, /* Octet 32 */ > + BLE_LL_SUPP_CMD_OCTET_33, > + 34, > + 35, > +}; > > http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/8a7eb7d4/net/nimble/host/include/host/host_hci.h > ---------------------------------------------------------------------- > diff --git a/net/nimble/host/include/host/host_hci.h > b/net/nimble/host/include/host/host_hci.h > index f6c0d1e..d920d18 100644 > --- a/net/nimble/host/include/host/host_hci.h > +++ b/net/nimble/host/include/host/host_hci.h > @@ -31,6 +31,8 @@ int host_hci_cmd_set_event_mask(uint64_t event_mask); > int host_hci_cmd_disconnect(uint16_t handle, uint8_t reason); > int host_hci_cmd_rd_rem_version(uint16_t handle); > int host_hci_cmd_rd_local_version(void); > +int host_hci_cmd_rd_local_feat(void); > +int host_hci_cmd_rd_local_cmd(void); > int host_hci_cmd_rd_bd_addr(void); > int host_hci_cmd_read_rssi(uint16_t handle); > int host_hci_cmd_le_set_host_chan_class(uint8_t *new_chan_map); > > http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/8a7eb7d4/net/nimble/host/src/host_dbg.c > ---------------------------------------------------------------------- > diff --git a/net/nimble/host/src/host_dbg.c b/net/nimble/host/src/host_dbg.c > index ae9dff0..e17ae4b 100644 > --- a/net/nimble/host/src/host_dbg.c > +++ b/net/nimble/host/src/host_dbg.c > @@ -26,7 +26,7 @@ > #include "nimble/hci_transport.h" > #include "ble_hs_priv.h" > > -void > +static void > host_hci_dbg_le_event_disp(uint8_t subev, uint8_t len, uint8_t *evdata) > { > int8_t rssi; > @@ -138,7 +138,7 @@ host_hci_dbg_le_event_disp(uint8_t subev, uint8_t len, > uint8_t *evdata) > * @param evdata > * @param len > */ > -void > +static void > host_hci_dbg_disconn_comp_disp(uint8_t *evdata, uint8_t len) > { > uint8_t status; > @@ -178,7 +178,7 @@ host_hci_dbg_rd_rem_ver_disp(uint8_t *evdata, uint8_t len) > * @param evdata > * @param len > */ > -void > +static void > host_hci_dbg_num_comp_pkts_disp(uint8_t *evdata, uint8_t len) > { > uint8_t handles; > @@ -211,42 +211,70 @@ host_hci_dbg_num_comp_pkts_disp(uint8_t *evdata, > uint8_t len) > } > } > > -void > +static void > +host_hci_dbg_cmd_comp_info_params(uint8_t status, uint8_t ocf, uint8_t > *evdata) > +{ > + int i; > + uint8_t *dptr; > + > + if (status != BLE_ERR_SUCCESS) { > + return; > + } > + > + switch (ocf) { > + case BLE_HCI_OCF_IP_RD_LOCAL_VER: > + BLE_HS_LOG(DEBUG, "hci_ver=%u hci_rev=%u lmp_ver=%u mfrg=%u " > + "lmp_subver=%u", > + evdata[0], le16toh(evdata + 1), evdata[3], > + le16toh(evdata + 4), le16toh(evdata + 6)); > + break; > + case BLE_HCI_OCF_IP_RD_LOC_SUPP_CMD: > + BLE_HS_LOG(DEBUG, "supp_cmds="); > + dptr = evdata; > + for (i = 0; i < 8; ++i) { > + BLE_HS_LOG(DEBUG, "%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:", > + dptr[0], dptr[1], dptr[2], dptr[3], > + dptr[4], dptr[5], dptr[6], dptr[7]); > + dptr += 8; > + } > + break; > + case BLE_HCI_OCF_IP_RD_LOC_SUPP_FEAT: > + BLE_HS_LOG(DEBUG, "supp_feat=0x%lx%08lx", > + le32toh(evdata + 4), le32toh(evdata)); > + break; > + case BLE_HCI_OCF_IP_RD_BD_ADDR: > + BLE_HS_LOG(DEBUG, "bd_addr=%x:%x:%x:%x:%x:%x", > + evdata[5], evdata[4], evdata[3], > + evdata[2], evdata[1], evdata[0]); > + break; > + default: > + break; > + } > +} > + > +static void > host_hci_dbg_cmd_complete_disp(uint8_t *evdata, uint8_t len) > { > + uint8_t cmd_pkts; > uint8_t ogf; > uint8_t ocf; > + uint8_t status; > uint16_t opcode; > > + cmd_pkts = evdata[0]; > opcode = le16toh(evdata + 1); > ogf = BLE_HCI_OGF(opcode); > ocf = BLE_HCI_OCF(opcode); > + status = evdata[3]; > > BLE_HS_LOG(DEBUG, "Command Complete: cmd_pkts=%u ogf=0x%x ocf=0x%x " > - "status=%u ", evdata[0], ogf, ocf, evdata[3]); > + "status=%u ", cmd_pkts, ogf, ocf, status); > > /* Display parameters based on command. */ > switch (ogf) { > case BLE_HCI_OGF_INFO_PARAMS: > - switch (ocf) { > - case BLE_HCI_OCF_IP_RD_LOCAL_VER: > - if (evdata[3] == BLE_ERR_SUCCESS) { > - BLE_HS_LOG(DEBUG, "hci_ver=%u hci_rev=%u lmp_ver=%u mfrg=%u " > - "lmp_subver=%u", > - evdata[4], le16toh(evdata + 5), evdata[7], > - le16toh(evdata + 8), le16toh(evdata + 10)); > - } > - break; > - case BLE_HCI_OCF_IP_RD_BD_ADDR: > - if (evdata[3] == BLE_ERR_SUCCESS) { > - BLE_HS_LOG(DEBUG, "bd_addr=%x:%x:%x:%x:%x:%x", > - evdata[9], evdata[8], evdata[7], > - evdata[6], evdata[5], evdata[4]); > - } > - break; > - default: > - break; > - } > + evdata += 4; > + host_hci_dbg_cmd_comp_info_params(status, ocf, evdata); > break; > case BLE_HCI_OGF_STATUS_PARAMS: > switch (ocf) { > @@ -271,7 +299,7 @@ host_hci_dbg_cmd_complete_disp(uint8_t *evdata, uint8_t > len) > le16toh(evdata + 8), le16toh(evdata + 10)); > break; > case BLE_HCI_OCF_LE_RD_SUPP_STATES: > - BLE_HS_LOG(DEBUG, "states=0x%lx%lx", le32toh(evdata + 8), > + BLE_HS_LOG(DEBUG, "states=0x%lx%08lx", le32toh(evdata + 8), > le32toh(evdata + 4)); > break; > default: > @@ -284,7 +312,7 @@ host_hci_dbg_cmd_complete_disp(uint8_t *evdata, uint8_t > len) > BLE_HS_LOG(DEBUG, "\n"); > } > > -void > +static void > host_hci_dbg_cmd_status_disp(uint8_t *evdata, uint8_t len) > { > uint8_t ogf; > @@ -306,9 +334,10 @@ host_hci_dbg_event_disp(uint8_t *evbuf) > uint8_t evcode; > uint8_t len; > > + /* Extract event code and length; move pointer to event parameter data */ > evcode = evbuf[0]; > len = evbuf[1]; > - evdata = evbuf + 2; > + evdata = evbuf + BLE_HCI_EVENT_HDR_LEN; > > switch (evcode) { > case BLE_HCI_EVCODE_DISCONN_CMP: > > http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/8a7eb7d4/net/nimble/host/src/host_hci_cmd.c > ---------------------------------------------------------------------- > diff --git a/net/nimble/host/src/host_hci_cmd.c > b/net/nimble/host/src/host_hci_cmd.c > index 8839c12..39f7784 100644 > --- a/net/nimble/host/src/host_hci_cmd.c > +++ b/net/nimble/host/src/host_hci_cmd.c > @@ -238,6 +238,26 @@ host_hci_cmd_rd_local_version(void) > } > > int > +host_hci_cmd_rd_local_feat(void) > +{ > + int rc; > + > + rc = host_hci_cmd_send(BLE_HCI_OGF_INFO_PARAMS, > + BLE_HCI_OCF_IP_RD_LOC_SUPP_FEAT, 0, NULL); > + return rc; > +} > + > +int > +host_hci_cmd_rd_local_cmd(void) > +{ > + int rc; > + > + rc = host_hci_cmd_send(BLE_HCI_OGF_INFO_PARAMS, > + BLE_HCI_OCF_IP_RD_LOC_SUPP_CMD, 0, NULL); > + return rc; > +} > + > +int > host_hci_cmd_rd_bd_addr(void) > { > int rc; > > http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/8a7eb7d4/net/nimble/include/nimble/hci_common.h > ---------------------------------------------------------------------- > diff --git a/net/nimble/include/nimble/hci_common.h > b/net/nimble/include/nimble/hci_common.h > index 3895ac3..331a2ed 100644 > --- a/net/nimble/include/nimble/hci_common.h > +++ b/net/nimble/include/nimble/hci_common.h > @@ -39,14 +39,13 @@ > #define BLE_HCI_OGF(opcode) (((opcode) >> 10) & 0x003F) > #define BLE_HCI_OCF(opcode) ((opcode) & 0x03FF) > > -/* Opcode Group */ > +/* Opcode Group definitions (note: 0x07 not defined in spec) */ > #define BLE_HCI_OGF_LINK_CTRL (0x01) > #define BLE_HCI_OGF_LINK_POLICY (0x02) > #define BLE_HCI_OGF_CTLR_BASEBAND (0x03) > #define BLE_HCI_OGF_INFO_PARAMS (0x04) > #define BLE_HCI_OGF_STATUS_PARAMS (0x05) > #define BLE_HCI_OGF_TESTING (0x06) > -/* NOTE: 0x07 not defined in specification */ > #define BLE_HCI_OGF_LE (0x08) > > /* > @@ -59,51 +58,19 @@ > #define BLE_HCI_OCF_DISCONNECT_CMD (0x0006) > #define BLE_HCI_OCF_RD_REM_VER_INFO (0x001D) > > -/* Command specific definitions */ > -/* Disconnect command */ > -#define BLE_HCI_DISCONNECT_CMD_LEN (3) > - > /* List of OCF for Controller and Baseband commands (OGF=0x03) */ > #define BLE_HCI_OCF_CB_SET_EVENT_MASK (0x0001) > #define BLE_HCI_OCF_CB_RESET (0x0003) > #define BLE_HCI_OCF_CB_SET_EV_FILT (0x0005) > #define BLE_HCI_OCF_CB_READ_TX_PWR (0x002D) > > -/* Command specific definitions */ > -/* Set event mask */ > -#define BLE_HCI_SET_EVENT_MASK_LEN (8) > - > /* List of OCF for Info Param commands (OGF=0x04) */ > #define BLE_HCI_OCF_IP_RD_LOCAL_VER (0x0001) > #define BLE_HCI_OCF_IP_RD_LOC_SUPP_CMD (0x0002) > +#define BLE_HCI_OCF_IP_RD_LOC_SUPP_FEAT (0x0003) > #define BLE_HCI_OCF_IP_RD_BD_ADDR (0x0009) > > -/* Command specific definitions */ > -/* NOTE: does not include status field in command complete event! */ > -#define BLE_HCI_RD_LOC_VER_INFO_RSPLEN (8) > - > -/* Bluetooth Assigned numbers for version information.*/ > -#define BLE_HCI_VER_BCS_1_0b (0) > -#define BLE_HCI_VER_BCS_1_1 (1) > -#define BLE_HCI_VER_BCS_1_2 (2) > -#define BLE_HCI_VER_BCS_2_0_EDR (3) > -#define BLE_HCI_VER_BCS_2_1_EDR (4) > -#define BLE_HCI_VER_BCS_3_0_HCS (5) > -#define BLE_HCI_VER_BCS_4_0 (6) > -#define BLE_HCI_VER_BCS_4_1 (7) > -#define BLE_HCI_VER_BCS_4_2 (8) > - > -#define BLE_LMP_VER_BCS_1_0b (0) > -#define BLE_LMP_VER_BCS_1_1 (1) > -#define BLE_LMP_VER_BCS_1_2 (2) > -#define BLE_LMP_VER_BCS_2_0_EDR (3) > -#define BLE_LMP_VER_BCS_2_1_EDR (4) > -#define BLE_LMP_VER_BCS_3_0_HCS (5) > -#define BLE_LMP_VER_BCS_4_0 (6) > -#define BLE_LMP_VER_BCS_4_1 (7) > -#define BLE_LMP_VER_BCS_4_2 (8) > - > -/* List of OCD for Status parameters commands (OGF = 0x05) */ > +/* List of OCF for Status parameters commands (OGF = 0x05) */ > #define BLE_HCI_OCF_RD_RSSI (0x0005) > > /* List of OCF for LE commands (OGF = 0x08) */ > @@ -156,21 +123,32 @@ > #define BLE_HCI_OCF_LE_RD_MAX_DATA_LEN (0x002F) > > /* Command Specific Definitions */ > +/* --- Disconnect command (OGF 0x01, OCF 0x0006) --- */ > +#define BLE_HCI_DISCONNECT_CMD_LEN (3) > + > +/* --- Set event mask (OGF 0x03, OCF 0x0001 --- */ > +#define BLE_HCI_SET_EVENT_MASK_LEN (8) > + > +/* --- Read local version information (OGF 0x04, OCF 0x0001) --- */ > +/* NOTE: does not include status field in command complete event! */ > +#define BLE_HCI_RD_LOC_VER_INFO_RSPLEN (8) > +#define BLE_HCI_RD_LOC_SUPP_CMD_RSPLEN (64) > + > /* --- Read RSSI (OGF 0x05, OCF 0x0005) --- */ > -#define BLE_HCI_READ_RSSI_ACK_PARAM_LEN (4) /* Includes status byte. */ > +#define BLE_HCI_READ_RSSI_ACK_PARAM_LEN (4) /* Includes status byte. */ > > /* --- LE set event mask (OCF 0x0001) --- */ > -#define BLE_HCI_SET_LE_EVENT_MASK_LEN (8) > +#define BLE_HCI_SET_LE_EVENT_MASK_LEN (8) > > /* --- LE read buffer size (OCF 0x0002) --- */ > -#define BLE_HCI_RD_BUF_SIZE_LEN (0) > -#define BLE_HCI_RD_BUF_SIZE_RSPLEN (3) > +#define BLE_HCI_RD_BUF_SIZE_LEN (0) > +#define BLE_HCI_RD_BUF_SIZE_RSPLEN (3) > > /* --- LE read local supported features (OCF 0x0003) --- */ > -#define BLE_HCI_RD_LOC_SUPP_FEAT_RSPLEN (8) > +#define BLE_HCI_RD_LOC_SUPP_FEAT_RSPLEN (8) > > /* --- LE set advertising parameters (OCF 0x0006) */ > -#define BLE_HCI_SET_ADV_PARAM_LEN (15) > +#define BLE_HCI_SET_ADV_PARAM_LEN (15) > > /* Advertising types */ > #define BLE_HCI_ADV_TYPE_ADV_IND (0) > @@ -181,11 +159,11 @@ > #define BLE_HCI_ADV_TYPE_MAX (4) > > /* Own address types */ > -#define BLE_HCI_ADV_OWN_ADDR_PUBLIC (0) > -#define BLE_HCI_ADV_OWN_ADDR_RANDOM (1) > -#define BLE_HCI_ADV_OWN_ADDR_PRIV_PUB (2) > -#define BLE_HCI_ADV_OWN_ADDR_PRIV_RAND (3) > -#define BLE_HCI_ADV_OWN_ADDR_MAX (3) > +#define BLE_HCI_ADV_OWN_ADDR_PUBLIC (0) > +#define BLE_HCI_ADV_OWN_ADDR_RANDOM (1) > +#define BLE_HCI_ADV_OWN_ADDR_PRIV_PUB (2) > +#define BLE_HCI_ADV_OWN_ADDR_PRIV_RAND (3) > +#define BLE_HCI_ADV_OWN_ADDR_MAX (3) > > /* Advertisement peer address Type */ > #define BLE_HCI_ADV_PEER_ADDR_PUBLIC (0) > @@ -198,16 +176,16 @@ > #define BLE_HCI_ADV_CHAN_TXPWR_MAX (10) > > /* --- LE set advertising data (OCF 0x0008) */ > -#define BLE_HCI_MAX_ADV_DATA_LEN (31) > +#define BLE_HCI_MAX_ADV_DATA_LEN (31) > > /* --- LE set scan response data (OCF 0x0009) */ > -#define BLE_HCI_MAX_SCAN_RSP_DATA_LEN (31) > +#define BLE_HCI_MAX_SCAN_RSP_DATA_LEN (31) > > /* --- LE set advertising enable (OCF 0x000a) */ > -#define BLE_HCI_SET_ADV_ENABLE_LEN (1) > +#define BLE_HCI_SET_ADV_ENABLE_LEN (1) > > /* --- LE set scan enable (OCF 0x000c) */ > -#define BLE_HCI_SET_SCAN_ENABLE_LEN (2) > +#define BLE_HCI_SET_SCAN_ENABLE_LEN (2) > > /* Connect peer address type */ > #define BLE_HCI_CONN_PEER_ADDR_PUBLIC (0) > @@ -474,6 +452,27 @@ > /* LE data length change event (sub event 0x07) */ > #define BLE_HCI_LE_DATA_LEN_CHG_LEN (11) > > +/* Bluetooth Assigned numbers for version information.*/ > +#define BLE_HCI_VER_BCS_1_0b (0) > +#define BLE_HCI_VER_BCS_1_1 (1) > +#define BLE_HCI_VER_BCS_1_2 (2) > +#define BLE_HCI_VER_BCS_2_0_EDR (3) > +#define BLE_HCI_VER_BCS_2_1_EDR (4) > +#define BLE_HCI_VER_BCS_3_0_HCS (5) > +#define BLE_HCI_VER_BCS_4_0 (6) > +#define BLE_HCI_VER_BCS_4_1 (7) > +#define BLE_HCI_VER_BCS_4_2 (8) > + > +#define BLE_LMP_VER_BCS_1_0b (0) > +#define BLE_LMP_VER_BCS_1_1 (1) > +#define BLE_LMP_VER_BCS_1_2 (2) > +#define BLE_LMP_VER_BCS_2_0_EDR (3) > +#define BLE_LMP_VER_BCS_2_1_EDR (4) > +#define BLE_LMP_VER_BCS_3_0_HCS (5) > +#define BLE_LMP_VER_BCS_4_0 (6) > +#define BLE_LMP_VER_BCS_4_1 (7) > +#define BLE_LMP_VER_BCS_4_2 (8) > + > /*--- Shared data structures ---*/ > /* Read local version information (OGF=0x0004, OCF=0x0001) */ > struct hci_loc_ver_info >