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 2015/11/12 22:54:02 UTC

incubator-mynewt-larva git commit: Configurable ack callbacks for cmd sequences.

Repository: incubator-mynewt-larva
Updated Branches:
  refs/heads/master a1dbea4a4 -> 3fea5a999


Configurable ack callbacks for cmd sequences.


Project: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/commit/3fea5a99
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/tree/3fea5a99
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/diff/3fea5a99

Branch: refs/heads/master
Commit: 3fea5a999adb16593f0b2215b46fadfd0ff734b8
Parents: a1dbea4
Author: Christopher Collins <cc...@gmail.com>
Authored: Thu Nov 12 13:53:22 2015 -0800
Committer: Christopher Collins <cc...@gmail.com>
Committed: Thu Nov 12 13:53:22 2015 -0800

----------------------------------------------------------------------
 net/nimble/host/include/host/host_hci.h      |   3 +-
 net/nimble/host/src/ble_gap_conn.c           | 130 ++++++++++++++--------
 net/nimble/host/src/ble_gap_conn.h           |  15 +--
 net/nimble/host/src/ble_hs.c                 |   5 +
 net/nimble/host/src/ble_hs_ack.c             |  59 ++++------
 net/nimble/host/src/ble_hs_ack.h             |   6 +-
 net/nimble/host/src/host_hci.c               |  20 ++--
 net/nimble/host/src/host_hci_cmd.c           |   7 +-
 net/nimble/host/src/test/ble_host_hci_test.c |   2 +-
 net/nimble/host/src/test/ble_hs_conn_test.c  |  64 +++++------
 net/nimble/host/src/test/ble_hs_test_util.c  |  20 +++-
 net/nimble/host/src/test/ble_hs_test_util.h  |   1 +
 12 files changed, 177 insertions(+), 155 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/3fea5a99/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 27c0d34..89b07e0 100644
--- a/net/nimble/host/include/host/host_hci.h
+++ b/net/nimble/host/include/host/host_hci.h
@@ -37,9 +37,10 @@ int host_hci_cmd_le_read_whitelist(void);
 int host_hci_cmd_le_add_to_whitelist(uint8_t *addr, uint8_t addr_type);
 int host_hci_cmd_le_rmv_from_whitelist(uint8_t *addr, uint8_t addr_type);
 
-
 int host_hci_data_rx(void *pkt, uint16_t len);
 
+void host_hci_init(void);
+
 extern uint16_t host_hci_outstanding_opcode;
 
 #endif /* H_HOST_HCI_ */

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/3fea5a99/net/nimble/host/src/ble_gap_conn.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_gap_conn.c b/net/nimble/host/src/ble_gap_conn.c
index 9daae09..12af411 100644
--- a/net/nimble/host/src/ble_gap_conn.c
+++ b/net/nimble/host/src/ble_gap_conn.c
@@ -21,14 +21,70 @@
 #include "host/host_hci.h"
 #include "ble_hs_ack.h"
 #include "ble_hs_conn.h"
+#include "ble_hs_ack.h"
 #include "ble_gap_conn.h"
 
-int ble_gap_conn_state_master;
-int ble_gap_conn_state_slave;
+#define BLE_GAP_CONN_STATE_IDLE                     0
+
+#define BLE_GAP_CONN_STATE_MASTER_DIRECT_UNACKED    1
+#define BLE_GAP_CONN_STATE_MASTER_DIRECT_ACKED      2
 
+#define BLE_GAP_CONN_STATE_SLAVE_UNACKED            1
+#define BLE_GAP_CONN_STATE_SLAVE_PARAMS_ACKED       2
+#define BLE_GAP_CONN_STATE_SLAVE_ENABLE_ACKED       3
+
+static int ble_gap_conn_master_state;
+static int ble_gap_conn_slave_state;
 static uint8_t ble_gap_conn_addr_master[BLE_DEV_ADDR_LEN];
 static uint8_t ble_gap_conn_addr_slave[BLE_DEV_ADDR_LEN];
 
