You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by an...@apache.org on 2017/04/07 08:49:30 UTC

[1/6] incubator-mynewt-core git commit: nimble: Add defines for all Bluetooth 5.0 HCI commands and events

Repository: incubator-mynewt-core
Updated Branches:
  refs/heads/bluetooth5 aa7a27459 -> 646b35dfa


nimble: Add defines for all Bluetooth 5.0 HCI commands and events


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/0c627e2b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/0c627e2b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/0c627e2b

Branch: refs/heads/bluetooth5
Commit: 0c627e2bc01ec1d9d32cc706c2cbd61e600147d3
Parents: aa7a274
Author: \u0141ukasz Rymanowski <lu...@codecoup.pl>
Authored: Tue Apr 4 10:39:58 2017 +0200
Committer: \u0141ukasz Rymanowski <lu...@codecoup.pl>
Committed: Wed Apr 5 16:00:06 2017 +0200

----------------------------------------------------------------------
 net/nimble/controller/src/ble_ll_hci.c |   2 +-
 net/nimble/include/nimble/hci_common.h | 228 +++++++++++++++++++++-------
 net/nimble/src/hci_common.c            |  35 ++++-
 3 files changed, 204 insertions(+), 61 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/0c627e2b/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 83d99a7..844060a 100644
--- a/net/nimble/controller/src/ble_ll_hci.c
+++ b/net/nimble/controller/src/ble_ll_hci.c
@@ -619,7 +619,7 @@ ble_ll_hci_le_cmd_proc(uint8_t *cmdbuf, uint16_t ocf, uint8_t *rsplen)
 
     /* Check the length to make sure it is valid */
     cmdlen = g_ble_hci_le_cmd_len[ocf];
