You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by cc...@apache.org on 2016/08/04 02:59:26 UTC

[02/14] incubator-mynewt-core git commit: BLE Host - Read BD_ADDR on startup.

BLE Host - Read BD_ADDR on startup.


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

Branch: refs/heads/develop
Commit: 93c01c53da4e79430ed2bb64d89a2ab37a3fe1cc
Parents: 1f8bbd8
Author: Christopher Collins <cc...@apache.org>
Authored: Mon Aug 1 13:32:25 2016 -0700
Committer: Christopher Collins <cc...@apache.org>
Committed: Wed Aug 3 19:54:15 2016 -0700

----------------------------------------------------------------------
 net/nimble/host/include/host/host_hci.h |  1 +
 net/nimble/host/src/ble_hs_startup.c    | 30 +++++++++++++++++++++++++---
 net/nimble/host/src/host_hci_cmd.c      | 14 +++++++++++++
 net/nimble/include/nimble/hci_common.h  |  3 +++
 4 files changed, 45 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/93c01c53/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 f92c1a9..dbe626a 100644
--- a/net/nimble/host/include/host/host_hci.h
+++ b/net/nimble/host/include/host/host_hci.h
@@ -36,6 +36,7 @@ void host_hci_write_hdr(uint8_t ogf, uint8_t ocf, uint8_t len, void *buf);
 int host_hci_cmd_send(uint8_t ogf, uint8_t ocf, uint8_t len,
                       const void *cmddata);
 int host_hci_cmd_send_buf(void *cmddata);
+void host_hci_cmd_build_read_bd_addr(uint8_t *dst, int dst_len);
 void host_hci_cmd_build_set_event_mask(uint64_t event_mask,
                                        uint8_t *dst, int dst_len);
 void host_hci_cmd_build_set_event_mask2(uint64_t event_mask, uint8_t *dst,

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/93c01c53/net/nimble/host/src/ble_hs_startup.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_hs_startup.c b/net/nimble/host/src/ble_hs_startup.c
index 568f1ed..45fb5ce 100644
--- a/net/nimble/host/src/ble_hs_startup.c
+++ b/net/nimble/host/src/ble_hs_startup.c
@@ -78,6 +78,28 @@ ble_hs_startup_le_read_buf_sz_tx(void)
 }
 
 static int
+ble_hs_startup_read_bd_addr(void)
+{
+    uint8_t ack_params[BLE_HCI_IP_RD_BD_ADDR_ACK_PARAM_LEN];
+    uint8_t buf[BLE_HCI_CMD_HDR_LEN];
+    uint8_t ack_params_len;
+    int rc;
+
+    host_hci_cmd_build_read_bd_addr(buf, sizeof buf);
+    rc = ble_hci_cmd_tx(buf, ack_params, sizeof ack_params, &ack_params_len);
+    if (rc != 0) {
+        return rc;
+    }
+
+    if (ack_params_len != sizeof ack_params) {
+        return BLE_HS_ECONTROLLER;
+    }
+
+    ble_hs_id_set_pub(ack_params);
+    return 0;
+}
+
+static int
 ble_hs_startup_le_set_evmask_tx(void)
 {
     uint8_t buf[BLE_HCI_CMD_HDR_LEN + BLE_HCI_SET_LE_EVENT_MASK_LEN];
@@ -224,10 +246,12 @@ ble_hs_startup_go(void)
         return rc;
     }
 
-    /* XXX: Read BD_ADDR. */
+    rc = ble_hs_startup_read_bd_addr();
+    if (rc != 0) {
+        return rc;
+    }
 
-    ble_hs_id_set_pub(g_dev_addr);
     ble_hs_pvcy_set_our_irk(NULL);
 
-    return rc;
+    return 0;
 }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/93c01c53/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 9dbb036..a3e021d 100644
--- a/net/nimble/host/src/host_hci_cmd.c
+++ b/net/nimble/host/src/host_hci_cmd.c
@@ -138,6 +138,20 @@ host_hci_le_cmd_send(uint16_t ocf, uint8_t len, void *cmddata)
     return rc;
 }
 
+/**
+ * Read BD_ADDR
+ *
+ * OGF = 0x04 (Informational parameters)
+ * OCF = 0x0009
+ */
+void
+host_hci_cmd_build_read_bd_addr(uint8_t *dst, int dst_len)
+{
+    BLE_HS_DBG_ASSERT(dst_len >= BLE_HCI_CMD_HDR_LEN);
+    host_hci_write_hdr(BLE_HCI_OGF_INFO_PARAMS, BLE_HCI_OCF_IP_RD_BD_ADDR,
+                       0, dst);
+}
+
 static int
 host_hci_cmd_body_le_whitelist_chg(const uint8_t *addr, uint8_t addr_type,
                                    uint8_t *dst)

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/93c01c53/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 d5c8743..3b44b0e 100644
--- a/net/nimble/include/nimble/hci_common.h
+++ b/net/nimble/include/nimble/hci_common.h
@@ -131,6 +131,9 @@
 /* --- Set event mask (OGF 0x03, OCF 0x0001 --- */
 #define BLE_HCI_SET_EVENT_MASK_LEN          (8)
 
+/* --- Read BD_ADDR (OGF 0x04, OCF 0x0009 --- */
+#define BLE_HCI_IP_RD_BD_ADDR_ACK_PARAM_LEN (6)
+
 /* --- Read/Write authenticated payload timeout (ocf 0x007B/0x007C) */
 #define BLE_HCI_RD_AUTH_PYLD_TMO_LEN        (4)
 #define BLE_HCI_WR_AUTH_PYLD_TMO_LEN        (2)