+static void
+ble_gap_conn_master_ack(struct ble_hs_ack *ack, void *arg)
+{
+    assert(ble_gap_conn_master_state ==
+           BLE_GAP_CONN_STATE_MASTER_DIRECT_UNACKED);
+
+    if (ack->bha_status != 0) {
+        ble_gap_conn_master_state = BLE_GAP_CONN_STATE_IDLE;
+    } else {
+        ble_gap_conn_master_state = BLE_GAP_CONN_STATE_MASTER_DIRECT_ACKED;
+    }
+}
+
+static void
+ble_gap_conn_slave_ack(struct ble_hs_ack *ack, void *arg)
+{
+    int rc;
+
+    assert(ble_gap_conn_slave_state == BLE_GAP_CONN_STATE_SLAVE_UNACKED ||
+           ble_gap_conn_slave_state == BLE_GAP_CONN_STATE_SLAVE_PARAMS_ACKED);
+
+    if (ack->bha_status != 0) {
+        ble_gap_conn_slave_state = BLE_GAP_CONN_STATE_IDLE;
+        return;
+    }
+
+    switch (ble_gap_conn_slave_state) {
+    case BLE_GAP_CONN_STATE_SLAVE_UNACKED:
+        ble_gap_conn_slave_state = BLE_GAP_CONN_STATE_SLAVE_PARAMS_ACKED;
+        ble_hs_ack_set_callback(ble_gap_conn_slave_ack, NULL);
+        rc = host_hci_cmd_le_set_adv_enable(1);
+        if (rc != 0) {
+            ble_gap_conn_slave_state = BLE_GAP_CONN_STATE_IDLE;
+            ble_hs_ack_set_callback(NULL, NULL);
+        }
+        break;
+
+    case BLE_GAP_CONN_STATE_SLAVE_PARAMS_ACKED:
+        ble_gap_conn_slave_state = BLE_GAP_CONN_STATE_SLAVE_ENABLE_ACKED;
+        break;
+
+    default:
+        assert(0);
+        break;
+    }
+}
+
 /**
  * Initiates a connection using the GAP Direct Connection Establishment
  * Procedure.
@@ -43,7 +99,7 @@ ble_gap_conn_initiate_direct(int addr_type, uint8_t *addr)
     int rc;
 
     /* Make sure no master connection attempt is already in progress. */
-    if (ble_gap_conn_state_master != BLE_GAP_CONN_STATE_NULL) {
+    if (ble_gap_conn_master_in_progress()) {
         return EALREADY;
     }
 
@@ -60,14 +116,15 @@ ble_gap_conn_initiate_direct(int addr_type, uint8_t *addr)
     hcc.min_ce_len = 0x0010; // XXX
     hcc.max_ce_len = 0x0300; // XXX
 
+    memcpy(ble_gap_conn_addr_master, addr, BLE_DEV_ADDR_LEN);
+    ble_gap_conn_master_state = BLE_GAP_CONN_STATE_MASTER_DIRECT_UNACKED;
+    ble_hs_ack_set_callback(ble_gap_conn_master_ack, NULL);
+
     rc = host_hci_cmd_le_create_connection(&hcc);
     if (rc != 0) {
         return rc;
     }
 
-    ble_gap_conn_state_master = BLE_GAP_CONN_STATE_MASTER_DIRECT_UNACKED;
-    memcpy(ble_gap_conn_addr_master, addr, BLE_DEV_ADDR_LEN);
-
     return 0;
 }
 
@@ -79,7 +136,7 @@ ble_gap_conn_advertise_direct(int addr_type, uint8_t *addr)
     int rc;
 
     /* Make sure no slave connection attempt is already in progress. */