-    if (len != cmdlen) {
+    if (len != cmdlen && cmdlen != BLE_HCI_VARIABLE_LEN) {
         goto ll_hci_le_cmd_exit;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/0c627e2b/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 6e80d49..d565a74 100644
--- a/net/nimble/include/nimble/hci_common.h
+++ b/net/nimble/include/nimble/hci_common.h
@@ -57,7 +57,7 @@ extern "C" {
  * Number of LE commands. NOTE: this is really just used to size the array
  * containing the lengths of the LE commands.
  */
-#define BLE_HCI_NUM_LE_CMDS                 (48)
+#define BLE_HCI_NUM_LE_CMDS                 (79)
 
 /* List of OCF for Link Control commands (OGF=0x01) */
 #define BLE_HCI_OCF_DISCONNECT_CMD          (0x0006)
@@ -81,55 +81,89 @@ extern "C" {
 #define BLE_HCI_OCF_RD_RSSI                 (0x0005)
 
 /* List of OCF for LE commands (OGF = 0x08) */
-#define BLE_HCI_OCF_LE_SET_EVENT_MASK       (0x0001)
-#define BLE_HCI_OCF_LE_RD_BUF_SIZE          (0x0002)
-#define BLE_HCI_OCF_LE_RD_LOC_SUPP_FEAT     (0x0003)
+#define BLE_HCI_OCF_LE_SET_EVENT_MASK               (0x0001)
+#define BLE_HCI_OCF_LE_RD_BUF_SIZE                  (0x0002)
+#define BLE_HCI_OCF_LE_RD_LOC_SUPP_FEAT             (0x0003)
 /* NOTE: 0x0004 is intentionally left undefined */
-#define BLE_HCI_OCF_LE_SET_RAND_ADDR        (0x0005)
-#define BLE_HCI_OCF_LE_SET_ADV_PARAMS       (0x0006)
-#define BLE_HCI_OCF_LE_RD_ADV_CHAN_TXPWR    (0x0007)
-#define BLE_HCI_OCF_LE_SET_ADV_DATA         (0x0008)
-#define BLE_HCI_OCF_LE_SET_SCAN_RSP_DATA    (0x0009)
-#define BLE_HCI_OCF_LE_SET_ADV_ENABLE       (0x000A)
-#define BLE_HCI_OCF_LE_SET_SCAN_PARAMS      (0x000B)
-#define BLE_HCI_OCF_LE_SET_SCAN_ENABLE      (0x000C)
-#define BLE_HCI_OCF_LE_CREATE_CONN          (0x000D)
-#define BLE_HCI_OCF_LE_CREATE_CONN_CANCEL   (0x000E)
-#define BLE_HCI_OCF_LE_RD_WHITE_LIST_SIZE   (0x000F)
-#define BLE_HCI_OCF_LE_CLEAR_WHITE_LIST     (0x0010)
-#define BLE_HCI_OCF_LE_ADD_WHITE_LIST       (0x0011)
-#define BLE_HCI_OCF_LE_RMV_WHITE_LIST       (0x0012)
-#define BLE_HCI_OCF_LE_CONN_UPDATE          (0x0013)
-#define BLE_HCI_OCF_LE_SET_HOST_CHAN_CLASS  (0x0014)
-#define BLE_HCI_OCF_LE_RD_CHAN_MAP          (0x0015)
-#define BLE_HCI_OCF_LE_RD_REM_FEAT          (0x0016)
-#define BLE_HCI_OCF_LE_ENCRYPT              (0x0017)
-#define BLE_HCI_OCF_LE_RAND                 (0x0018)
-#define BLE_HCI_OCF_LE_START_ENCRYPT        (0x0019)
-#define BLE_HCI_OCF_LE_LT_KEY_REQ_REPLY     (0x001A)
-#define BLE_HCI_OCF_LE_LT_KEY_REQ_NEG_REPLY (0x001B)
-#define BLE_HCI_OCF_LE_RD_SUPP_STATES       (0x001C)
-#define BLE_HCI_OCF_LE_RX_TEST              (0x001D)
-#define BLE_HCI_OCF_LE_TX_TEST              (0x001E)
-#define BLE_HCI_OCF_LE_TEST_END             (0x001F)
-#define BLE_HCI_OCF_LE_REM_CONN_PARAM_RR    (0x0020)
-#define BLE_HCI_OCF_LE_REM_CONN_PARAM_NRR   (0x0021)
-#define BLE_HCI_OCF_LE_SET_DATA_LEN         (0x0022)
-#define BLE_HCI_OCF_LE_RD_SUGG_DEF_DATA_LEN (0x0023)
-#define BLE_HCI_OCF_LE_WR_SUGG_DEF_DATA_LEN (0x0024)
-#define BLE_HCI_OCF_LE_RD_P256_PUBKEY       (0x0025)
-#define BLE_HCI_OCF_LE_GEN_DHKEY            (0x0026)
-#define BLE_HCI_OCF_LE_ADD_RESOLV_LIST      (0x0027)
-#define BLE_HCI_OCF_LE_RMV_RESOLV_LIST      (0x0028)
-#define BLE_HCI_OCF_LE_CLR_RESOLV_LIST      (0x0029)
-#define BLE_HCI_OCF_LE_RD_RESOLV_LIST_SIZE  (0x002A)
-#define BLE_HCI_OCF_LE_RD_PEER_RESOLV_ADDR  (0x002B)
-#define BLE_HCI_OCF_LE_RD_LOCAL_RESOLV_ADDR (0x002C)
-#define BLE_HCI_OCF_LE_SET_ADDR_RES_EN      (0x002D)
-#define BLE_HCI_OCF_LE_SET_RPA_TMO          (0x002E)
-#define BLE_HCI_OCF_LE_RD_MAX_DATA_LEN      (0x002F)
+#define BLE_HCI_OCF_LE_SET_RAND_ADDR                (0x0005)
+#define BLE_HCI_OCF_LE_SET_ADV_PARAMS               (0x0006)
+#define BLE_HCI_OCF_LE_RD_ADV_CHAN_TXPWR            (0x0007)
+#define BLE_HCI_OCF_LE_SET_ADV_DATA                 (0x0008)
+#define BLE_HCI_OCF_LE_SET_SCAN_RSP_DATA            (0x0009)
+#define BLE_HCI_OCF_LE_SET_ADV_ENABLE               (0x000A)
+#define BLE_HCI_OCF_LE_SET_SCAN_PARAMS              (0x000B)
+#define BLE_HCI_OCF_LE_SET_SCAN_ENABLE              (0x000C)
+#define BLE_HCI_OCF_LE_CREATE_CONN                  (0x000D)
+#define BLE_HCI_OCF_LE_CREATE_CONN_CANCEL           (0x000E)
+#define BLE_HCI_OCF_LE_RD_WHITE_LIST_SIZE           (0x000F)
+#define BLE_HCI_OCF_LE_CLEAR_WHITE_LIST             (0x0010)
+#define BLE_HCI_OCF_LE_ADD_WHITE_LIST               (0x0011)
+#define BLE_HCI_OCF_LE_RMV_WHITE_LIST               (0x0012)
+#define BLE_HCI_OCF_LE_CONN_UPDATE                  (0x0013)
+#define BLE_HCI_OCF_LE_SET_HOST_CHAN_CLASS          (0x0014)
+#define BLE_HCI_OCF_LE_RD_CHAN_MAP                  (0x0015)
+#define BLE_HCI_OCF_LE_RD_REM_FEAT                  (0x0016)
+#define BLE_HCI_OCF_LE_ENCRYPT                      (0x0017)
+#define BLE_HCI_OCF_LE_RAND                         (0x0018)
+#define BLE_HCI_OCF_LE_START_ENCRYPT                (0x0019)
+#define BLE_HCI_OCF_LE_LT_KEY_REQ_REPLY             (0x001A)
+#define BLE_HCI_OCF_LE_LT_KEY_REQ_NEG_REPLY         (0x001B)
+#define BLE_HCI_OCF_LE_RD_SUPP_STATES               (0x001C)
+#define BLE_HCI_OCF_LE_RX_TEST                      (0x001D)
+#define BLE_HCI_OCF_LE_TX_TEST                      (0x001E)
+#define BLE_HCI_OCF_LE_TEST_END                     (0x001F)
+#define BLE_HCI_OCF_LE_REM_CONN_PARAM_RR            (0x0020)
+#define BLE_HCI_OCF_LE_REM_CONN_PARAM_NRR           (0x0021)
+#define BLE_HCI_OCF_LE_SET_DATA_LEN                 (0x0022)
+#define BLE_HCI_OCF_LE_RD_SUGG_DEF_DATA_LEN         (0x0023)
+#define BLE_HCI_OCF_LE_WR_SUGG_DEF_DATA_LEN         (0x0024)
+#define BLE_HCI_OCF_LE_RD_P256_PUBKEY               (0x0025)
+#define BLE_HCI_OCF_LE_GEN_DHKEY                    (0x0026)
+#define BLE_HCI_OCF_LE_ADD_RESOLV_LIST              (0x0027)
+#define BLE_HCI_OCF_LE_RMV_RESOLV_LIST              (0x0028)
+#define BLE_HCI_OCF_LE_CLR_RESOLV_LIST              (0x0029)
+#define BLE_HCI_OCF_LE_RD_RESOLV_LIST_SIZE          (0x002A)
+#define BLE_HCI_OCF_LE_RD_PEER_RESOLV_ADDR          (0x002B)
+#define BLE_HCI_OCF_LE_RD_LOCAL_RESOLV_ADDR         (0x002C)
+#define BLE_HCI_OCF_LE_SET_ADDR_RES_EN              (0x002D)
+#define BLE_HCI_OCF_LE_SET_RPA_TMO                  (0x002E)
+#define BLE_HCI_OCF_LE_RD_MAX_DATA_LEN              (0x002F)
+#define BLE_HCI_OCF_LE_RD_PHY                       (0x0030)
+#define BLE_HCI_OCF_LE_SET_DEFAULT_PHY              (0x0031)
+#define BLE_HCI_OCF_LE_SET_PHY                      (0x0032)
+#define BLE_HCI_OCF_LE_ENH_RCVR_TEST                (0x0033)
+#define BLE_HCI_OCF_LE_ENH_TRANS_TEST               (0x0034)
+#define BLE_HCI_OCF_LE_SET_ADV_SET_RND_ADDR         (0x0035)
+#define BLE_HCI_OCF_LE_SET_EXT_ADV_PARAM            (0x0036)
+#define BLE_HCI_OCF_LE_SET_EXT_ADV_DATA             (0x0037)
+#define BLE_HCI_OCF_LE_SET_EXT_SCAN_RSP_DATA        (0x0038)
+#define BLE_HCI_OCF_LE_SET_EXT_ADV_ENABLE           (0x0039)
+#define BLE_HCI_OCF_LE_RD_MAX_ADV_DATA_LEN          (0x003A)
+#define BLE_HCI_OCF_LE_RD_NUM_OF_ADV_SETS           (0x003B)
+#define BLE_HCI_OCF_LE_REMOVE_ADV_SET               (0x003C)
+#define BLE_HCI_OCF_LE_CLEAR_ADV_SETS               (0x003D)
+#define BLE_HCI_OCF_LE_SET_PER_ADV_PARAMS           (0x003E)
+#define BLE_HCI_OCF_LE_SET_PER_ADV_DATA             (0x003F)
+#define BLE_HCI_OCF_LE_SET_PER_ADV_ENABLE           (0x0040)
+#define BLE_HCI_OCF_LE_SET_EXT_SCAN_PARAM           (0x0041)
+#define BLE_HCI_OCF_LE_SET_EXT_SCAN_ENABLE          (0x0042)
+#define BLE_HCI_OCF_LE_EXT_CREATE_CONN              (0x0043)
+#define BLE_HCI_OCF_LE_PER_ADV_CREATE_SYNC          (0x0044)
+#define BLE_HCI_OCF_LE_PER_ADV_CREATE_SYNC_CANCEL   (0x0045)
+#define BLE_HCI_OCF_LE_PER_ADV_TERM_SYNC            (0x0046)
+#define BLE_HCI_OCF_LE_ADD_DEV_TO_PER_ADV_LIST      (0x0047)
+#define BLE_HCI_OCF_LE_REM_DEV_FROM_PER_ADV_LIST    (0x0048)
+#define BLE_HCI_OCF_LE_CLEAR_PER_ADV_LIST           (0x0049)
+#define BLE_HCI_OCF_LE_RD_PER_ADV_LIST_SIZE         (0x004A)
+#define BLE_HCI_OCF_LE_RD_TRANSMIT_POWER            (0x004B)
+#define BLE_HCI_OCF_LE_RD_RF_PATH_COMPENSATION      (0x004C)
+#define BLE_HCI_OCF_LE_WR_RF_PATH_COMPENSATION      (0x004D)
+#define BLE_HCI_OCF_LE_SET_PRIVACY_MODE             (0x004E)
 
 /* Command Specific Definitions */
+
+#define BLE_HCI_VARIABLE_LEN                (0xFF)
+
 /* --- Disconnect command (OGF 0x01, OCF 0x0006) --- */
 #define BLE_HCI_DISCONNECT_CMD_LEN          (3)
 
@@ -383,6 +417,75 @@ extern "C" {
 /* --- LE read maximum data length (OCF 0x002F) */
 #define BLE_HCI_RD_MAX_DATALEN_RSPLEN       (8)
 
+/* --- LE read maximum default PHY (OCF 0x0030) */
+#define BLE_HCI_LE_RD_PHY_LEN                       (2)
+
+/* --- LE set default PHY (OCF 0x0031) */
+#define BLE_HCI_LE_SET_DEFAULT_PHY_LEN              (3)
+
+/* --- LE set PHY (OCF 0x0032) */
+#define BLE_HCI_LE_SET_PHY_LEN                      (7)
+
+/* --- LE enhanced receiver test (OCF 0x0033) */
+#define BLE_HCI_LE_ENH_RCVR_TEST_LEN                (3)
+
+/* --- LE enhanced transmitter test (OCF 0x0034) */
+#define BLE_HCI_LE_ENH_TRANS_TEST_LEN               (4)
+
+/* --- LE set advertising set random address (OCF 0x0035) */
+#define BLE_HCI_LE_SET_ADV_SET_RND_ADDR_LEN         (7)
+
+/* --- LE set extended advertising parameters (OCF 0x0036) */
+#define BLE_HCI_LE_SET_EXT_ADV_PARAM_LEN            (25)
+
+/* --- LE set extended advertising data (OCF 0x0037) */
+#define BLE_HCI_LE_SET_EXT_ADV_DATA_LEN             BLE_HCI_VARIABLE_LEN
+
+/* --- LE set extended scan response data (OCF 0x0038) */
+#define BLE_HCI_LE_SET_EXT_SCAN_RSP_DATA_LEN        BLE_HCI_VARIABLE_LEN
+
+/* --- LE set extended advertising enable (OCF 0x0039) */
+#define BLE_HCI_LE_SET_EXT_ADV_ENABLE_LEN           BLE_HCI_VARIABLE_LEN
+
+/* --- LE remove advertising set (OCF 0x003C) */
+#define BLE_HCI_LE_REMOVE_ADV_SET_LEN               (1)
+
+/* --- LE set periodic advertising parameters (OCF 0x003E) */
+#define BLE_HCI_LE_SET_PER_ADV_PARAMS_LEN           (7)
+
+/* --- LE set periodic advertising data (OCF 0x003F) */
+#define BLE_HCI_LE_SET_PER_ADV_DATA_LEN             BLE_HCI_VARIABLE_LEN
+
+/* --- LE periodic advertising enable (OCF 0x0040) */
+#define BLE_HCI_LE_SET_PER_ADV_ENABLE_LEN           (2)
+
+/* --- LE set extended scan parameters (OCF 0x0041) */
+#define BLE_HCI_LE_SET_EXT_SCAN_PARAM_LEN           BLE_HCI_VARIABLE_LEN
+
+/* --- LE set extended scan enable (OCF 0x0042) */
+#define BLE_HCI_LE_SET_EXT_SCAN_ENABLE_LEN          (6)
+
+/* --- LE extended create connection (OCF 0x0043) */
+#define BLE_HCI_LE_EXT_CREATE_CONN_LEN              BLE_HCI_VARIABLE_LEN
+
+/* --- LE periodic advertising create sync (OCF 0x0044) */
+#define BLE_HCI_LE_PER_ADV_CREATE_SYNC_LEN          (14)
+
+/* --- LE periodic advertising terminate (OCF 0x0046) */
+#define BLE_HCI_LE_PER_ADV_TERM_SYNC_LEN            (2)
+
+/* --- LE add device to periodic advertising list (OCF 0x0047) */
+#define BLE_HCI_LE_ADD_DEV_TO_PER_ADV_LIST_LEN      (8)
+
+/* --- LE remove device from periodic advertising list (OCF 0x0048) */
+#define BLE_HCI_LE_REM_DEV_FROM_PER_ADV_LIST_LEN    (8)
+
+/* --- LE write RF path (OCF 0x004D) */
+#define BLE_HCI_LE_WR_RF_PATH_COMPENSATION_LEN      (4)
+
+/* --- LE set privacy mode (OCF 0x004E) */
+#define BLE_HCI_LE_SET_PRIVACY_MODE_LEN             (8)
+
 /* Event Codes */
 #define BLE_HCI_EVCODE_INQUIRY_CMP          (0x01)
 #define BLE_HCI_EVCODE_INQUIRY_RESULT       (0x02)
@@ -463,17 +566,26 @@ extern "C" {
 #define BLE_HCI_EVCODE_AUTH_PYLD_TMO        (0x57)
 
 /* LE sub-event codes */
-#define BLE_HCI_LE_SUBEV_CONN_COMPLETE      (0x01)
-#define BLE_HCI_LE_SUBEV_ADV_RPT            (0x02)
-#define BLE_HCI_LE_SUBEV_CONN_UPD_COMPLETE  (0x03)
-#define BLE_HCI_LE_SUBEV_RD_REM_USED_FEAT   (0x04)
-#define BLE_HCI_LE_SUBEV_LT_KEY_REQ         (0x05)
-#define BLE_HCI_LE_SUBEV_REM_CONN_PARM_REQ  (0x06)
-#define BLE_HCI_LE_SUBEV_DATA_LEN_CHG       (0x07)
-#define BLE_HCI_LE_SUBEV_RD_LOC_P256_PUBKEY (0x08)
-#define BLE_HCI_LE_SUBEV_GEN_DHKEY_COMPLETE (0x09)
-#define BLE_HCI_LE_SUBEV_ENH_CONN_COMPLETE  (0x0A)
-#define BLE_HCI_LE_SUBEV_DIRECT_ADV_RPT     (0x0B)
+#define BLE_HCI_LE_SUBEV_CONN_COMPLETE          (0x01)
+#define BLE_HCI_LE_SUBEV_ADV_RPT                (0x02)
+#define BLE_HCI_LE_SUBEV_CONN_UPD_COMPLETE      (0x03)
+#define BLE_HCI_LE_SUBEV_RD_REM_USED_FEAT       (0x04)
+#define BLE_HCI_LE_SUBEV_LT_KEY_REQ             (0x05)
+#define BLE_HCI_LE_SUBEV_REM_CONN_PARM_REQ      (0x06)
+#define BLE_HCI_LE_SUBEV_DATA_LEN_CHG           (0x07)
+#define BLE_HCI_LE_SUBEV_RD_LOC_P256_PUBKEY     (0x08)
+#define BLE_HCI_LE_SUBEV_GEN_DHKEY_COMPLETE     (0x09)
+#define BLE_HCI_LE_SUBEV_ENH_CONN_COMPLETE      (0x0A)
+#define BLE_HCI_LE_SUBEV_DIRECT_ADV_RPT         (0x0B)
+#define BLE_HCI_LE_SUBEV_PHY_UPDATE_COMPLETE    (0x0C)
+#define BLE_HCI_LE_SUBEV_EXT_ADV_RPT            (0x0D)
+#define BLE_HCI_LE_SUBEV_PER_ADV_SYNC_ESTAB     (0x0E)
+#define BLE_HCI_LE_SUBEV_PER_ADV_RPT            (0x0F)
+#define BLE_HCI_LE_SUBEV_PER_ADV_SYNC_LOST      (0x10)
+#define BLE_HCI_LE_SUBEV_SCAN_TIMEOUT           (0x11)
+#define BLE_HCI_LE_SUBEV_ADV_SET_TERMINATED     (0x12)
+#define BLE_HCI_LE_SUBEV_SCAN_REQ_RCVD          (0x13)
+#define BLE_HCI_LE_SUBEV_CHAN_SEL_ALG           (0x14)
 
 /* Generic event header */
 #define BLE_HCI_EVENT_HDR_LEN               (2)

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/0c627e2b/net/nimble/src/hci_common.c
----------------------------------------------------------------------
diff --git a/net/nimble/src/hci_common.c b/net/nimble/src/hci_common.c
index 527efd9..a092714 100644
--- a/net/nimble/src/hci_common.c
+++ b/net/nimble/src/hci_common.c
@@ -73,6 +73,37 @@ const uint8_t g_ble_hci_le_cmd_len[BLE_HCI_NUM_LE_CMDS] =
     BLE_HCI_RD_PEER_RESOLV_ADDR_LEN,    /* 0x002B: read peer resolvable addr */
     BLE_HCI_RD_LOC_RESOLV_ADDR_LEN,     /* 0x002C: read local resolvable addr */
     sizeof(uint8_t),                    /* 0x002D: set addr resolution enable */
-    sizeof(uint16_t),                   /* 0x002E: Set resolv priv addr tmo */
-    0,                                  /* 0x002F: Read max data length */
+    sizeof(uint16_t),                   /* 0x002E: set resolv priv addr tmo */
+    0,                                  /* 0x002F: read max data length */
+    BLE_HCI_LE_RD_PHY_LEN,              /* 0x0030: read maximum default PHY */
+    BLE_HCI_LE_SET_DEFAULT_PHY_LEN,     /* 0x0031: set default PHY */
+    BLE_HCI_LE_SET_PHY_LEN,             /* 0x0032: set PHY */
+    BLE_HCI_LE_ENH_RCVR_TEST_LEN,       /* 0x0033: enhanced receiver test */
+    BLE_HCI_LE_ENH_TRANS_TEST_LEN,      /* 0x0034: enhanced transmitter test */
+    BLE_HCI_LE_SET_ADV_SET_RND_ADDR_LEN,/* 0x0035: set adv. set random address */
+    BLE_HCI_LE_SET_EXT_ADV_PARAM_LEN,   /* 0x0036: set ext. adv params */
+    BLE_HCI_LE_SET_EXT_ADV_DATA_LEN,    /* 0x0037: set ext. adv. data */
+    BLE_HCI_LE_SET_EXT_SCAN_RSP_DATA_LEN,/* 0x0038: set ext. scan resp. data */
+    BLE_HCI_LE_SET_EXT_ADV_ENABLE_LEN,  /* 0x0039: set ext. adv. enable */
+    0,                                  /* 0x003A: read max adv. data len */
+    0,                                  /* 0x003B: read number of sup. adv. sets */
+    BLE_HCI_LE_REMOVE_ADV_SET_LEN,      /* 0x003C: remove adv. set */
+    0,                                  /* 0x003D: clear advertising sets */
+    BLE_HCI_LE_SET_PER_ADV_PARAMS_LEN,  /* 0x003E: set periodic adv. param. */
+    BLE_HCI_LE_SET_PER_ADV_DATA_LEN,    /* 0x003F: set periodic adv. data */
+    BLE_HCI_LE_SET_PER_ADV_ENABLE_LEN,  /* 0x0040: periodic adv. enable */
+    BLE_HCI_LE_SET_EXT_SCAN_PARAM_LEN,  /* 0x0041: set ext. scan param. */
+    BLE_HCI_LE_SET_EXT_SCAN_ENABLE_LEN, /* 0x0042: set ext. scan enable */
+    BLE_HCI_LE_EXT_CREATE_CONN_LEN,     /* 0x0043: ext. create connection */
+    BLE_HCI_LE_PER_ADV_CREATE_SYNC_LEN, /* 0x0044: periodic adv. create sync */
+    0,                                  /* 0x0045: periodic adv. create sync cancel */
+    0,                                  /* 0x0046: periodic adv. terminate sync */
+    BLE_HCI_LE_ADD_DEV_TO_PER_ADV_LIST_LEN,  /* 0x0047: add dev to per. adv. list */
+    BLE_HCI_LE_REM_DEV_FROM_PER_ADV_LIST_LEN,/* 0x0048: remove dev from per. adv. list */
+    0,                                  /* 0x0049: clear periodic adv. list */
+    0,                                  /* 0x004A: read periodic list size */
+    0,                                  /* 0x004B: read transmit power */
+    0,                                  /* 0x004C: read RF path */
+    BLE_HCI_LE_WR_RF_PATH_COMPENSATION_LEN, /* 0x004D: write RF path */
+    BLE_HCI_LE_SET_PRIVACY_MODE_LEN,    /* 0x004E: set privacy mode */
 };


[2/6] incubator-mynewt-core git commit: nimble/controller: Add support for handling privacy modes

Posted by an...@apache.org.
nimble/controller: Add support for handling privacy modes

With this patch nimble controller supports network and device
privacy mode as per Bluetooth 5.0 Vol 6, Part B, chapter 4.7

Host can set privacy mode using LE set privacy mode command.


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/ac7b489a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/ac7b489a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/ac7b489a

Branch: refs/heads/bluetooth5
Commit: ac7b489a693accf3abe98628a9395e13f69f2c71
Parents: 0c627e2
Author: \u0141ukasz Rymanowski <lu...@codecoup.pl>
Authored: Wed Apr 5 15:33:30 2017 +0200
Committer: \u0141ukasz Rymanowski <lu...@codecoup.pl>
Committed: Thu Apr 6 09:42:07 2017 +0200

----------------------------------------------------------------------
 .../include/controller/ble_ll_resolv.h          |  6 +++-
 net/nimble/controller/src/ble_ll_conn.c         | 25 ++++++++++++++--
 net/nimble/controller/src/ble_ll_hci.c          |  3 ++
 net/nimble/controller/src/ble_ll_resolv.c       | 31 ++++++++++++++++++++
 net/nimble/include/nimble/hci_common.h          |  2 ++
 5 files changed, 63 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ac7b489a/net/nimble/controller/include/controller/ble_ll_resolv.h
----------------------------------------------------------------------
diff --git a/net/nimble/controller/include/controller/ble_ll_resolv.h b/net/nimble/controller/include/controller/ble_ll_resolv.h
index e06c7db..6c09bee 100644
--- a/net/nimble/controller/include/controller/ble_ll_resolv.h
+++ b/net/nimble/controller/include/controller/ble_ll_resolv.h
@@ -34,7 +34,8 @@ struct ble_ll_resolv_entry
 {
     uint8_t rl_addr_type;
     uint8_t rl_local_rpa_set;
-    uint16_t rl_reserved;
+    uint8_t rl_reserved;
+    uint8_t rl_priv_mode;
     uint8_t rl_local_irk[16];
     uint8_t rl_peer_irk[16];
     uint8_t rl_identity_addr[BLE_DEV_ADDR_LEN];
@@ -85,6 +86,9 @@ int ble_ll_resolv_gen_rpa(uint8_t *addr, uint8_t addr_type, uint8_t *rpa,
 /* Set the resolvable private address timeout */
 int ble_ll_resolv_set_rpa_tmo(uint8_t *cmdbuf);
 
+/* Set the privacy mode */
+int ble_ll_resolve_set_priv_mode(uint8_t *cmdbuf);
+
 /* Get the RPA timeout, in seconds */
 uint32_t ble_ll_resolv_get_rpa_tmo(void);
 

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ac7b489a/net/nimble/controller/src/ble_ll_conn.c
----------------------------------------------------------------------
diff --git a/net/nimble/controller/src/ble_ll_conn.c b/net/nimble/controller/src/ble_ll_conn.c
index 8d3173b..2d4c099 100644
--- a/net/nimble/controller/src/ble_ll_conn.c
+++ b/net/nimble/controller/src/ble_ll_conn.c
@@ -2446,6 +2446,9 @@ ble_ll_init_rx_isr_end(uint8_t *rxbuf, uint8_t crcok,
     uint8_t inita_is_rpa;
     struct os_mbuf *rxpdu;
     struct ble_ll_conn_sm *connsm;
+#if MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_PRIVACY)
+    struct ble_ll_resolv_entry *rl;
+#endif
 
     /* Get connection state machine to use if connection to be established */
     connsm = g_ble_ll_conn_create_sm;
@@ -2469,7 +2472,6 @@ ble_ll_init_rx_isr_end(uint8_t *rxbuf, uint8_t crcok,
         chk_send_req = 1;
         break;
     case BLE_ADV_PDU_TYPE_ADV_DIRECT_IND:
-        /* XXX: needs to be fixed for privacy */
         chk_send_req = 0;
         init_addr = rxbuf + BLE_LL_PDU_HDR_LEN + BLE_DEV_ADDR_LEN;
         addr_type = rxbuf[0] & BLE_ADV_PDU_HDR_RXADD_MASK;
@@ -2519,16 +2521,33 @@ ble_ll_init_rx_isr_end(uint8_t *rxbuf, uint8_t crcok,
         if (ble_ll_is_rpa(adv_addr, addr_type) && ble_ll_resolv_enabled()) {
             index = ble_hw_resolv_list_match();
             if (index >= 0) {
+                rl = &g_ble_ll_resolv_list[index];
+
                 ble_hdr->rxinfo.flags |= BLE_MBUF_HDR_F_RESOLVED;
                 connsm->rpa_index = index;
-                peer = g_ble_ll_resolv_list[index].rl_identity_addr;
-                peer_addr_type = g_ble_ll_resolv_list[index].rl_addr_type;
+                peer = rl->rl_identity_addr;
+                peer_addr_type = rl->rl_addr_type;
                 resolved = 1;
+
+                /* Assure privacy */
+                if ((rl->rl_priv_mode == BLE_HCI_PRIVACY_NETWORK) &&
+                    !inita_is_rpa) {
+                    goto init_rx_isr_exit;
+                }
             } else {
                 if (chk_wl) {
                     goto init_rx_isr_exit;
                 }
             }
+        } else if (ble_ll_resolv_enabled()) {
+            /* Let's see if we have IRK with that peer. If so lets make sure
+             * privacy mode is correct together with initA
+             */
+            rl = ble_ll_resolv_list_find(adv_addr, addr_type);
+            if (rl && !inita_is_rpa &&
+               (rl->rl_priv_mode == BLE_HCI_PRIVACY_NETWORK)) {
+                goto init_rx_isr_exit;
+            }
         }
 #endif
 

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ac7b489a/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 844060a..ca5996d 100644
--- a/net/nimble/controller/src/ble_ll_hci.c
+++ b/net/nimble/controller/src/ble_ll_hci.c
@@ -760,6 +760,9 @@ ble_ll_hci_le_cmd_proc(uint8_t *cmdbuf, uint16_t ocf, uint8_t *rsplen)
     case BLE_HCI_OCF_LE_SET_RPA_TMO:
         rc = ble_ll_resolv_set_rpa_tmo(cmdbuf);
         break;
+    case BLE_HCI_OCF_LE_SET_PRIVACY_MODE:
+        rc = ble_ll_resolve_set_priv_mode(cmdbuf);
+        break;
 #endif
     case BLE_HCI_OCF_LE_RD_MAX_DATA_LEN:
         rc = ble_ll_hci_le_rd_max_data_len(rspbuf, rsplen);

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ac7b489a/net/nimble/controller/src/ble_ll_resolv.c
----------------------------------------------------------------------
diff --git a/net/nimble/controller/src/ble_ll_resolv.c b/net/nimble/controller/src/ble_ll_resolv.c
index 012afc5..c38a5bc 100644
--- a/net/nimble/controller/src/ble_ll_resolv.c
+++ b/net/nimble/controller/src/ble_ll_resolv.c
@@ -241,6 +241,9 @@ ble_ll_resolv_list_add(uint8_t *cmdbuf)
         swap_buf(rl->rl_peer_irk, cmdbuf + 7, 16);
         swap_buf(rl->rl_local_irk, cmdbuf + 23, 16);
 
+        /* By default use ptivacy network mode */
+        rl->rl_priv_mode = BLE_HCI_PRIVACY_NETWORK;
+
         /*
          * Add peer IRK to HW resolving list. If we can add it, also
          * generate a local RPA now to save time later.
@@ -370,6 +373,34 @@ ble_ll_resolv_set_rpa_tmo(uint8_t *cmdbuf)
                             (int32_t)g_ble_ll_resolv_data.rpa_tmo);
 }
 
+int
+ble_ll_resolve_set_priv_mode(uint8_t *cmdbuf)
+{
+    struct ble_ll_resolv_entry *rl;
+
+    if (ble_ll_adv_enabled() || ble_ll_scan_enabled() ||
+        g_ble_ll_conn_create_sm) {
+        return BLE_ERR_CMD_DISALLOWED;
+    }
+
+    if (!ble_ll_resolv_enabled()) {
+        return BLE_ERR_CMD_DISALLOWED;
+    }
+
+    /* cmdbuf = addr_type(0) | addr(6) | priv_mode(1) */
+    rl = ble_ll_resolv_list_find(&cmdbuf[1], cmdbuf[0]);
+    if (!rl) {
+        return BLE_ERR_UNK_CONN_ID;
+    }
+
+    if (cmdbuf[7] > BLE_HCI_PRIVACY_DEVICE) {
+        return BLE_ERR_INV_HCI_CMD_PARMS;
+    }
+
+    rl->rl_priv_mode = cmdbuf[7];
+    return 0;
+}
+
 /**
  * Returns the Resolvable Private address timeout, in os ticks
  *

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ac7b489a/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 d565a74..e9b520b 100644
--- a/net/nimble/include/nimble/hci_common.h
+++ b/net/nimble/include/nimble/hci_common.h
@@ -485,6 +485,8 @@ extern "C" {
 
 /* --- LE set privacy mode (OCF 0x004E) */
 #define BLE_HCI_LE_SET_PRIVACY_MODE_LEN             (8)
+#define BLE_HCI_PRIVACY_NETWORK                     (0)
+#define BLE_HCI_PRIVACY_DEVICE                      (1)
 
 /* Event Codes */
 #define BLE_HCI_EVCODE_INQUIRY_CMP          (0x01)


[5/6] incubator-mynewt-core git commit: bletiny: Add support to modify privacy mode

Posted by an...@apache.org.
bletiny: Add support to modify privacy mode


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/10fdd0b6
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/10fdd0b6
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/10fdd0b6

Branch: refs/heads/bluetooth5
Commit: 10fdd0b6fdb09d3f08c634c53efaf2982be10e04
Parents: 674af93
Author: \u0141ukasz Rymanowski <lu...@codecoup.pl>
Authored: Wed Apr 5 15:45:06 2017 +0200
Committer: \u0141ukasz Rymanowski <lu...@codecoup.pl>
Committed: Thu Apr 6 09:46:45 2017 +0200

----------------------------------------------------------------------
 apps/bletiny/src/cmd.c | 46 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 46 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/10fdd0b6/apps/bletiny/src/cmd.c
----------------------------------------------------------------------
diff --git a/apps/bletiny/src/cmd.c b/apps/bletiny/src/cmd.c
index 15563a0..19580c7 100644
--- a/apps/bletiny/src/cmd.c
+++ b/apps/bletiny/src/cmd.c
@@ -2464,6 +2464,46 @@ static struct kv_pair cmd_set_addr_types[] = {
 };
 
 static void
+bletiny_set_priv_mode_help(void)
+{
+    console_printf("Available set priv_mode params: \n");
+    help_cmd_kv_dflt("addr_type", cmd_set_addr_types, BLE_ADDR_PUBLIC);
+    help_cmd_byte_stream_exact_length("addr", 6);
+    help_cmd_uint8("mode");
+}
+
+static int
+cmd_set_priv_mode(void)
+{
+    ble_addr_t addr;
+    uint8_t priv_mode;
+    int rc;
+
+    addr.type = parse_arg_kv_default("addr_type", cmd_set_addr_types,
+                                     BLE_ADDR_PUBLIC, &rc);
+    if (rc != 0) {
+        console_printf("invalid 'addr_type' parameter\n");
+        help_cmd_kv_dflt("addr_type", cmd_set_addr_types, BLE_ADDR_PUBLIC);
+        return rc;
+    }
+
+    rc = parse_arg_mac("addr", addr.val);
+    if (rc != 0) {
+        console_printf("invalid 'addr' parameter\n");
+        help_cmd_byte_stream_exact_length("addr", 6);
+        return rc;
+    }
+
+    priv_mode = parse_arg_uint8("mode", &rc);
+    if (rc != 0) {
+        console_printf("missing mode\n");
+        return rc;
+    }
+
+    return ble_gap_set_priv_mode(&addr, priv_mode);
+}
+
+static void
 bletiny_set_addr_help(void)
 {
     console_printf("Available set addr params: \n");
@@ -2544,6 +2584,7 @@ cmd_set(int argc, char **argv)
         bletiny_set_adv_data_help();
         bletiny_set_sm_data_help();
         bletiny_set_addr_help();
+        bletiny_set_priv_mode_help();
         return 0;
     }
 
@@ -2557,6 +2598,11 @@ cmd_set(int argc, char **argv)
         return rc;
     }
 
+    if (argc > 1 && strcmp(argv[1], "priv_mode") == 0) {
+        rc = cmd_set_priv_mode();
+        return rc;
+    }
+
     good = 0;
 
     rc = parse_arg_find_idx("addr");


[3/6] incubator-mynewt-core git commit: nimble/host: Add support for privacy modes

Posted by an...@apache.org.
nimble/host: Add support for privacy modes

With this patch application can set privacy mode for peer devices
as per Bluetooth 5.0 specification Vol 6, Part B, chapter 4.7


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/674af934
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/674af934
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/674af934

Branch: refs/heads/bluetooth5
Commit: 674af9341189c3996bfbf966605045a1d05e59fe
Parents: 0536012
Author: \u0141ukasz Rymanowski <lu...@codecoup.pl>
Authored: Wed Apr 5 15:34:59 2017 +0200
Committer: \u0141ukasz Rymanowski <lu...@codecoup.pl>
Committed: Thu Apr 6 09:46:45 2017 +0200

----------------------------------------------------------------------
 net/nimble/host/include/host/ble_gap.h |  4 +++
 net/nimble/host/src/ble_gap.c          |  6 ++++
 net/nimble/host/src/ble_hs_hci_cmd.c   | 46 +++++++++++++++++++++++++++++
 net/nimble/host/src/ble_hs_hci_priv.h  |  3 ++
 net/nimble/host/src/ble_hs_pvcy.c      | 15 ++++++++++
 net/nimble/host/src/ble_hs_pvcy_priv.h |  1 +
 6 files changed, 75 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/674af934/net/nimble/host/include/host/ble_gap.h
----------------------------------------------------------------------
diff --git a/net/nimble/host/include/host/ble_gap.h b/net/nimble/host/include/host/ble_gap.h
index 189244a..f40789a 100644
--- a/net/nimble/host/include/host/ble_gap.h
+++ b/net/nimble/host/include/host/ble_gap.h
@@ -566,6 +566,10 @@ int ble_gap_encryption_initiate(uint16_t conn_handle, const uint8_t *ltk,
                                 uint16_t ediv, uint64_t rand_val, int auth);
 int ble_gap_conn_rssi(uint16_t conn_handle, int8_t *out_rssi);
 
+#define BLE_GAP_PRIVATE_MODE_NETWORK        0
+#define BLE_GAP_PRIVATE_MODE_DEVICE         1
+int ble_gap_set_priv_mode(const ble_addr_t *peer_addr, uint8_t priv_mode);
+
 #ifdef __cplusplus
 }
 #endif

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/674af934/net/nimble/host/src/ble_gap.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_gap.c b/net/nimble/host/src/ble_gap.c
index 80bfa7a..6318a9e 100644
--- a/net/nimble/host/src/ble_gap.c
+++ b/net/nimble/host/src/ble_gap.c
@@ -431,6 +431,12 @@ ble_gap_extract_conn_cb(uint16_t conn_handle,
     }
 }
 
+int
+ble_gap_set_priv_mode(const ble_addr_t *peer_addr, uint8_t priv_mode)
+{
+    return ble_hs_pvcy_set_mode(peer_addr, priv_mode);
+}
+
 /*****************************************************************************
  * $misc                                                                     *
  *****************************************************************************/

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/674af934/net/nimble/host/src/ble_hs_hci_cmd.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_hs_hci_cmd.c b/net/nimble/host/src/ble_hs_hci_cmd.c
index bbef1a0..6de599f 100644
--- a/net/nimble/host/src/ble_hs_hci_cmd.c
+++ b/net/nimble/host/src/ble_hs_hci_cmd.c
@@ -1336,6 +1336,52 @@ ble_hs_hci_cmd_build_set_resolv_priv_addr_timeout(
         timeout, dst + BLE_HCI_CMD_HDR_LEN);
 }
 
+
+static int
+ble_hs_hci_cmd_body_le_set_priv_mode(const uint8_t *addr, uint8_t addr_type,
+                                     uint8_t priv_mode, uint8_t *dst)
+{
+    /* In this command addr type can be either:
+     *  - public identity (0x00)
+     *  - random (static) identity (0x01)
+     */
+    if (addr_type > BLE_ADDR_RANDOM) {
+        return BLE_ERR_INV_HCI_CMD_PARMS;
+    }
+
+    dst[0] = addr_type;
+    memcpy(dst + 1, addr, BLE_DEV_ADDR_LEN);
+    dst[7] = priv_mode;
+
+    return 0;
+}
+
+/*
+ *  OGF=0x08 OCF=0x004e
+ */
+int
+ble_hs_hci_build_le_set_priv_mode(const uint8_t *addr, uint8_t addr_type,
+                                  uint8_t priv_mode, uint8_t *dst,
+                                  uint16_t dst_len)
+{
+    int rc;
+
+    BLE_HS_DBG_ASSERT(
+        dst_len >= BLE_HCI_CMD_HDR_LEN + BLE_HCI_LE_SET_PRIVACY_MODE_LEN);
+
+    ble_hs_hci_cmd_write_hdr(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_SET_PRIVACY_MODE,
+                             BLE_HCI_LE_SET_PRIVACY_MODE_LEN, dst);
+    dst += BLE_HCI_CMD_HDR_LEN;
+
+    rc = ble_hs_hci_cmd_body_le_set_priv_mode(addr, addr_type, priv_mode, dst);
+    if (rc != 0) {
+        return rc;
+    }
+
+    return 0;
+
+
+}
 static int
 ble_hs_hci_cmd_body_set_random_addr(const struct hci_rand_addr *paddr,
                                     uint8_t *dst)

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/674af934/net/nimble/host/src/ble_hs_hci_priv.h
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_hs_hci_priv.h b/net/nimble/host/src/ble_hs_hci_priv.h
index bdc5457..b3be0bc 100644
--- a/net/nimble/host/src/ble_hs_hci_priv.h
+++ b/net/nimble/host/src/ble_hs_hci_priv.h
@@ -159,6 +159,9 @@ int ble_hs_hci_cmd_build_set_resolv_priv_addr_timeout(
 int ble_hs_hci_cmd_build_set_random_addr(const uint8_t *addr,
                                          uint8_t *dst, int dst_len);
 
+int ble_hs_hci_build_le_set_priv_mode(const uint8_t *addr, uint8_t addr_type,
+                                      uint8_t priv_mode, uint8_t *dst,
+                                      uint16_t dst_len);
 #ifdef __cplusplus
 }
 #endif

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/674af934/net/nimble/host/src/ble_hs_pvcy.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_hs_pvcy.c b/net/nimble/host/src/ble_hs_pvcy.c
index 3a6d974..be3369c 100644
--- a/net/nimble/host/src/ble_hs_pvcy.c
+++ b/net/nimble/host/src/ble_hs_pvcy.c
@@ -205,3 +205,18 @@ ble_hs_pvcy_our_irk(const uint8_t **out_irk)
     *out_irk = ble_hs_pvcy_irk;
     return 0;
 }
+
+int
+ble_hs_pvcy_set_mode(const ble_addr_t *addr, uint8_t priv_mode)
+{
+    uint8_t buf[BLE_HCI_CMD_HDR_LEN + BLE_HCI_LE_SET_PRIVACY_MODE_LEN];
+    int rc;
+
+    rc = ble_hs_hci_build_le_set_priv_mode(addr->val, addr->type, priv_mode,
+                                           buf, sizeof(buf));
+    if (rc != 0) {
+        return rc;
+    }
+
+    return ble_hs_hci_cmd_tx(buf, NULL, 0, NULL);
+}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/674af934/net/nimble/host/src/ble_hs_pvcy_priv.h
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_hs_pvcy_priv.h b/net/nimble/host/src/ble_hs_pvcy_priv.h
index 62689d3..2a72b0b 100644
--- a/net/nimble/host/src/ble_hs_pvcy_priv.h
+++ b/net/nimble/host/src/ble_hs_pvcy_priv.h
@@ -31,6 +31,7 @@ int ble_hs_pvcy_our_irk(const uint8_t **out_irk);
 int ble_hs_pvcy_remove_entry(uint8_t addr_type, uint8_t *addr);
 int ble_hs_pvcy_add_entry(uint8_t *addr, uint8_t addrtype, uint8_t *irk);
 int ble_hs_pvcy_ensure_started(void);
+int ble_hs_pvcy_set_mode(const ble_addr_t *addr, uint8_t priv_mode);
 
 #ifdef __cplusplus
 }


[6/6] incubator-mynewt-core git commit: This closes #222.

Posted by an...@apache.org.
This closes #222.

Merge branch 'controller_5_start' of https://github.com/rymanluk/incubator-mynewt-core into bluetooth5


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/646b35df
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/646b35df
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/646b35df

Branch: refs/heads/bluetooth5
Commit: 646b35dfa19d9f7a65fdc6e32cb4fe4de1af4de5
Parents: aa7a274 10fdd0b
Author: Andrzej Kaczmarek <an...@codecoup.pl>
Authored: Fri Apr 7 10:49:05 2017 +0200
Committer: Andrzej Kaczmarek <an...@codecoup.pl>
Committed: Fri Apr 7 10:49:05 2017 +0200

----------------------------------------------------------------------
 apps/bletiny/src/cmd.c                          |  46 ++++
 .../include/controller/ble_ll_resolv.h          |   6 +-
 net/nimble/controller/src/ble_ll_conn.c         |  25 +-
 net/nimble/controller/src/ble_ll_hci.c          |   5 +-
 net/nimble/controller/src/ble_ll_resolv.c       |  42 +++-
 net/nimble/host/include/host/ble_gap.h          |   4 +
 net/nimble/host/src/ble_gap.c                   |   6 +
 net/nimble/host/src/ble_hs_hci_cmd.c            |  46 ++++
 net/nimble/host/src/ble_hs_hci_priv.h           |   3 +
 net/nimble/host/src/ble_hs_pvcy.c               |  15 ++
 net/nimble/host/src/ble_hs_pvcy_priv.h          |   1 +
 net/nimble/include/nimble/hci_common.h          | 230 ++++++++++++++-----
 net/nimble/src/hci_common.c                     |  35 ++-
 13 files changed, 395 insertions(+), 69 deletions(-)
----------------------------------------------------------------------



[4/6] incubator-mynewt-core git commit: nimble/controller: Add helper to check if controller is busy

Posted by an...@apache.org.
nimble/controller: Add helper to check if controller is busy

In couple of places we were checking if controller is scanning, advertising
or connection is in progress. Lets make a helper for this


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/0536012a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/0536012a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/0536012a

Branch: refs/heads/bluetooth5
Commit: 0536012adbda8df58e2e1f7d548abb626012a2d1
Parents: ac7b489
Author: \u0141ukasz Rymanowski <lu...@codecoup.pl>
Authored: Thu Apr 6 09:40:04 2017 +0200
Committer: \u0141ukasz Rymanowski <lu...@codecoup.pl>
Committed: Thu Apr 6 09:46:45 2017 +0200

----------------------------------------------------------------------
 net/nimble/controller/src/ble_ll_resolv.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/0536012a/net/nimble/controller/src/ble_ll_resolv.c
----------------------------------------------------------------------
diff --git a/net/nimble/controller/src/ble_ll_resolv.c b/net/nimble/controller/src/ble_ll_resolv.c
index c38a5bc..8d17f87 100644
--- a/net/nimble/controller/src/ble_ll_resolv.c
+++ b/net/nimble/controller/src/ble_ll_resolv.c
@@ -44,6 +44,12 @@ struct ble_ll_resolv_data g_ble_ll_resolv_data;
 
 struct ble_ll_resolv_entry g_ble_ll_resolv_list[MYNEWT_VAL(BLE_LL_RESOLV_LIST_SIZE)];
 
+static int
+ble_ll_is_controller_busy(void)
+{
+    return ble_ll_adv_enabled() || ble_ll_scan_enabled() ||
+           g_ble_ll_conn_create_sm;
+}
 /**
  * Called to determine if a change is allowed to the resolving list at this
  * time. We are not allowed to modify the resolving list if address translation
@@ -58,8 +64,7 @@ ble_ll_resolv_list_chg_allowed(void)
     int rc;
 
     if (g_ble_ll_resolv_data.addr_res_enabled &&
-            (ble_ll_adv_enabled() || ble_ll_scan_enabled() ||
-             g_ble_ll_conn_create_sm)) {
+       ble_ll_is_controller_busy()) {
         rc = 0;
     } else {
         rc = 1;
@@ -310,8 +315,7 @@ ble_ll_resolv_enable_cmd(uint8_t *cmdbuf)
     int32_t tmo;
     uint8_t enabled;
 
-    if (ble_ll_adv_enabled() || ble_ll_scan_enabled() ||
-        g_ble_ll_conn_create_sm) {
+    if (ble_ll_is_controller_busy()) {
         rc = BLE_ERR_CMD_DISALLOWED;
     } else {
         enabled = cmdbuf[0];
@@ -378,8 +382,7 @@ ble_ll_resolve_set_priv_mode(uint8_t *cmdbuf)
 {
     struct ble_ll_resolv_entry *rl;
 
-    if (ble_ll_adv_enabled() || ble_ll_scan_enabled() ||
-        g_ble_ll_conn_create_sm) {
+    if (ble_ll_is_controller_busy()) {
         return BLE_ERR_CMD_DISALLOWED;
     }