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/12/18 21:23:23 UTC

[1/3] incubator-mynewt-larva git commit: Replace ble_hs rx and tx tpq with mqueue.

Repository: incubator-mynewt-larva
Updated Branches:
  refs/heads/master aa8482eba -> ecb584ed0


Replace ble_hs rx and tx tpq with mqueue.


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

Branch: refs/heads/master
Commit: 7f94b34354dd48bd1bf9f68393dfe812db2500bc
Parents: aa8482e
Author: Christopher Collins <cc...@gmail.com>
Authored: Fri Dec 18 11:12:10 2015 -0800
Committer: Christopher Collins <cc...@gmail.com>
Committed: Fri Dec 18 11:12:10 2015 -0800

----------------------------------------------------------------------
 net/nimble/host/src/ble_hs.c      | 109 +++++++++------------------------
 net/nimble/host/src/ble_hs_priv.h |   2 -
 2 files changed, 29 insertions(+), 82 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/7f94b343/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 cfac981..c7473d0 100644
--- a/net/nimble/host/src/ble_hs.c
+++ b/net/nimble/host/src/ble_hs.c
@@ -60,8 +60,6 @@ static os_membuf_t g_hci_cmd_buf[OS_MEMPOOL_SIZE(HCI_CMD_BUFS,
 #define BLE_HS_MBUF_MEMPOOL_SIZE                                 \
     OS_MEMPOOL_SIZE(BLE_HS_NUM_MBUFS, BLE_HS_MBUF_MEMBLOCK_SIZE)
 
-#define BLE_HS_PKT_MAX              BLE_HS_NUM_MBUFS
-
 struct os_mempool g_hci_os_event_pool;
 static os_membuf_t g_hci_os_event_buf[OS_MEMPOOL_SIZE(HCI_NUM_OS_EVENTS,
                                                       HCI_OS_EVENT_BUF_SIZE)];
@@ -75,46 +73,30 @@ struct os_eventq ble_hs_evq;
 static struct os_event ble_hs_kick_hci_ev;
 static struct os_event ble_hs_kick_gatt_ev;
 
-struct ble_hs_pkt {
-    struct tpq_elem bhp_tpq_elem;
-    struct os_mbuf *bhp_om;
-};
-static void *ble_hs_pkt_mem;
-static struct os_mempool ble_hs_pkt_pool;
-
-static struct tpq ble_hs_rx_q;
-static struct tpq ble_hs_tx_q;
+static struct os_mqueue ble_hs_rx_q;
+static struct os_mqueue ble_hs_tx_q;
 
 void
 ble_hs_process_tx_data_queue(void)
 {
-    struct ble_hs_pkt *pkt;
-    struct tpq_elem *tpq_elem;
-
-    while ((tpq_elem = tpq_get(&ble_hs_tx_q)) != NULL) {
-        pkt = (void *)tpq_elem;
+    struct os_mbuf *om;
 
+    while ((om = os_mqueue_get(&ble_hs_tx_q)) != NULL) {
 #ifdef PHONY_TRANSPORT
-        ble_hs_test_pkt_txed(pkt->bhp_om);
+        ble_hs_test_pkt_txed(om);
 #else
-        ble_hci_transport_host_acl_data_send(pkt->bhp_om);
+        ble_hci_transport_host_acl_data_send(om);
 #endif
-
-        os_memblock_put(&ble_hs_pkt_pool, pkt);
     }
 }
 
 static void
 ble_hs_process_rx_data_queue(void)
 {
-    struct ble_hs_pkt *pkt;
-    struct tpq_elem *tpq_elem;
-
-    while ((tpq_elem = tpq_get(&ble_hs_rx_q)) != NULL) {
-        pkt = (void *)tpq_elem;
-        host_hci_data_rx(pkt->bhp_om);
+    struct os_mbuf *om;
 
-        os_memblock_put(&ble_hs_pkt_pool, pkt);
+    while ((om = os_mqueue_get(&ble_hs_rx_q)) != NULL) {
+        host_hci_data_rx(om);
     }
 }
 
@@ -142,12 +124,9 @@ ble_hs_task_handler(void *arg)
             host_hci_os_event_proc(ev);
             break;
 
-        case BLE_HS_RX_DATA_EVENT:
-            ble_hs_process_rx_data_queue();
-            break;
-
-        case BLE_HS_TX_DATA_EVENT:
+        case OS_EVENT_T_MQUEUE_DATA:
             ble_hs_process_tx_data_queue();
+            ble_hs_process_rx_data_queue();
             break;
 
         case BLE_HS_KICK_HCI_EVENT:
@@ -177,34 +156,26 @@ ble_hs_task_handler(void *arg)
 int
 ble_hs_rx_data(struct os_mbuf *om)
 {
-    struct ble_hs_pkt *pkt;
+    int rc;
 
-    pkt = os_memblock_get(&ble_hs_pkt_pool);
-    if (pkt == NULL) {
-        os_mbuf_free_chain(om);
-        return BLE_HS_ENOMEM;
+    rc = os_mqueue_put(&ble_hs_rx_q, &ble_hs_evq, om);
+    if (rc != 0) {
+        return BLE_HS_EOS;
     }
 
-    pkt->bhp_om = om;
-    tpq_put(&ble_hs_evq, &ble_hs_rx_q, &pkt->bhp_tpq_elem);
-
     return 0;
 }
 
 int
 ble_hs_tx_data(struct os_mbuf *om)
 {
-    struct ble_hs_pkt *pkt;
+    int rc;
 
-    pkt = os_memblock_get(&ble_hs_pkt_pool);
-    if (pkt == NULL) {
-        os_mbuf_free_chain(om);
-        return BLE_HS_ENOMEM;
+    rc = os_mqueue_put(&ble_hs_tx_q, &ble_hs_evq, om);
+    if (rc != 0) {
+        return BLE_HS_EOS;
     }
 
-    pkt->bhp_om = om;
-    tpq_put(&ble_hs_evq, &ble_hs_tx_q, &pkt->bhp_tpq_elem);
-
     return 0;
 }
 
@@ -226,13 +197,6 @@ ble_hs_kick_gatt(void)
     os_eventq_put(&ble_hs_evq, &ble_hs_kick_gatt_ev);
 }
 
-static void
-ble_hs_free_mem(void)
-{
-    free(ble_hs_pkt_mem);
-    ble_hs_pkt_mem = NULL;
-}
-
 /**
  * Initializes the host portion of the BLE stack.
  */
@@ -241,8 +205,6 @@ ble_hs_init(uint8_t prio)
 {
     int rc;
 
-    ble_hs_free_mem();
-
     ble_hs_cfg_init();
 
     /* Create memory pool of command buffers */
@@ -266,53 +228,44 @@ ble_hs_init(uint8_t prio)
                          BLE_HS_MBUF_MEMBLOCK_SIZE,
                          ble_hs_mbuf_mem, "ble_hs_mbuf_pool");
     if (rc != 0) {
-        rc = BLE_HS_EOS;
-        goto err;
+        return BLE_HS_EOS;
     }
     rc = os_mbuf_pool_init(&ble_hs_mbuf_pool, &ble_hs_mbuf_mempool,
                            BLE_HS_MBUF_MEMBLOCK_SIZE, BLE_HS_NUM_MBUFS);
     if (rc != 0) {
-        rc = BLE_HS_EOS;
-        goto err;
-    }
-
-    rc = ble_hs_misc_malloc_mempool(&ble_hs_pkt_mem, &ble_hs_pkt_pool,
-                                    BLE_HS_PKT_MAX, sizeof (struct ble_hs_pkt),
-                                    "ble_hs_pkt_pool");
-    if (rc != 0) {
-        goto err;
+        return BLE_HS_EOS;
     }
 
     rc = ble_hs_conn_init();
     if (rc != 0) {
-        goto err;
+        return rc;
     }
 
     rc = ble_l2cap_init();
     if (rc != 0) {
-        goto err;
+        return rc;
     }
 
     rc = ble_att_svr_init();
     if (rc != 0) {
-        goto err;
+        return rc;
     }
 
     rc = ble_gap_conn_init();
     if (rc != 0) {
-        goto err;
+        return rc;
     }
 
     ble_hci_ack_init();
 
     rc = ble_hci_sched_init();
     if (rc != 0) {
-        goto err;
+        return rc;
     }
 
     rc = ble_gatt_init();
     if (rc != 0) {
-        goto err;
+        return rc;
     }
 
     ble_hs_kick_hci_ev.ev_queued = 0;
@@ -326,12 +279,8 @@ ble_hs_init(uint8_t prio)
     os_task_init(&ble_hs_task, "ble_hs", ble_hs_task_handler, NULL, prio,
                  OS_WAIT_FOREVER, ble_hs_stack, BLE_HS_STACK_SIZE);
 
-    tpq_init(&ble_hs_rx_q, BLE_HS_RX_DATA_EVENT, NULL);
-    tpq_init(&ble_hs_tx_q, BLE_HS_TX_DATA_EVENT, NULL);
+    os_mqueue_init(&ble_hs_rx_q, NULL);
+    os_mqueue_init(&ble_hs_tx_q, NULL);
 
     return 0;
-
-err:
-    ble_hs_free_mem();
-    return rc;
 }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/7f94b343/net/nimble/host/src/ble_hs_priv.h
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_hs_priv.h b/net/nimble/host/src/ble_hs_priv.h
index 4c36e0d..80b5997 100644
--- a/net/nimble/host/src/ble_hs_priv.h
+++ b/net/nimble/host/src/ble_hs_priv.h
@@ -25,8 +25,6 @@ struct os_mempool;
 #define BLE_HOST_HCI_EVENT_CTLR_EVENT   (OS_EVENT_T_PERUSER + 0)
 #define BLE_HS_KICK_HCI_EVENT           (OS_EVENT_T_PERUSER + 1)
 #define BLE_HS_KICK_GATT_EVENT          (OS_EVENT_T_PERUSER + 2)
-#define BLE_HS_RX_DATA_EVENT            (OS_EVENT_T_PERUSER + 3)
-#define BLE_HS_TX_DATA_EVENT            (OS_EVENT_T_PERUSER + 4)
 
 extern struct os_mbuf_pool ble_hs_mbuf_pool;
 extern struct os_eventq ble_hs_evq;


[2/3] incubator-mynewt-larva git commit: Fix startup sequence.

Posted by cc...@apache.org.
Fix startup sequence.


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

Branch: refs/heads/master
Commit: 3171a5ca72898a18c36c21a755ac769aa3fe68c6
Parents: 7f94b34
Author: Christopher Collins <cc...@gmail.com>
Authored: Fri Dec 18 11:42:27 2015 -0800
Committer: Christopher Collins <cc...@gmail.com>
Committed: Fri Dec 18 11:42:27 2015 -0800

----------------------------------------------------------------------
 net/nimble/host/include/host/host_hci.h     |   1 +
 net/nimble/host/src/ble_hs_startup.c        | 145 ++++++++++++++++++-----
 net/nimble/host/src/host_hci_cmd.c          |  16 +++
 net/nimble/host/src/test/ble_hs_test_util.c |   7 +-
 4 files changed, 139 insertions(+), 30 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/3171a5ca/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 518803a..0ee00f8 100644
--- a/net/nimble/host/include/host/host_hci.h
+++ b/net/nimble/host/include/host/host_hci.h
@@ -43,6 +43,7 @@ int host_hci_cmd_le_clear_whitelist(void);
 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_cmd_reset(void);
 
 int host_hci_set_buf_size(uint16_t pktlen, uint8_t max_pkts);
 

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/3171a5ca/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 49b6e80..d0e071d 100644
--- a/net/nimble/host/src/ble_hs_startup.c
+++ b/net/nimble/host/src/ble_hs_startup.c
@@ -23,12 +23,14 @@
 #include "ble_hs_startup.h"
 
 #define BLE_HS_STARTUP_STATE_IDLE                       0
-#define BLE_HS_STARTUP_STATE_READ_BUF_SIZE              1
-#define BLE_HS_STARTUP_STATE_READ_BUF_SIZE_ACKED        2
+#define BLE_HS_STARTUP_STATE_RESET                      1
+#define BLE_HS_STARTUP_STATE_RESET_ACKED                2
 #define BLE_HS_STARTUP_STATE_SET_EVENT_MASK             3
 #define BLE_HS_STARTUP_STATE_SET_EVENT_MASK_ACKED       4
-#define BLE_HS_STARTUP_STATE_SET_LE_EVENT_MASK          5
-#define BLE_HS_STARTUP_STATE_SET_LE_EVENT_MASK_ACKED    6
+#define BLE_HS_STARTUP_STATE_LE_SET_EVENT_MASK          5
+#define BLE_HS_STARTUP_STATE_LE_SET_EVENT_MASK_ACKED    6
+#define BLE_HS_STARTUP_STATE_LE_READ_BUF_SIZE           7
+#define BLE_HS_STARTUP_STATE_LE_READ_BUF_SIZE_ACKED     8
 
 static uint8_t ble_hs_startup_state;
 
@@ -40,31 +42,50 @@ ble_hs_startup_failure(int status)
 }
 
 static void
-ble_hs_startup_set_event_mask_ack(struct ble_hci_ack *ack, void *arg)
+ble_hs_startup_read_buf_size_ack(struct ble_hci_ack *ack, void *arg)
 {
-    assert(ble_hs_startup_state == BLE_HS_STARTUP_STATE_SET_EVENT_MASK);
+    uint16_t pktlen;
+    uint8_t max_pkts;
+    int rc;
+
+    assert(ble_hs_startup_state ==
+           BLE_HS_STARTUP_STATE_LE_READ_BUF_SIZE_ACKED - 1);
 
     if (ack->bha_status != 0) {
         ble_hs_startup_failure(ack->bha_status);
         return;
     }
 
-    ble_hs_startup_state = BLE_HS_STARTUP_STATE_SET_EVENT_MASK_ACKED;
+    if (ack->bha_params_len != BLE_HCI_RD_BUF_SIZE_RSPLEN + 1) {
+        ble_hs_startup_failure(BLE_HS_EBADDATA);
+        return;
+    }
 
-    /* XXX: Send LE Set event mask. */
+    pktlen = le16toh(ack->bha_params + 1);
+    max_pkts = ack->bha_params[3];
+
+    rc = host_hci_set_buf_size(pktlen, max_pkts);
+    if (rc != 0) {
+        ble_hs_startup_failure(rc);
+        return;
+    }
+
+    ble_hs_startup_state = BLE_HS_STARTUP_STATE_LE_READ_BUF_SIZE_ACKED;
+
+    /* XXX: Send read buffer size. */
 }
 
 static int
-ble_hs_startup_set_event_mask_tx(void *arg)
+ble_hs_startup_le_read_buf_size_tx(void *arg)
 {
     int rc;
 
-    assert(ble_hs_startup_state == BLE_HS_STARTUP_STATE_READ_BUF_SIZE_ACKED);
+    assert(ble_hs_startup_state == BLE_HS_STARTUP_STATE_LE_READ_BUF_SIZE - 1);
 
-    ble_hs_startup_state = BLE_HS_STARTUP_STATE_SET_EVENT_MASK;
-    ble_hci_ack_set_callback(ble_hs_startup_set_event_mask_ack, NULL);
+    ble_hs_startup_state = BLE_HS_STARTUP_STATE_LE_READ_BUF_SIZE;
+    ble_hci_ack_set_callback(ble_hs_startup_read_buf_size_ack, NULL);
 
-    rc = host_hci_cmd_set_event_mask(0x20001fffffffffff);
+    rc = host_hci_cmd_le_read_buffer_size();
     if (rc != 0) {
         return rc;
     }
@@ -73,34 +94,99 @@ ble_hs_startup_set_event_mask_tx(void *arg)
 }
 
 static void
-ble_hs_startup_read_buf_size_ack(struct ble_hci_ack *ack, void *arg)
+ble_hs_startup_le_set_event_mask_ack(struct ble_hci_ack *ack, void *arg)
 {
-    uint16_t pktlen;
-    uint8_t max_pkts;
     int rc;
 
-    assert(ble_hs_startup_state == BLE_HS_STARTUP_STATE_READ_BUF_SIZE);
+    assert(ble_hs_startup_state ==
+           BLE_HS_STARTUP_STATE_LE_SET_EVENT_MASK_ACKED - 1);
 
     if (ack->bha_status != 0) {
         ble_hs_startup_failure(ack->bha_status);
         return;
     }
 
-    if (ack->bha_params_len != BLE_HCI_RD_BUF_SIZE_RSPLEN + 1) {
-        ble_hs_startup_failure(BLE_HS_EBADDATA);
+    ble_hs_startup_state = BLE_HS_STARTUP_STATE_LE_SET_EVENT_MASK_ACKED;
+
+    /* XXX: Send LE Set event mask. */
+    rc = ble_hci_sched_enqueue(ble_hs_startup_le_read_buf_size_tx, NULL);
+    if (rc != 0) {
+        ble_hs_startup_failure(rc);
         return;
     }
+}
 
-    pktlen = le16toh(ack->bha_params + 1);
-    max_pkts = ack->bha_params[3];
+static int
+ble_hs_startup_le_set_event_mask_tx(void *arg)
+{
+    int rc;
 
-    rc = host_hci_set_buf_size(pktlen, max_pkts);
+    assert(ble_hs_startup_state == BLE_HS_STARTUP_STATE_LE_SET_EVENT_MASK - 1);
+
+    ble_hs_startup_state = BLE_HS_STARTUP_STATE_LE_SET_EVENT_MASK;
+    ble_hci_ack_set_callback(ble_hs_startup_le_set_event_mask_ack, NULL);
+
+    rc = host_hci_cmd_le_set_event_mask(0x000000000000001f);
+    if (rc != 0) {
+        return rc;
+    }
+
+    return 0;
+}
+
+static void
+ble_hs_startup_set_event_mask_ack(struct ble_hci_ack *ack, void *arg)
+{
+    int rc;
+
+    assert(ble_hs_startup_state ==
+           BLE_HS_STARTUP_STATE_SET_EVENT_MASK_ACKED - 1);
+
+    if (ack->bha_status != 0) {
+        ble_hs_startup_failure(ack->bha_status);
+        return;
+    }
+
+    ble_hs_startup_state = BLE_HS_STARTUP_STATE_SET_EVENT_MASK_ACKED;
+
+    rc = ble_hci_sched_enqueue(ble_hs_startup_le_set_event_mask_tx, NULL);
     if (rc != 0) {
         ble_hs_startup_failure(rc);
         return;
     }
+}
+
+static int
+ble_hs_startup_set_event_mask_tx(void *arg)
+{
+    int rc;
+
+    assert(ble_hs_startup_state == BLE_HS_STARTUP_STATE_SET_EVENT_MASK - 1);
+
+    ble_hs_startup_state = BLE_HS_STARTUP_STATE_SET_EVENT_MASK;
+    ble_hci_ack_set_callback(ble_hs_startup_set_event_mask_ack, NULL);
+
+    rc = host_hci_cmd_set_event_mask(0x20001fffffffffff);
+    if (rc != 0) {
+        return rc;
+    }
+
+    return 0;
+}
+
+static void
+ble_hs_startup_reset_ack(struct ble_hci_ack *ack, void *arg)
+{
+    int rc;
+
+    assert(ble_hs_startup_state == BLE_HS_STARTUP_STATE_RESET_ACKED - 1);
+
+    if (ack->bha_status != 0) {
+        ble_hs_startup_failure(ack->bha_status);
+        return;
+    }
 
-    ble_hs_startup_state = BLE_HS_STARTUP_STATE_READ_BUF_SIZE_ACKED;
+    ble_hs_startup_state = BLE_HS_STARTUP_STATE_RESET_ACKED;
 
     rc = ble_hci_sched_enqueue(ble_hs_startup_set_event_mask_tx, NULL);
     if (rc != 0) {
@@ -109,17 +195,18 @@ ble_hs_startup_read_buf_size_ack(struct ble_hci_ack *ack, void *arg)
     }
 }
 
+
 static int
-ble_hs_startup_read_buf_size_tx(void *arg)
+ble_hs_startup_reset_tx(void *arg)
 {
     int rc;
 
-    assert(ble_hs_startup_state == BLE_HS_STARTUP_STATE_IDLE);
+    assert(ble_hs_startup_state == BLE_HS_STARTUP_STATE_RESET - 1);
 
-    ble_hs_startup_state = BLE_HS_STARTUP_STATE_READ_BUF_SIZE;
-    ble_hci_ack_set_callback(ble_hs_startup_read_buf_size_ack, NULL);
+    ble_hs_startup_state = BLE_HS_STARTUP_STATE_RESET;
+    ble_hci_ack_set_callback(ble_hs_startup_reset_ack, NULL);
 
-    rc = host_hci_cmd_le_read_buffer_size();
+    rc = host_hci_cmd_reset();
     if (rc != 0) {
         return rc;
     }
@@ -134,7 +221,7 @@ ble_hs_startup_go(void)
 
     ble_hs_startup_state = BLE_HS_STARTUP_STATE_IDLE;
 
-    rc = ble_hci_sched_enqueue(ble_hs_startup_read_buf_size_tx, NULL);
+    rc = ble_hci_sched_enqueue(ble_hs_startup_reset_tx, NULL);
     if (rc != 0) {
         ble_hs_startup_failure(rc);
         return rc;

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/3171a5ca/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 5f164ff..4b7fb94 100644
--- a/net/nimble/host/src/host_hci_cmd.c
+++ b/net/nimble/host/src/host_hci_cmd.c
@@ -32,6 +32,7 @@ static int
 host_hci_cmd_transport(uint8_t *cmdbuf)
 {
 #ifdef ARCH_sim
+    os_memblock_put(&g_hci_cmd_pool, cmdbuf);
     return 0;
 #else
     return ble_hci_transport_host_cmd_send(cmdbuf);
@@ -479,3 +480,18 @@ host_hci_cmd_le_rmv_from_whitelist(uint8_t *addr, uint8_t addr_type)
                                        BLE_HCI_OCF_LE_RMV_WHITE_LIST);
     return rc;
 }
+
+/**
+ * Reset the controller and link manager.
+ * 
+ * @return int 
+ */
+int
+host_hci_cmd_reset(void)
+{
+    int rc;
+
+    rc = host_hci_cmd_send(BLE_HCI_OGF_CTLR_BASEBAND, BLE_HCI_OCF_CB_RESET, 0,
+                           NULL);
+    return rc;
+}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/3171a5ca/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 b7518bd..7887dcb 100644
--- a/net/nimble/host/src/test/ble_hs_test_util.c
+++ b/net/nimble/host/src/test/ble_hs_test_util.c
@@ -182,10 +182,15 @@ ble_hs_test_util_rx_startup_acks(void)
     /* Receive acknowledgements for the startup sequence.  We sent the
      * corresponding requests when the host task was started.
      */
-    ble_hs_test_util_rx_hci_buf_size_ack(0xffff);
+    ble_hs_test_util_rx_ack(
+        (BLE_HCI_OGF_CTLR_BASEBAND << 10) | BLE_HCI_OCF_CB_RESET, 0);
     ble_hs_test_util_rx_ack(
         (BLE_HCI_OGF_CTLR_BASEBAND << 10) | BLE_HCI_OCF_CB_SET_EVENT_MASK,
         0);
+    ble_hs_test_util_rx_ack(
+        (BLE_HCI_OGF_LE << 10) | BLE_HCI_OCF_LE_SET_EVENT_MASK,
+        0);
+    ble_hs_test_util_rx_hci_buf_size_ack(0xffff);
 }
 
 void


[3/3] incubator-mynewt-larva git commit: Reduce startup code with generic HCI ack fn.

Posted by cc...@apache.org.
Reduce startup code with generic HCI ack fn.


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

Branch: refs/heads/master
Commit: ecb584ed0a82d06583c0827a253b1ac24c065aa0
Parents: 3171a5c
Author: Christopher Collins <cc...@gmail.com>
Authored: Fri Dec 18 12:22:35 2015 -0800
Committer: Christopher Collins <cc...@gmail.com>
Committed: Fri Dec 18 12:22:35 2015 -0800

----------------------------------------------------------------------
 net/nimble/host/src/ble_hs_startup.c | 176 ++++++++++++------------------
 1 file changed, 71 insertions(+), 105 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-larva/blob/ecb584ed/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 d0e071d..9f6a20a 100644
--- a/net/nimble/host/src/ble_hs_startup.c
+++ b/net/nimble/host/src/ble_hs_startup.c
@@ -24,16 +24,28 @@
 
 #define BLE_HS_STARTUP_STATE_IDLE                       0
 #define BLE_HS_STARTUP_STATE_RESET                      1
-#define BLE_HS_STARTUP_STATE_RESET_ACKED                2
-#define BLE_HS_STARTUP_STATE_SET_EVENT_MASK             3
-#define BLE_HS_STARTUP_STATE_SET_EVENT_MASK_ACKED       4
-#define BLE_HS_STARTUP_STATE_LE_SET_EVENT_MASK          5
-#define BLE_HS_STARTUP_STATE_LE_SET_EVENT_MASK_ACKED    6
-#define BLE_HS_STARTUP_STATE_LE_READ_BUF_SIZE           7
-#define BLE_HS_STARTUP_STATE_LE_READ_BUF_SIZE_ACKED     8
+#define BLE_HS_STARTUP_STATE_SET_EVMASK                 2
+#define BLE_HS_STARTUP_STATE_LE_SET_EVMASK              3
+#define BLE_HS_STARTUP_STATE_LE_READ_BUF_SZ             4
+#define BLE_HS_STARTUP_STATE_MAX                        5
 
 static uint8_t ble_hs_startup_state;
 
+static int ble_hs_startup_reset_tx(void *arg);
+static int ble_hs_startup_set_evmask_tx(void *arg);
+static int ble_hs_startup_le_set_evmask_tx(void *arg);
+static int ble_hs_startup_le_read_buf_sz_tx(void *arg);
+
+static ble_hci_sched_tx_fn * const
+    ble_hs_startup_dispatch[BLE_HS_STARTUP_STATE_MAX] = {
+
+    [BLE_HS_STARTUP_STATE_IDLE]             = NULL,
+    [BLE_HS_STARTUP_STATE_RESET]            = ble_hs_startup_reset_tx,
+    [BLE_HS_STARTUP_STATE_SET_EVMASK]       = ble_hs_startup_set_evmask_tx,
+    [BLE_HS_STARTUP_STATE_LE_SET_EVMASK]    = ble_hs_startup_le_set_evmask_tx,
+    [BLE_HS_STARTUP_STATE_LE_READ_BUF_SZ]   = ble_hs_startup_le_read_buf_sz_tx,
+};
+
 static void
 ble_hs_startup_failure(int status)
 {
@@ -41,6 +53,42 @@ ble_hs_startup_failure(int status)
     /* XXX: Signal failure. */
 }
 
+static int
+ble_hs_startup_enqueue_tx(void)
+{
+    ble_hci_sched_tx_fn *tx_fn;
+    int rc;
+
+    if (ble_hs_startup_state == BLE_HS_STARTUP_STATE_MAX) {
+        return 0;
+    }
+
+    tx_fn = ble_hs_startup_dispatch[ble_hs_startup_state];
+    assert(tx_fn != NULL);
+
+    rc = ble_hci_sched_enqueue(tx_fn, NULL);
+    if (rc != 0) {
+        ble_hs_startup_failure(rc);
+        return rc;
+    }
+
+    return 0;
+}
+
+static void
+ble_hs_startup_gen_ack(struct ble_hci_ack *ack, void *arg)
+{
+    assert(ble_hs_startup_state < BLE_HS_STARTUP_STATE_MAX);
+
+    if (ack->bha_status != 0) {
+        ble_hs_startup_failure(ack->bha_status);
+        return;
+    }
+
+    ble_hs_startup_state++;
+    ble_hs_startup_enqueue_tx();
+}
+
 static void
 ble_hs_startup_read_buf_size_ack(struct ble_hci_ack *ack, void *arg)
 {
@@ -48,8 +96,7 @@ ble_hs_startup_read_buf_size_ack(struct ble_hci_ack *ack, void *arg)
     uint8_t max_pkts;
     int rc;
 
-    assert(ble_hs_startup_state ==
-           BLE_HS_STARTUP_STATE_LE_READ_BUF_SIZE_ACKED - 1);
+    assert(ble_hs_startup_state == BLE_HS_STARTUP_STATE_LE_READ_BUF_SZ);
 
     if (ack->bha_status != 0) {
         ble_hs_startup_failure(ack->bha_status);
@@ -70,21 +117,18 @@ ble_hs_startup_read_buf_size_ack(struct ble_hci_ack *ack, void *arg)
         return;
     }
 
-    ble_hs_startup_state = BLE_HS_STARTUP_STATE_LE_READ_BUF_SIZE_ACKED;
-
-    /* XXX: Send read buffer size. */
+    ble_hs_startup_state++;
+    ble_hs_startup_enqueue_tx();
 }
 
 static int
-ble_hs_startup_le_read_buf_size_tx(void *arg)
+ble_hs_startup_le_read_buf_sz_tx(void *arg)
 {
     int rc;
 
-    assert(ble_hs_startup_state == BLE_HS_STARTUP_STATE_LE_READ_BUF_SIZE - 1);
+    assert(ble_hs_startup_state == BLE_HS_STARTUP_STATE_LE_READ_BUF_SZ);
 
-    ble_hs_startup_state = BLE_HS_STARTUP_STATE_LE_READ_BUF_SIZE;
     ble_hci_ack_set_callback(ble_hs_startup_read_buf_size_ack, NULL);
-
     rc = host_hci_cmd_le_read_buffer_size();
     if (rc != 0) {
         return rc;
@@ -93,39 +137,14 @@ ble_hs_startup_le_read_buf_size_tx(void *arg)
     return 0;
 }
 
-static void
-ble_hs_startup_le_set_event_mask_ack(struct ble_hci_ack *ack, void *arg)
-{
-    int rc;
-
-    assert(ble_hs_startup_state ==
-           BLE_HS_STARTUP_STATE_LE_SET_EVENT_MASK_ACKED - 1);
-
-    if (ack->bha_status != 0) {
-        ble_hs_startup_failure(ack->bha_status);
-        return;
-    }
-
-    ble_hs_startup_state = BLE_HS_STARTUP_STATE_LE_SET_EVENT_MASK_ACKED;
-
-    /* XXX: Send LE Set event mask. */
-    rc = ble_hci_sched_enqueue(ble_hs_startup_le_read_buf_size_tx, NULL);
-    if (rc != 0) {
-        ble_hs_startup_failure(rc);
-        return;
-    }
-}
-
 static int
-ble_hs_startup_le_set_event_mask_tx(void *arg)
+ble_hs_startup_le_set_evmask_tx(void *arg)
 {
     int rc;
 
-    assert(ble_hs_startup_state == BLE_HS_STARTUP_STATE_LE_SET_EVENT_MASK - 1);
-
-    ble_hs_startup_state = BLE_HS_STARTUP_STATE_LE_SET_EVENT_MASK;
-    ble_hci_ack_set_callback(ble_hs_startup_le_set_event_mask_ack, NULL);
+    assert(ble_hs_startup_state == BLE_HS_STARTUP_STATE_LE_SET_EVMASK);
 
+    ble_hci_ack_set_callback(ble_hs_startup_gen_ack, NULL);
     rc = host_hci_cmd_le_set_event_mask(0x000000000000001f);
     if (rc != 0) {
         return rc;
@@ -134,38 +153,14 @@ ble_hs_startup_le_set_event_mask_tx(void *arg)
     return 0;
 }
 
-static void
-ble_hs_startup_set_event_mask_ack(struct ble_hci_ack *ack, void *arg)
-{
-    int rc;
-
-    assert(ble_hs_startup_state ==
-           BLE_HS_STARTUP_STATE_SET_EVENT_MASK_ACKED - 1);
-
-    if (ack->bha_status != 0) {
-        ble_hs_startup_failure(ack->bha_status);
-        return;
-    }
-
-    ble_hs_startup_state = BLE_HS_STARTUP_STATE_SET_EVENT_MASK_ACKED;
-
-    rc = ble_hci_sched_enqueue(ble_hs_startup_le_set_event_mask_tx, NULL);
-    if (rc != 0) {
-        ble_hs_startup_failure(rc);
-        return;
-    }
-}
-
 static int
-ble_hs_startup_set_event_mask_tx(void *arg)
+ble_hs_startup_set_evmask_tx(void *arg)
 {
     int rc;
 
-    assert(ble_hs_startup_state == BLE_HS_STARTUP_STATE_SET_EVENT_MASK - 1);
-
-    ble_hs_startup_state = BLE_HS_STARTUP_STATE_SET_EVENT_MASK;
-    ble_hci_ack_set_callback(ble_hs_startup_set_event_mask_ack, NULL);
+    assert(ble_hs_startup_state == BLE_HS_STARTUP_STATE_SET_EVMASK);
 
+    ble_hci_ack_set_callback(ble_hs_startup_gen_ack, NULL);
     rc = host_hci_cmd_set_event_mask(0x20001fffffffffff);
     if (rc != 0) {
         return rc;
@@ -174,38 +169,14 @@ ble_hs_startup_set_event_mask_tx(void *arg)
     return 0;
 }
 
-static void
-ble_hs_startup_reset_ack(struct ble_hci_ack *ack, void *arg)
-{
-    int rc;
-
-    assert(ble_hs_startup_state == BLE_HS_STARTUP_STATE_RESET_ACKED - 1);
-
-    if (ack->bha_status != 0) {
-        ble_hs_startup_failure(ack->bha_status);
-        return;
-    }
-
-    ble_hs_startup_state = BLE_HS_STARTUP_STATE_RESET_ACKED;
-
-    rc = ble_hci_sched_enqueue(ble_hs_startup_set_event_mask_tx, NULL);
-    if (rc != 0) {
-        ble_hs_startup_failure(rc);
-        return;
-    }
-}
-
-
 static int
 ble_hs_startup_reset_tx(void *arg)
 {
     int rc;
 
-    assert(ble_hs_startup_state == BLE_HS_STARTUP_STATE_RESET - 1);
-
-    ble_hs_startup_state = BLE_HS_STARTUP_STATE_RESET;
-    ble_hci_ack_set_callback(ble_hs_startup_reset_ack, NULL);
+    assert(ble_hs_startup_state == BLE_HS_STARTUP_STATE_RESET);
 
+    ble_hci_ack_set_callback(ble_hs_startup_gen_ack, NULL);
     rc = host_hci_cmd_reset();
     if (rc != 0) {
         return rc;
@@ -219,13 +190,8 @@ ble_hs_startup_go(void)
 {
     int rc;
 
-    ble_hs_startup_state = BLE_HS_STARTUP_STATE_IDLE;
-
-    rc = ble_hci_sched_enqueue(ble_hs_startup_reset_tx, NULL);
-    if (rc != 0) {
-        ble_hs_startup_failure(rc);
-        return rc;
-    }
+    ble_hs_startup_state = BLE_HS_STARTUP_STATE_RESET;
 
-    return 0;
+    rc = ble_hs_startup_enqueue_tx();
+    return rc;
 }