-    if (ble_gap_conn_state_slave != BLE_GAP_CONN_STATE_NULL) {
+    if (ble_gap_conn_slave_in_progress()) {
         return EALREADY;
     }
 
@@ -92,49 +149,33 @@ ble_gap_conn_advertise_direct(int addr_type, uint8_t *addr)
     hap.adv_channel_map = BLE_HCI_ADV_CHANMASK_DEF;
     hap.adv_filter_policy = BLE_HCI_ADV_FILT_DEF;
 
+    memcpy(ble_gap_conn_addr_slave, addr, BLE_DEV_ADDR_LEN);
+    ble_gap_conn_slave_state = BLE_GAP_CONN_STATE_SLAVE_UNACKED;
+    ble_hs_ack_set_callback(ble_gap_conn_slave_ack, NULL);
+
     rc = host_hci_cmd_le_set_adv_params(&hap);
     if (rc != 0) {
         return rc;
     }
 
-    ble_gap_conn_state_slave = BLE_GAP_CONN_STATE_SLAVE_DIRECT_UNACKED;
-    memcpy(ble_gap_conn_addr_slave, addr, BLE_DEV_ADDR_LEN);
-
-    return 0;
-}
-
-int
-ble_gap_conn_rx_ack_create_conn(struct ble_hs_ack *ack)
-{
-    if (ble_gap_conn_state_master != BLE_GAP_CONN_STATE_MASTER_DIRECT_UNACKED) {
-        return ENOENT;
-    }
-
-    if (ack->bha_status == BLE_ERR_SUCCESS) {
-        ble_gap_conn_state_master = BLE_GAP_CONN_STATE_MASTER_DIRECT_ACKED;
-    } else {
-        ble_gap_conn_state_master = BLE_GAP_CONN_STATE_NULL;
-    }
-
     return 0;
 }
 
 static int
 ble_gap_conn_accept_conn(uint8_t *addr)
 {
-    switch (ble_gap_conn_state_master) {
+    switch (ble_gap_conn_master_state) {
     case BLE_GAP_CONN_STATE_MASTER_DIRECT_ACKED:
         if (memcmp(ble_gap_conn_addr_master, addr, BLE_DEV_ADDR_LEN) == 0) {
-            ble_gap_conn_state_master = BLE_GAP_CONN_STATE_NULL;
+            ble_gap_conn_master_state = BLE_GAP_CONN_STATE_IDLE;
             return 0;
         }
-        break;
     }
 
-    switch (ble_gap_conn_state_slave) {
-    case BLE_GAP_CONN_STATE_SLAVE_DIRECT_ACKED:
+    switch (ble_gap_conn_slave_state) {
+    case BLE_GAP_CONN_STATE_SLAVE_ENABLE_ACKED:
         if (memcmp(ble_gap_conn_addr_slave, addr, BLE_DEV_ADDR_LEN) == 0) {
-            ble_gap_conn_state_slave = BLE_GAP_CONN_STATE_NULL;
+            ble_gap_conn_slave_state = BLE_GAP_CONN_STATE_IDLE;
             return 0;
         }
         break;
@@ -143,7 +184,6 @@ ble_gap_conn_accept_conn(uint8_t *addr)
     return ENOENT;
 }
 
-
 int
 ble_gap_conn_rx_conn_complete(struct hci_le_conn_complete *evt)
 {
@@ -178,26 +218,24 @@ ble_gap_conn_rx_conn_complete(struct hci_le_conn_complete *evt)
 }
 
 int
-ble_gap_conn_rx_ack_set_adv_params(struct ble_hs_ack *ack)
+ble_gap_conn_master_in_progress(void)
 {
-    if (ble_gap_conn_state_slave != BLE_GAP_CONN_STATE_SLAVE_DIRECT_UNACKED) {
-        return ENOENT;
-    }
-
-    if (ack->bha_status == BLE_ERR_SUCCESS) {
-        ble_gap_conn_state_slave = BLE_GAP_CONN_STATE_SLAVE_DIRECT_ACKED;
-    } else {
-        ble_gap_conn_state_slave = BLE_GAP_CONN_STATE_NULL;
-    }
+    return ble_gap_conn_master_state != BLE_GAP_CONN_STATE_IDLE;
+}
 
-    return 0;
+int
+ble_gap_conn_slave_in_progress(void)
+{
+    return ble_gap_conn_slave_state != BLE_GAP_CONN_STATE_IDLE;
 }
 
 int
 ble_gap_conn_init(void)
 {
-    ble_gap_conn_state_master = BLE_GAP_CONN_STATE_NULL;
-    ble_gap_conn_state_slave = BLE_GAP_CONN_STATE_NULL;
+    ble_gap_conn_master_state = BLE_GAP_CONN_STATE_IDLE;
+    ble_gap_conn_slave_state = BLE_GAP_CONN_STATE_IDLE;
+    memset(ble_gap_conn_addr_master, 0, sizeof ble_gap_conn_addr_master);
+    memset(ble_gap_conn_addr_slave, 0, sizeof ble_gap_conn_addr_slave);
 
     return 0;
 }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/3fea5a99/net/nimble/host/src/ble_gap_conn.h
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_gap_conn.h b/net/nimble/host/src/ble_gap_conn.h
index b24bffd..e0f1fd6 100644
--- a/net/nimble/host/src/ble_gap_conn.h
+++ b/net/nimble/host/src/ble_gap_conn.h
@@ -19,22 +19,11 @@
 
 struct ble_hs_ack;
 
-#define BLE_GAP_CONN_STATE_NULL                     0
-
-#define BLE_GAP_CONN_STATE_MASTER_DIRECT_UNACKED    1
-#define BLE_GAP_CONN_STATE_MASTER_DIRECT_ACKED      2
-
-#define BLE_GAP_CONN_STATE_SLAVE_DIRECT_UNACKED     1
-#define BLE_GAP_CONN_STATE_SLAVE_DIRECT_ACKED       2
-
 int ble_gap_conn_initiate_direct(int addr_type, uint8_t *addr);
 int ble_gap_conn_advertise_direct(int addr_type, uint8_t *addr);
-int ble_gap_conn_rx_ack_create_conn(struct ble_hs_ack *ack);
 int ble_gap_conn_rx_conn_complete(struct hci_le_conn_complete *evt);
-int ble_gap_conn_rx_ack_set_adv_params(struct ble_hs_ack *ack);
+int ble_gap_conn_master_in_progress(void);
+int ble_gap_conn_slave_in_progress(void);
 int ble_gap_conn_init(void);
 
-extern int ble_gap_conn_state_master;
-extern int ble_gap_conn_state_slave;
-
 #endif

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/3fea5a99/net/nimble/host/src/ble_hs.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_hs.c b/net/nimble/host/src/ble_hs.c
index 626be94..ed99968 100644
--- a/net/nimble/host/src/ble_hs.c
+++ b/net/nimble/host/src/ble_hs.c
@@ -20,6 +20,7 @@
 #include "host/ble_hs.h"
 #include "ble_hs_att.h"
 #include "ble_hs_conn.h"
+#include "ble_hs_ack.h"
 #include "ble_gap_conn.h"
 
 #define HCI_CMD_BUFS        (8)
@@ -87,6 +88,8 @@ ble_hs_init(void)
     /* Initialize eventq */
     os_eventq_init(&g_ble_host_hci_evq);
 
+    host_hci_init();
+
     rc = ble_hs_conn_init();
     if (rc != 0) {
         return rc;
@@ -107,5 +110,7 @@ ble_hs_init(void)
         return rc;
     }
 
+    ble_hs_ack_init();
+
     return 0;
 }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/3fea5a99/net/nimble/host/src/ble_hs_ack.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_hs_ack.c b/net/nimble/host/src/ble_hs_ack.c
index a2860c4..5a9e2d0 100644
--- a/net/nimble/host/src/ble_hs_ack.c
+++ b/net/nimble/host/src/ble_hs_ack.c
@@ -14,6 +14,8 @@
  * limitations under the License.
  */
 
+#include <assert.h>
+#include <errno.h>
 #include <stddef.h>
 #include "nimble/ble.h"
 #include "nimble/hci_common.h"
@@ -21,50 +23,31 @@
 #include "ble_hs_conn.h"
 #include "ble_hs_ack.h"
 
-typedef int ble_hs_ack_rx_fn(struct ble_hs_ack *ack);
+static ble_hs_ack_fn *ble_hs_ack_cb;
+static void *ble_hs_ack_arg;
 
-struct ble_hs_ack_dispatch_entry {
-    uint8_t bhe_ocf;
-    ble_hs_ack_rx_fn *bhe_fn;
-};
-
-static const struct ble_hs_ack_dispatch_entry ble_hs_ack_dispatch[] = {
-    { BLE_HCI_OCF_LE_CREATE_CONN, ble_gap_conn_rx_ack_create_conn },
-    { BLE_HCI_OCF_LE_SET_ADV_PARAMS, ble_gap_conn_rx_ack_set_adv_params },
-};
-
-#define BLE_HS_ACK_DISPATCH_SZ  \
-    (sizeof ble_hs_ack_dispatch / sizeof ble_hs_ack_dispatch[0])
-
-static const struct ble_hs_ack_dispatch_entry *
-ble_hs_ack_find_dispatch_entry(uint16_t ocf)
+void
+ble_hs_ack_rx(struct ble_hs_ack *ack)
 {
-    const struct ble_hs_ack_dispatch_entry *entry;
-    int i;
+    ble_hs_ack_fn *cb;
 
-    for (i = 0; i < BLE_HS_ACK_DISPATCH_SZ; i++) {
-        entry = ble_hs_ack_dispatch + i;
-        if (entry->bhe_ocf == ocf) {
-            return entry;
-        }
-    }
+    if (ble_hs_ack_cb != NULL) {
+        cb = ble_hs_ack_cb;
+        ble_hs_ack_cb = NULL;
 
-    return NULL;
+        cb(ack, ble_hs_ack_arg);
+    }
 }
 
-int
-ble_hs_ack_rx(struct ble_hs_ack *ack)
+void
+ble_hs_ack_set_callback(ble_hs_ack_fn *cb, void *arg)
 {
-    const struct ble_hs_ack_dispatch_entry *entry;
-    int rc;
-
-    entry = ble_hs_ack_find_dispatch_entry(ack->bha_ocf);
-    if (entry != NULL) {
-        rc = entry->bhe_fn(ack);
-        if (rc != 0) {
-            return rc;
-        }
-    }
+    ble_hs_ack_cb = cb;
+    ble_hs_ack_arg = arg;
+}
 
-    return 0;
+void
+ble_hs_ack_init(void)
+{
+    ble_hs_ack_set_callback(NULL, NULL);
 }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/3fea5a99/net/nimble/host/src/ble_hs_ack.h
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_hs_ack.h b/net/nimble/host/src/ble_hs_ack.h
index e06b7c9..af90d8f 100644
--- a/net/nimble/host/src/ble_hs_ack.h
+++ b/net/nimble/host/src/ble_hs_ack.h
@@ -26,6 +26,10 @@ struct ble_hs_ack {
     int bha_params_len;
 };
 
-int ble_hs_ack_rx(struct ble_hs_ack *ack);
+typedef void ble_hs_ack_fn(struct ble_hs_ack *ack, void *arg);
+
+void ble_hs_ack_rx(struct ble_hs_ack *ack);
+void ble_hs_ack_set_callback(ble_hs_ack_fn *cb, void *arg);
+void ble_hs_ack_init(void);
 
 #endif

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/3fea5a99/net/nimble/host/src/host_hci.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/host_hci.c b/net/nimble/host/src/host_hci.c
index d864426..74f0baf 100644
--- a/net/nimble/host/src/host_hci.c
+++ b/net/nimble/host/src/host_hci.c
@@ -137,7 +137,6 @@ host_hci_rx_cmd_complete(uint8_t event_code, uint8_t *data, int len)
     uint16_t opcode;
     uint8_t num_pkts;
     uint8_t *params;
-    int rc;
 
     if (len < BLE_HCI_EVENT_CMD_COMPLETE_HDR_LEN) {
         /* XXX: Increment stat. */
@@ -161,6 +160,7 @@ host_hci_rx_cmd_complete(uint8_t event_code, uint8_t *data, int len)
     if (opcode == host_hci_outstanding_opcode) {
         /* Mark the outstanding command as acked. */
         host_hci_outstanding_opcode = 0;
+        /* XXX: Stop timer. */
     }
 
     ack.bha_ocf = BLE_HCI_OCF(opcode);
@@ -172,10 +172,7 @@ host_hci_rx_cmd_complete(uint8_t event_code, uint8_t *data, int len)
         ack.bha_status = 255;
     }
 
-    rc = ble_hs_ack_rx(&ack);
-    if (rc != 0) {
-        return rc;
-    }
+    ble_hs_ack_rx(&ack);
 
     return 0;
 }
@@ -187,7 +184,6 @@ host_hci_rx_cmd_status(uint8_t event_code, uint8_t *data, int len)
     uint16_t opcode;
     uint8_t num_pkts;
     uint8_t status;
-    int rc;
 
     if (len < BLE_HCI_EVENT_CMD_STATUS_LEN) {
         /* XXX: Increment stat. */
@@ -212,6 +208,7 @@ host_hci_rx_cmd_status(uint8_t event_code, uint8_t *data, int len)
     if (opcode == host_hci_outstanding_opcode) {
         /* Mark the outstanding command as acked. */
         host_hci_outstanding_opcode = 0;
+        /* XXX: Stop timer. */
     }
 
     ack.bha_ocf = BLE_HCI_OCF(opcode);
@@ -219,10 +216,7 @@ host_hci_rx_cmd_status(uint8_t event_code, uint8_t *data, int len)
     ack.bha_params_len = 0;
     ack.bha_status = status;
 
-    rc = ble_hs_ack_rx(&ack);
-    if (rc != 0) {
-        return rc;
-    }
+    ble_hs_ack_rx(&ack);
 
     return 0;
 }
@@ -412,3 +406,9 @@ host_hci_data_rx(void *pkt, uint16_t len)
 
     return 0;
 }
+
+void
+host_hci_init(void)
+{
+    host_hci_outstanding_opcode = 0;
+}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/3fea5a99/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 fd564ba..b918a94 100644
--- a/net/nimble/host/src/host_hci_cmd.c
+++ b/net/nimble/host/src/host_hci_cmd.c
@@ -25,6 +25,7 @@
 #include "host/ble_hs.h"
 #include "host/host_hci.h"
 #include "host_dbg.h"
+#include "ble_hs_ack.h"
 #include "ble_hs_conn.h"
 #include "ble_l2cap.h"
 
@@ -45,6 +46,9 @@ host_hci_le_cmd_send(uint16_t ocf, uint8_t len, void *cmddata)
     uint8_t *cmd;
     uint16_t opcode;
 
+    /* Don't allow multiple commands "in flight." */
+    assert(host_hci_outstanding_opcode == 0);
+
     rc = -1;
     cmd = os_memblock_get(&g_hci_cmd_pool);
     if (cmd) {
@@ -157,7 +161,8 @@ host_hci_cmd_le_set_scan_rsp_data(uint8_t *data, uint8_t len)
     uint8_t cmd[BLE_HCI_MAX_SCAN_RSP_DATA_LEN + 1];
 
     /* Check for valid parameters */
-    if (((data == NULL) && (len != 0)) || (len > BLE_HCI_MAX_SCAN_RSP_DATA_LEN)) {
+    if (((data == NULL) && (len != 0)) ||
+         (len > BLE_HCI_MAX_SCAN_RSP_DATA_LEN)) {
         return BLE_ERR_INV_HCI_CMD_PARMS;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/3fea5a99/net/nimble/host/src/test/ble_host_hci_test.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/test/ble_host_hci_test.c b/net/nimble/host/src/test/ble_host_hci_test.c
index 803d18d..bf15a68 100644
--- a/net/nimble/host/src/test/ble_host_hci_test.c
+++ b/net/nimble/host/src/test/ble_host_hci_test.c
@@ -55,7 +55,7 @@ TEST_CASE(ble_host_hci_test_event_cmd_complete)
 
     /*** No error on NOP. */
     ble_hs_test_util_build_cmd_complete(buf, sizeof buf, 1, 1,
-                                              BLE_HCI_OPCODE_NOP);
+                                        BLE_HCI_OPCODE_NOP);
     rc = host_hci_event_rx(buf);
     TEST_ASSERT(rc == 0);
 

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/3fea5a99/net/nimble/host/src/test/ble_hs_conn_test.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/test/ble_hs_conn_test.c b/net/nimble/host/src/test/ble_hs_conn_test.c
index ad6ba38..5373a9b 100644
--- a/net/nimble/host/src/test/ble_hs_conn_test.c
+++ b/net/nimble/host/src/test/ble_hs_conn_test.c
@@ -32,7 +32,6 @@
 TEST_CASE(ble_hs_conn_test_master_direct_success)
 {
     struct hci_le_conn_complete evt;
-    struct ble_hs_ack ack;
     struct ble_hs_conn *conn;
     uint8_t addr[6] = { 1, 2, 3, 4, 5, 6 };
     int rc;
@@ -41,21 +40,17 @@ TEST_CASE(ble_hs_conn_test_master_direct_success)
     TEST_ASSERT_FATAL(rc == 0);
 
     /* Ensure no current or pending connections. */
-    TEST_ASSERT(ble_gap_conn_state_master == BLE_GAP_CONN_STATE_NULL);
+    TEST_ASSERT(!ble_gap_conn_master_in_progress());
     TEST_ASSERT(ble_hs_conn_first() == NULL);
 
     /* Initiate connection. */
     rc = ble_gap_conn_initiate_direct(0, addr);
     TEST_ASSERT(rc == 0);
-    TEST_ASSERT(ble_gap_conn_state_master != BLE_GAP_CONN_STATE_NULL);
+    TEST_ASSERT(ble_gap_conn_master_in_progress());
 
     /* Receive command status event. */
-    memset(&ack, 0, sizeof ack);
-    ack.bha_ocf = BLE_HCI_OCF_LE_CREATE_CONN;
-    ack.bha_status = BLE_ERR_SUCCESS;
-    rc = ble_hs_ack_rx(&ack);
-    TEST_ASSERT(rc == 0);
-    TEST_ASSERT(ble_gap_conn_state_master != BLE_GAP_CONN_STATE_NULL);
+    ble_hs_test_util_rx_ack(BLE_HCI_OCF_LE_CREATE_CONN, BLE_ERR_SUCCESS);
+    TEST_ASSERT(ble_gap_conn_master_in_progress());
 
     /* Receive successful connection complete event. */
     memset(&evt, 0, sizeof evt);
@@ -65,7 +60,7 @@ TEST_CASE(ble_hs_conn_test_master_direct_success)
     memcpy(evt.peer_addr, addr, 6);
     rc = ble_gap_conn_rx_conn_complete(&evt);
     TEST_ASSERT(rc == 0);
-    TEST_ASSERT(ble_gap_conn_state_master == BLE_GAP_CONN_STATE_NULL);
+    TEST_ASSERT(!ble_gap_conn_master_in_progress());
 
     conn = ble_hs_conn_first();
     TEST_ASSERT_FATAL(conn != NULL);
@@ -77,7 +72,6 @@ TEST_CASE(ble_hs_conn_test_master_direct_success)
 TEST_CASE(ble_hs_conn_test_master_direct_hci_errors)
 {
     struct hci_le_conn_complete evt;
-    struct ble_hs_ack ack;
     uint8_t addr[6] = { 1, 2, 3, 4, 5, 6 };
     int rc;
 
@@ -85,13 +79,13 @@ TEST_CASE(ble_hs_conn_test_master_direct_hci_errors)
     TEST_ASSERT_FATAL(rc == 0);
 
     /* Ensure no current or pending connections. */
-    TEST_ASSERT(ble_gap_conn_state_master == BLE_GAP_CONN_STATE_NULL);
+    TEST_ASSERT(!ble_gap_conn_master_in_progress());
     TEST_ASSERT(ble_hs_conn_first() == NULL);
 
     /* Initiate connection. */
     rc = ble_gap_conn_initiate_direct(0, addr);
     TEST_ASSERT(rc == 0);
-    TEST_ASSERT(ble_gap_conn_state_master != BLE_GAP_CONN_STATE_NULL);
+    TEST_ASSERT(ble_gap_conn_master_in_progress());
 
     /* Receive connection complete event without intervening command status. */
     memset(&evt, 0, sizeof evt);
@@ -101,21 +95,17 @@ TEST_CASE(ble_hs_conn_test_master_direct_hci_errors)
     memcpy(evt.peer_addr, addr, 6);
     rc = ble_gap_conn_rx_conn_complete(&evt);
     TEST_ASSERT(rc != 0);
-    TEST_ASSERT(ble_gap_conn_state_master != BLE_GAP_CONN_STATE_NULL);
+    TEST_ASSERT(ble_gap_conn_master_in_progress());
 
     /* Receive success command status event. */
-    memset(&ack, 0, sizeof ack);
-    ack.bha_ocf = BLE_HCI_OCF_LE_CREATE_CONN;
-    ack.bha_status = BLE_ERR_SUCCESS;
-    rc = ble_hs_ack_rx(&ack);
-    TEST_ASSERT(rc == 0);
-    TEST_ASSERT(ble_gap_conn_state_master != BLE_GAP_CONN_STATE_NULL);
+    ble_hs_test_util_rx_ack(BLE_HCI_OCF_LE_CREATE_CONN, BLE_ERR_SUCCESS);
+    TEST_ASSERT(ble_gap_conn_master_in_progress());
 
     /* Receive failure connection complete event. */
     evt.status = BLE_ERR_UNSPECIFIED;
     rc = ble_gap_conn_rx_conn_complete(&evt);
     TEST_ASSERT(rc == 0);
-    TEST_ASSERT(ble_gap_conn_state_master == BLE_GAP_CONN_STATE_NULL);
+    TEST_ASSERT(!ble_gap_conn_master_in_progress());
     TEST_ASSERT(ble_hs_conn_first() == NULL);
 }
 
@@ -123,7 +113,6 @@ TEST_CASE(ble_hs_conn_test_slave_direct_success)
 {
     struct hci_le_conn_complete evt;
     struct ble_hs_conn *conn;
-    struct ble_hs_ack ack;
     uint8_t addr[6] = { 1, 2, 3, 4, 5, 6 };
     int rc;
 
@@ -131,26 +120,25 @@ TEST_CASE(ble_hs_conn_test_slave_direct_success)
     TEST_ASSERT_FATAL(rc == 0);
 
     /* Ensure no current or pending connections. */
-    TEST_ASSERT(ble_gap_conn_state_master == BLE_GAP_CONN_STATE_NULL);
-    TEST_ASSERT(ble_gap_conn_state_slave == BLE_GAP_CONN_STATE_NULL);
+    TEST_ASSERT(!ble_gap_conn_master_in_progress());
+    TEST_ASSERT(!ble_gap_conn_slave_in_progress());
     TEST_ASSERT(ble_hs_conn_first() == NULL);
 
     /* Initiate advertising. */
     rc = ble_gap_conn_advertise_direct(0, addr);
     TEST_ASSERT(rc == 0);
-    TEST_ASSERT(ble_gap_conn_state_master == BLE_GAP_CONN_STATE_NULL);
-    TEST_ASSERT(ble_gap_conn_state_slave ==
-                BLE_GAP_CONN_STATE_SLAVE_DIRECT_UNACKED);
+    TEST_ASSERT(!ble_gap_conn_master_in_progress());
+    TEST_ASSERT(ble_gap_conn_slave_in_progress());
 
-    /* Receive command status event. */
-    memset(&ack, 0, sizeof ack);
-    ack.bha_ocf = BLE_HCI_OCF_LE_SET_ADV_PARAMS;
-    ack.bha_status = BLE_ERR_SUCCESS;
-    rc = ble_hs_ack_rx(&ack);
-    TEST_ASSERT(rc == 0);
-    TEST_ASSERT(ble_gap_conn_state_master == BLE_GAP_CONN_STATE_NULL);
-    TEST_ASSERT(ble_gap_conn_state_slave ==
-                BLE_GAP_CONN_STATE_SLAVE_DIRECT_ACKED);
+    /* Receive set-adv-params ack. */
+    ble_hs_test_util_rx_ack(BLE_HCI_OCF_LE_SET_ADV_PARAMS, BLE_ERR_SUCCESS);
+    TEST_ASSERT(!ble_gap_conn_master_in_progress());
+    TEST_ASSERT(ble_gap_conn_slave_in_progress());
+
+    /* Receive set-adv-enable ack. */
+    ble_hs_test_util_rx_ack(BLE_HCI_OCF_LE_SET_ADV_ENABLE, BLE_ERR_SUCCESS);
+    TEST_ASSERT(!ble_gap_conn_master_in_progress());
+    TEST_ASSERT(ble_gap_conn_slave_in_progress());
 
     /* Receive successful connection complete event. */
     memset(&evt, 0, sizeof evt);
@@ -160,8 +148,8 @@ TEST_CASE(ble_hs_conn_test_slave_direct_success)
     memcpy(evt.peer_addr, addr, 6);
     rc = ble_gap_conn_rx_conn_complete(&evt);
     TEST_ASSERT(rc == 0);
-    TEST_ASSERT(ble_gap_conn_state_master == BLE_GAP_CONN_STATE_NULL);
-    TEST_ASSERT(ble_gap_conn_state_slave == BLE_GAP_CONN_STATE_NULL);
+    TEST_ASSERT(!ble_gap_conn_master_in_progress());
+    TEST_ASSERT(!ble_gap_conn_slave_in_progress());
 
     conn = ble_hs_conn_first();
     TEST_ASSERT_FATAL(conn != NULL);

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/3fea5a99/net/nimble/host/src/test/ble_hs_test_util.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/test/ble_hs_test_util.c b/net/nimble/host/src/test/ble_hs_test_util.c
index e294a54..555b22c 100644
--- a/net/nimble/host/src/test/ble_hs_test_util.c
+++ b/net/nimble/host/src/test/ble_hs_test_util.c
@@ -18,6 +18,7 @@
 #include "nimble/ble.h"
 #include "nimble/hci_common.h"
 #include "testutil/testutil.h"
+#include "host/host_hci.h"
 #include "ble_hs_ack.h"
 #include "ble_gap_conn.h"
 #include "ble_hs_test_util.h"
@@ -53,17 +54,12 @@ void
 ble_hs_test_util_create_conn(uint16_t handle, uint8_t *addr)
 {
     struct hci_le_conn_complete evt;
-    struct ble_hs_ack ack;
     int rc;
 
     rc = ble_gap_conn_initiate_direct(0, addr);
     TEST_ASSERT(rc == 0);
 
-    memset(&ack, 0, sizeof ack);
-    ack.bha_ocf = BLE_HCI_OCF_LE_CREATE_CONN;
-    ack.bha_status = BLE_ERR_SUCCESS;
-    rc = ble_gap_conn_rx_ack_create_conn(&ack);
-    TEST_ASSERT(rc == 0);
+    ble_hs_test_util_rx_ack(BLE_HCI_OCF_LE_CREATE_CONN, BLE_ERR_SUCCESS);
 
     memset(&evt, 0, sizeof evt);
     evt.subevent_code = BLE_HCI_LE_SUBEV_CONN_COMPLETE;
@@ -72,3 +68,15 @@ ble_hs_test_util_create_conn(uint16_t handle, uint8_t *addr)
     memcpy(evt.peer_addr, addr, 6);
     rc = ble_gap_conn_rx_conn_complete(&evt);
 }
+
+void
+ble_hs_test_util_rx_ack(uint16_t ocf, uint8_t status)
+{
+    uint8_t buf[BLE_HCI_EVENT_CMD_STATUS_LEN];
+    int rc;
+
+    ble_hs_test_util_build_cmd_status(buf, sizeof buf, status, 1,
+                                      (BLE_HCI_OGF_LE << 10) | ocf);
+    rc = host_hci_event_rx(buf);
+    TEST_ASSERT(rc == 0);
+}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/3fea5a99/net/nimble/host/src/test/ble_hs_test_util.h
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/test/ble_hs_test_util.h b/net/nimble/host/src/test/ble_hs_test_util.h
index 5f75aac..a2d5c19 100644
--- a/net/nimble/host/src/test/ble_hs_test_util.h
+++ b/net/nimble/host/src/test/ble_hs_test_util.h
@@ -26,5 +26,6 @@ void ble_hs_test_util_build_cmd_status(uint8_t *dst, int len,
                                        uint8_t status, uint8_t num_pkts,
                                        uint16_t opcode);
 void ble_hs_test_util_create_conn(uint16_t handle, uint8_t *addr);
+void ble_hs_test_util_rx_ack(uint16_t ocf, uint8_t status);
 
 #endif