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/04/05 04:15:38 UTC

[1/3] incubator-mynewt-core git commit: ble host: reduce code size.

Repository: incubator-mynewt-core
Updated Branches:
  refs/heads/develop f41a1090a -> 2fef21d6a


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2fef21d6/net/nimble/host/src/test/ble_att_svr_test.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/test/ble_att_svr_test.c b/net/nimble/host/src/test/ble_att_svr_test.c
index f9787e4..fda86d8 100644
--- a/net/nimble/host/src/test/ble_att_svr_test.c
+++ b/net/nimble/host/src/test/ble_att_svr_test.c
@@ -297,8 +297,7 @@ ble_att_svr_test_misc_verify_tx_err_rsp(struct ble_l2cap_chan *chan,
     rc = os_mbuf_copydata(ble_hs_test_util_prev_tx, 0, sizeof buf, buf);
     TEST_ASSERT(rc == 0);
 
-    rc = ble_att_error_rsp_parse(buf, sizeof buf, &rsp);
-    TEST_ASSERT(rc == 0);
+    ble_att_error_rsp_parse(buf, sizeof buf, &rsp);
 
     TEST_ASSERT(rsp.baep_req_op == req_op);
     TEST_ASSERT(rsp.baep_handle == handle);
@@ -373,8 +372,7 @@ ble_att_svr_test_misc_rx_read_mult_req(struct ble_hs_conn *conn,
     int rc;
     int i;
 
-    rc = ble_att_read_mult_req_write(buf, sizeof buf);
-    TEST_ASSERT(rc == 0);
+    ble_att_read_mult_req_write(buf, sizeof buf);
 
     off = BLE_ATT_READ_MULT_REQ_BASE_SZ;
     for (i = 0; i < num_handles; i++) {
@@ -477,8 +475,7 @@ ble_att_svr_test_misc_verify_tx_mtu_rsp(struct ble_l2cap_chan *chan)
     rc = os_mbuf_copydata(ble_hs_test_util_prev_tx, 0, sizeof buf, buf);
     TEST_ASSERT(rc == 0);
 
-    rc = ble_att_mtu_cmd_parse(buf, sizeof buf, &rsp);
-    TEST_ASSERT(rc == 0);
+    ble_att_mtu_cmd_parse(buf, sizeof buf, &rsp);
 
     TEST_ASSERT(rsp.bamc_mtu == chan->blc_my_mtu);
 
@@ -515,8 +512,7 @@ ble_att_svr_test_misc_verify_tx_find_info_rsp(
     TEST_ASSERT(rc == 0);
     off += sizeof buf;
 
-    rc = ble_att_find_info_rsp_parse(buf, sizeof buf, &rsp);
-    TEST_ASSERT(rc == 0);
+    ble_att_find_info_rsp_parse(buf, sizeof buf, &rsp);
 
     for (entry = entries; entry->handle != 0; entry++) {
         rc = os_mbuf_copydata(ble_hs_test_util_prev_tx, off, 2, &handle);
@@ -627,8 +623,7 @@ ble_att_svr_test_misc_verify_tx_read_group_type_rsp(
                         BLE_ATT_READ_GROUP_TYPE_RSP_BASE_SZ);
     TEST_ASSERT_FATAL(om != NULL);
 
-    rc = ble_att_read_group_type_rsp_parse(om->om_data, om->om_len, &rsp);
-    TEST_ASSERT(rc == 0);
+    ble_att_read_group_type_rsp_parse(om->om_data, om->om_len, &rsp);
 
     off = BLE_ATT_READ_GROUP_TYPE_RSP_BASE_SZ;
     for (entry = entries; entry->start_handle != 0; entry++) {
@@ -700,8 +695,7 @@ ble_att_svr_test_misc_verify_tx_read_type_rsp(
                         BLE_ATT_READ_TYPE_RSP_BASE_SZ);
     TEST_ASSERT_FATAL(om != NULL);
 
-    rc = ble_att_read_type_rsp_parse(om->om_data, om->om_len, &rsp);
-    TEST_ASSERT(rc == 0);
+    ble_att_read_type_rsp_parse(om->om_data, om->om_len, &rsp);
 
     off = BLE_ATT_READ_TYPE_RSP_BASE_SZ;
     for (entry = entries; entry->handle != 0; entry++) {
@@ -740,8 +734,7 @@ ble_att_svr_test_misc_verify_tx_prep_write_rsp(struct ble_l2cap_chan *chan,
                           OS_MBUF_PKTLEN(ble_hs_test_util_prev_tx), buf);
     TEST_ASSERT_FATAL(rc == 0);
 
-    rc = ble_att_prep_write_rsp_parse(buf, sizeof buf, &rsp);
-    TEST_ASSERT_FATAL(rc == 0);
+    ble_att_prep_write_rsp_parse(buf, sizeof buf, &rsp);
 
     TEST_ASSERT(rsp.bapc_handle == attr_handle);
     TEST_ASSERT(rsp.bapc_offset == offset);
@@ -756,15 +749,13 @@ static void
 ble_att_svr_test_misc_verify_tx_exec_write_rsp(struct ble_l2cap_chan *chan)
 {
     struct os_mbuf *om;
-    int rc;
 
     ble_hs_test_util_tx_all();
 
     om = os_mbuf_pullup(ble_hs_test_util_prev_tx, BLE_ATT_EXEC_WRITE_RSP_SZ);
     TEST_ASSERT_FATAL(om != NULL);
 
-    rc = ble_att_exec_write_rsp_parse(om->om_data, om->om_len);
-    TEST_ASSERT(rc == 0);
+    ble_att_exec_write_rsp_parse(om->om_data, om->om_len);
 }
 
 static void
@@ -782,8 +773,7 @@ ble_att_svr_test_misc_mtu_exchange(uint16_t my_mtu, uint16_t peer_sent,
     chan->blc_my_mtu = my_mtu;
 
     req.bamc_mtu = peer_sent;
-    rc = ble_att_mtu_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_mtu_req_write(buf, sizeof buf, &req);
 
     rc = ble_hs_test_util_l2cap_rx_payload_flat(conn, chan, buf, sizeof buf);
     TEST_ASSERT(rc == 0);
@@ -807,8 +797,7 @@ ble_att_svr_test_misc_prep_write(struct ble_hs_conn *conn,
 
     prep_req.bapc_handle = handle;
     prep_req.bapc_offset = offset;
-    rc = ble_att_prep_write_req_write(buf, sizeof buf, &prep_req);
-    TEST_ASSERT_FATAL(rc == 0);
+    ble_att_prep_write_req_write(buf, sizeof buf, &prep_req);
     memcpy(buf + BLE_ATT_PREP_WRITE_CMD_BASE_SZ, data, data_len);
     rc = ble_hs_test_util_l2cap_rx_payload_flat(
         conn, chan, buf, BLE_ATT_PREP_WRITE_CMD_BASE_SZ + data_len);
@@ -835,8 +824,7 @@ ble_att_svr_test_misc_exec_write(struct ble_hs_conn *conn,
     int rc;
 
     exec_req.baeq_flags = flags;
-    rc = ble_att_exec_write_req_write(buf, sizeof buf, &exec_req);
-    TEST_ASSERT_FATAL(rc == 0);
+    ble_att_exec_write_req_write(buf, sizeof buf, &exec_req);
     rc = ble_hs_test_util_l2cap_rx_payload_flat(conn, chan, buf,
                                                 BLE_ATT_EXEC_WRITE_REQ_SZ);
 
@@ -863,8 +851,7 @@ ble_att_svr_test_misc_rx_notify(struct ble_hs_conn *conn,
     int rc;
 
     req.banq_handle = attr_handle;
-    rc = ble_att_notify_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT_FATAL(rc == 0);
+    ble_att_notify_req_write(buf, sizeof buf, &req);
     off = BLE_ATT_NOTIFY_REQ_BASE_SZ;
 
     memcpy(buf + off, attr_val, attr_len);
@@ -931,15 +918,13 @@ static void
 ble_att_svr_test_misc_verify_tx_indicate_rsp(struct ble_l2cap_chan *chan)
 {
     struct os_mbuf *om;
-    int rc;
 
     ble_hs_test_util_tx_all();
 
     om = os_mbuf_pullup(ble_hs_test_util_prev_tx, BLE_ATT_INDICATE_RSP_SZ);
     TEST_ASSERT_FATAL(om != NULL);
 
-    rc = ble_att_indicate_rsp_parse(om->om_data, om->om_len);
-    TEST_ASSERT(rc == 0);
+    ble_att_indicate_rsp_parse(om->om_data, om->om_len);
 }
 
 static void
@@ -954,8 +939,7 @@ ble_att_svr_test_misc_rx_indicate(struct ble_hs_conn *conn,
     int rc;
 
     req.baiq_handle = attr_handle;
-    rc = ble_att_indicate_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT_FATAL(rc == 0);
+    ble_att_indicate_req_write(buf, sizeof buf, &req);
     off = BLE_ATT_INDICATE_REQ_BASE_SZ;
 
     memcpy(buf + off, attr_val, attr_len);
@@ -1029,8 +1013,7 @@ TEST_CASE(ble_att_svr_test_read)
 
     /*** Nonexistent attribute. */
     req.barq_handle = 0;
-    rc = ble_att_read_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_read_req_write(buf, sizeof buf, &req);
 
     rc = ble_hs_test_util_l2cap_rx_payload_flat(conn, chan, buf, sizeof buf);
     TEST_ASSERT(rc != 0);
@@ -1044,8 +1027,7 @@ TEST_CASE(ble_att_svr_test_read)
                               ble_att_svr_test_misc_attr_fn_r_1, NULL);
     TEST_ASSERT(rc == 0);
 
-    rc = ble_att_read_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_read_req_write(buf, sizeof buf, &req);
 
     rc = ble_hs_test_util_l2cap_rx_payload_flat(conn, chan, buf, sizeof buf);
     TEST_ASSERT(rc == 0);
@@ -1058,8 +1040,7 @@ TEST_CASE(ble_att_svr_test_read)
                     22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39};
     ble_att_svr_test_attr_r_1_len = 40;
 
-    rc = ble_att_read_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_read_req_write(buf, sizeof buf, &req);
 
     rc = ble_hs_test_util_l2cap_rx_payload_flat(conn, chan, buf, sizeof buf);
     TEST_ASSERT(rc == 0);
@@ -1081,8 +1062,7 @@ TEST_CASE(ble_att_svr_test_read_blob)
     /*** Nonexistent attribute. */
     req.babq_handle = 0;
     req.babq_offset = 0;
-    rc = ble_att_read_blob_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_read_blob_req_write(buf, sizeof buf, &req);
 
     rc = ble_hs_test_util_l2cap_rx_payload_flat(conn, chan, buf, sizeof buf);
     TEST_ASSERT(rc != 0);
@@ -1098,8 +1078,7 @@ TEST_CASE(ble_att_svr_test_read_blob)
                               ble_att_svr_test_misc_attr_fn_r_1, NULL);
     TEST_ASSERT(rc == 0);
 
-    rc = ble_att_read_blob_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_read_blob_req_write(buf, sizeof buf, &req);
 
     rc = ble_hs_test_util_l2cap_rx_payload_flat(conn, chan, buf, sizeof buf);
     TEST_ASSERT(rc != 0);
@@ -1110,8 +1089,7 @@ TEST_CASE(ble_att_svr_test_read_blob)
     /*** Successful partial read. */
     ble_att_svr_test_attr_r_1_len = 40;
 
-    rc = ble_att_read_blob_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_read_blob_req_write(buf, sizeof buf, &req);
 
     rc = ble_hs_test_util_l2cap_rx_payload_flat(conn, chan, buf, sizeof buf);
     TEST_ASSERT(rc == 0);
@@ -1121,8 +1099,7 @@ TEST_CASE(ble_att_svr_test_read_blob)
 
     /*** Read remainder of attribute. */
     req.babq_offset = BLE_ATT_MTU_DFLT - 1;
-    rc = ble_att_read_blob_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_read_blob_req_write(buf, sizeof buf, &req);
 
     rc = ble_hs_test_util_l2cap_rx_payload_flat(conn, chan, buf, sizeof buf);
     TEST_ASSERT(rc == 0);
@@ -1132,8 +1109,7 @@ TEST_CASE(ble_att_svr_test_read_blob)
 
     /*** Zero-length read. */
     req.babq_offset = ble_att_svr_test_attr_r_1_len;
-    rc = ble_att_read_blob_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_read_blob_req_write(buf, sizeof buf, &req);
 
     rc = ble_hs_test_util_l2cap_rx_payload_flat(conn, chan, buf, sizeof buf);
     TEST_ASSERT(rc == 0);
@@ -1223,8 +1199,7 @@ TEST_CASE(ble_att_svr_test_write)
 
     /*** Nonexistent attribute. */
     req.bawq_handle = 0;
-    rc = ble_att_write_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_write_req_write(buf, sizeof buf, &req);
     memcpy(buf + BLE_ATT_READ_REQ_SZ, ((uint8_t[]){0,1,2,3,4,5,6,7}), 8);
 
     rc = ble_hs_test_util_l2cap_rx_payload_flat(conn, chan, buf, sizeof buf);
@@ -1237,8 +1212,7 @@ TEST_CASE(ble_att_svr_test_write)
                               ble_att_svr_test_misc_attr_fn_w_1, NULL);
     TEST_ASSERT(rc == 0);
 
-    rc = ble_att_write_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_write_req_write(buf, sizeof buf, &req);
     memcpy(buf + BLE_ATT_WRITE_REQ_BASE_SZ,
            ((uint8_t[]){0,1,2,3,4,5,6,7}), 8);
 
@@ -1275,8 +1249,7 @@ TEST_CASE(ble_att_svr_test_find_info)
     req.bafq_start_handle = 0;
     req.bafq_end_handle = 0;
 
-    rc = ble_att_find_info_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_find_info_req_write(buf, sizeof buf, &req);
 
     rc = ble_hs_test_util_l2cap_rx_payload_flat(conn, chan, buf, sizeof buf);
     TEST_ASSERT(rc != 0);
@@ -1287,8 +1260,7 @@ TEST_CASE(ble_att_svr_test_find_info)
     req.bafq_start_handle = 101;
     req.bafq_end_handle = 100;
 
-    rc = ble_att_find_info_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_find_info_req_write(buf, sizeof buf, &req);
 
     rc = ble_hs_test_util_l2cap_rx_payload_flat(conn, chan, buf, sizeof buf);
     TEST_ASSERT(rc != 0);
@@ -1299,8 +1271,7 @@ TEST_CASE(ble_att_svr_test_find_info)
     req.bafq_start_handle = 200;
     req.bafq_end_handle = 300;
 
-    rc = ble_att_find_info_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_find_info_req_write(buf, sizeof buf, &req);
 
     rc = ble_hs_test_util_l2cap_rx_payload_flat(conn, chan, buf, sizeof buf);
     TEST_ASSERT(rc != 0);
@@ -1315,8 +1286,7 @@ TEST_CASE(ble_att_svr_test_find_info)
     req.bafq_start_handle = 200;
     req.bafq_end_handle = 300;
 
-    rc = ble_att_find_info_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_find_info_req_write(buf, sizeof buf, &req);
 
     rc = ble_hs_test_util_l2cap_rx_payload_flat(conn, chan, buf, sizeof buf);
     TEST_ASSERT(rc != 0);
@@ -1327,8 +1297,7 @@ TEST_CASE(ble_att_svr_test_find_info)
     req.bafq_start_handle = handle1;
     req.bafq_end_handle = handle1;
 
-    rc = ble_att_find_info_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_find_info_req_write(buf, sizeof buf, &req);
 
     rc = ble_hs_test_util_l2cap_rx_payload_flat(conn, chan, buf, sizeof buf);
     TEST_ASSERT(rc == 0);
@@ -1348,8 +1317,7 @@ TEST_CASE(ble_att_svr_test_find_info)
     req.bafq_start_handle = handle1;
     req.bafq_end_handle = handle2;
 
-    rc = ble_att_find_info_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_find_info_req_write(buf, sizeof buf, &req);
 
     rc = ble_hs_test_util_l2cap_rx_payload_flat(conn, chan, buf, sizeof buf);
     TEST_ASSERT(rc == 0);
@@ -1372,8 +1340,7 @@ TEST_CASE(ble_att_svr_test_find_info)
     req.bafq_start_handle = handle1;
     req.bafq_end_handle = handle3;
 
-    rc = ble_att_find_info_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_find_info_req_write(buf, sizeof buf, &req);
 
     rc = ble_hs_test_util_l2cap_rx_payload_flat(conn, chan, buf, sizeof buf);
     TEST_ASSERT(rc == 0);
@@ -1392,8 +1359,7 @@ TEST_CASE(ble_att_svr_test_find_info)
     req.bafq_start_handle = handle3;
     req.bafq_end_handle = handle3;
 
-    rc = ble_att_find_info_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_find_info_req_write(buf, sizeof buf, &req);
 
     rc = ble_hs_test_util_l2cap_rx_payload_flat(conn, chan, buf, sizeof buf);
     TEST_ASSERT(rc == 0);
@@ -1447,8 +1413,7 @@ TEST_CASE(ble_att_svr_test_find_type_value)
     req.bavq_end_handle = 0;
     req.bavq_attr_type = 0x0001;
 
-    rc = ble_att_find_type_value_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_find_type_value_req_write(buf, sizeof buf, &req);
 
     rc = ble_hs_test_util_l2cap_rx_payload_flat(conn, chan, buf, sizeof buf);
     TEST_ASSERT(rc != 0);
@@ -1460,8 +1425,7 @@ TEST_CASE(ble_att_svr_test_find_type_value)
     req.bavq_start_handle = 101;
     req.bavq_end_handle = 100;
 
-    rc = ble_att_find_type_value_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_find_type_value_req_write(buf, sizeof buf, &req);
 
     rc = ble_hs_test_util_l2cap_rx_payload_flat(conn, chan, buf, sizeof buf);
     TEST_ASSERT(rc != 0);
@@ -1473,8 +1437,7 @@ TEST_CASE(ble_att_svr_test_find_type_value)
     req.bavq_start_handle = 200;
     req.bavq_end_handle = 300;
 
-    rc = ble_att_find_type_value_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_find_type_value_req_write(buf, sizeof buf, &req);
 
     rc = ble_hs_test_util_l2cap_rx_payload_flat(conn, chan, buf, sizeof buf);
     TEST_ASSERT(rc != 0);
@@ -1490,8 +1453,7 @@ TEST_CASE(ble_att_svr_test_find_type_value)
     req.bavq_start_handle = 200;
     req.bavq_end_handle = 300;
 
-    rc = ble_att_find_type_value_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_find_type_value_req_write(buf, sizeof buf, &req);
 
     rc = ble_hs_test_util_l2cap_rx_payload_flat(conn, chan, buf, sizeof buf);
     TEST_ASSERT(rc != 0);
@@ -1503,8 +1465,7 @@ TEST_CASE(ble_att_svr_test_find_type_value)
     req.bavq_start_handle = handle1;
     req.bavq_end_handle = handle1;
 
-    rc = ble_att_find_type_value_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_find_type_value_req_write(buf, sizeof buf, &req);
 
     rc = ble_hs_test_util_l2cap_rx_payload_flat(conn, chan, buf, sizeof buf);
     TEST_ASSERT(rc == 0);
@@ -1524,8 +1485,7 @@ TEST_CASE(ble_att_svr_test_find_type_value)
     req.bavq_start_handle = handle1;
     req.bavq_end_handle = handle2;
 
-    rc = ble_att_find_type_value_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_find_type_value_req_write(buf, sizeof buf, &req);
 
     rc = ble_hs_test_util_l2cap_rx_payload_flat(conn, chan, buf, sizeof buf);
     TEST_ASSERT(rc == 0);
@@ -1549,8 +1509,7 @@ TEST_CASE(ble_att_svr_test_find_type_value)
     req.bavq_start_handle = 0x0001;
     req.bavq_end_handle = 0xffff;
 
-    rc = ble_att_find_type_value_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_find_type_value_req_write(buf, sizeof buf, &req);
 
     rc = ble_hs_test_util_l2cap_rx_payload_flat(conn, chan, buf, sizeof buf);
     TEST_ASSERT(rc == 0);
@@ -1572,8 +1531,7 @@ TEST_CASE(ble_att_svr_test_find_type_value)
     req.bavq_start_handle = 0x0001;
     req.bavq_end_handle = 0xffff;
 
-    rc = ble_att_find_type_value_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_find_type_value_req_write(buf, sizeof buf, &req);
 
     rc = ble_hs_test_util_l2cap_rx_payload_flat(conn, chan, buf, sizeof buf);
     TEST_ASSERT(rc == 0);
@@ -1595,8 +1553,7 @@ TEST_CASE(ble_att_svr_test_find_type_value)
     req.bavq_start_handle = 0x0001;
     req.bavq_end_handle = 0xffff;
 
-    rc = ble_att_find_type_value_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_find_type_value_req_write(buf, sizeof buf, &req);
 
     rc = ble_hs_test_util_l2cap_rx_payload_flat(conn, chan, buf, sizeof buf);
     TEST_ASSERT(rc == 0);
@@ -1631,8 +1588,7 @@ TEST_CASE(ble_att_svr_test_read_type)
     req.batq_start_handle = 0;
     req.batq_end_handle = 0;
 
-    rc = ble_att_read_type_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_read_type_req_write(buf, sizeof buf, &req);
     htole16(buf + BLE_ATT_READ_TYPE_REQ_BASE_SZ,
             BLE_ATT_UUID_PRIMARY_SERVICE);
 
@@ -1646,8 +1602,7 @@ TEST_CASE(ble_att_svr_test_read_type)
     req.batq_start_handle = 101;
     req.batq_end_handle = 100;
 
-    rc = ble_att_read_type_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_read_type_req_write(buf, sizeof buf, &req);
     htole16(buf + BLE_ATT_READ_TYPE_REQ_BASE_SZ,
             BLE_ATT_UUID_PRIMARY_SERVICE);
 
@@ -1661,8 +1616,7 @@ TEST_CASE(ble_att_svr_test_read_type)
     req.batq_start_handle = 1;
     req.batq_end_handle = 0xffff;
 
-    rc = ble_att_read_type_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_read_type_req_write(buf, sizeof buf, &req);
     htole16(buf + BLE_ATT_READ_TYPE_REQ_BASE_SZ,
             BLE_ATT_UUID_PRIMARY_SERVICE);
 
@@ -1677,8 +1631,7 @@ TEST_CASE(ble_att_svr_test_read_type)
     req.batq_start_handle = 200;
     req.batq_end_handle = 300;
 
-    rc = ble_att_read_type_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_read_type_req_write(buf, sizeof buf, &req);
     htole16(buf + BLE_ATT_READ_TYPE_REQ_BASE_SZ,
             BLE_ATT_UUID_PRIMARY_SERVICE);
 
@@ -1692,8 +1645,7 @@ TEST_CASE(ble_att_svr_test_read_type)
     req.batq_start_handle = 1;
     req.batq_end_handle = 2;
 
-    rc = ble_att_read_type_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_read_type_req_write(buf, sizeof buf, &req);
     htole16(buf + BLE_ATT_READ_TYPE_REQ_BASE_SZ,
             BLE_ATT_UUID_CHARACTERISTIC);
 
@@ -1712,8 +1664,7 @@ TEST_CASE(ble_att_svr_test_read_type)
     req.batq_start_handle = 1;
     req.batq_end_handle = 10;
 
-    rc = ble_att_read_type_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_read_type_req_write(buf, sizeof buf, &req);
     htole16(buf + BLE_ATT_READ_TYPE_REQ_BASE_SZ,
             BLE_ATT_UUID_CHARACTERISTIC);
 
@@ -1736,8 +1687,7 @@ TEST_CASE(ble_att_svr_test_read_type)
     req.batq_start_handle = 11;
     req.batq_end_handle = 0xffff;
 
-    rc = ble_att_read_type_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_read_type_req_write(buf, sizeof buf, &req);
     htole16(buf + BLE_ATT_READ_TYPE_REQ_BASE_SZ,
             BLE_ATT_UUID_CHARACTERISTIC);
 
@@ -1755,8 +1705,7 @@ TEST_CASE(ble_att_svr_test_read_type)
     req.batq_start_handle = 13;
     req.batq_end_handle = 0xffff;
 
-    rc = ble_att_read_type_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_read_type_req_write(buf, sizeof buf, &req);
     htole16(buf + BLE_ATT_READ_TYPE_REQ_BASE_SZ,
             BLE_ATT_UUID_CHARACTERISTIC);
 
@@ -1774,8 +1723,7 @@ TEST_CASE(ble_att_svr_test_read_type)
     req.batq_start_handle = 15;
     req.batq_end_handle = 0xffff;
 
-    rc = ble_att_read_type_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_read_type_req_write(buf, sizeof buf, &req);
     htole16(buf + BLE_ATT_READ_TYPE_REQ_BASE_SZ,
             BLE_ATT_UUID_CHARACTERISTIC);
 
@@ -1810,8 +1758,7 @@ TEST_CASE(ble_att_svr_test_read_group_type)
     req.bagq_start_handle = 0;
     req.bagq_end_handle = 0;
 
-    rc = ble_att_read_group_type_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_read_group_type_req_write(buf, sizeof buf, &req);
     htole16(buf + BLE_ATT_READ_GROUP_TYPE_REQ_BASE_SZ,
             BLE_ATT_UUID_PRIMARY_SERVICE);
 
@@ -1825,8 +1772,7 @@ TEST_CASE(ble_att_svr_test_read_group_type)
     req.bagq_start_handle = 101;
     req.bagq_end_handle = 100;
 
-    rc = ble_att_read_group_type_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_read_group_type_req_write(buf, sizeof buf, &req);
     htole16(buf + BLE_ATT_READ_GROUP_TYPE_REQ_BASE_SZ,
             BLE_ATT_UUID_PRIMARY_SERVICE);
 
@@ -1840,8 +1786,7 @@ TEST_CASE(ble_att_svr_test_read_group_type)
     req.bagq_start_handle = 110;
     req.bagq_end_handle = 150;
 
-    rc = ble_att_read_group_type_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_read_group_type_req_write(buf, sizeof buf, &req);
     htole16(buf + BLE_ATT_READ_GROUP_TYPE_REQ_BASE_SZ, 0x1234);
 
     rc = ble_hs_test_util_l2cap_rx_payload_flat(conn, chan, buf, sizeof buf);
@@ -1854,8 +1799,7 @@ TEST_CASE(ble_att_svr_test_read_group_type)
     req.bagq_start_handle = 1;
     req.bagq_end_handle = 0xffff;
 
-    rc = ble_att_read_group_type_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_read_group_type_req_write(buf, sizeof buf, &req);
     htole16(buf + BLE_ATT_READ_GROUP_TYPE_REQ_BASE_SZ,
             BLE_ATT_UUID_PRIMARY_SERVICE);
 
@@ -1870,8 +1814,7 @@ TEST_CASE(ble_att_svr_test_read_group_type)
     req.bagq_start_handle = 200;
     req.bagq_end_handle = 300;
 
-    rc = ble_att_read_group_type_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_read_group_type_req_write(buf, sizeof buf, &req);
     htole16(buf + BLE_ATT_READ_GROUP_TYPE_REQ_BASE_SZ,
             BLE_ATT_UUID_PRIMARY_SERVICE);
 
@@ -1885,8 +1828,7 @@ TEST_CASE(ble_att_svr_test_read_group_type)
     req.bagq_start_handle = 1;
     req.bagq_end_handle = 5;
 
-    rc = ble_att_read_group_type_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_read_group_type_req_write(buf, sizeof buf, &req);
     htole16(buf + BLE_ATT_READ_GROUP_TYPE_REQ_BASE_SZ,
             BLE_ATT_UUID_PRIMARY_SERVICE);
 
@@ -1905,8 +1847,7 @@ TEST_CASE(ble_att_svr_test_read_group_type)
     req.bagq_start_handle = 1;
     req.bagq_end_handle = 10;
 
-    rc = ble_att_read_group_type_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_read_group_type_req_write(buf, sizeof buf, &req);
     htole16(buf + BLE_ATT_READ_GROUP_TYPE_REQ_BASE_SZ,
             BLE_ATT_UUID_PRIMARY_SERVICE);
 
@@ -1929,8 +1870,7 @@ TEST_CASE(ble_att_svr_test_read_group_type)
     req.bagq_start_handle = 1;
     req.bagq_end_handle = 100;
 
-    rc = ble_att_read_group_type_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_read_group_type_req_write(buf, sizeof buf, &req);
     htole16(buf + BLE_ATT_READ_GROUP_TYPE_REQ_BASE_SZ,
             BLE_ATT_UUID_PRIMARY_SERVICE);
 
@@ -1953,8 +1893,7 @@ TEST_CASE(ble_att_svr_test_read_group_type)
     req.bagq_start_handle = 11;
     req.bagq_end_handle = 100;
 
-    rc = ble_att_read_group_type_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_read_group_type_req_write(buf, sizeof buf, &req);
     htole16(buf + BLE_ATT_READ_GROUP_TYPE_REQ_BASE_SZ,
             BLE_ATT_UUID_PRIMARY_SERVICE);
 
@@ -2152,6 +2091,7 @@ TEST_SUITE(ble_att_svr_suite)
 int
 ble_att_svr_test_all(void)
 {
+    tu_config.tc_system_assert = 1;
     ble_att_svr_suite();
 
     return tu_any_failed;

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2fef21d6/net/nimble/host/src/test/ble_gatt_disc_c_test.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/test/ble_gatt_disc_c_test.c b/net/nimble/host/src/test/ble_gatt_disc_c_test.c
index 3f24586..d2d9acb 100644
--- a/net/nimble/host/src/test/ble_gatt_disc_c_test.c
+++ b/net/nimble/host/src/test/ble_gatt_disc_c_test.c
@@ -72,8 +72,7 @@ ble_gatt_disc_c_test_misc_rx_rsp_once(
                          BLE_GATT_CHR_DECL_SZ_128;
     }
 
-    rc = ble_att_read_type_rsp_write(buf, BLE_ATT_READ_TYPE_RSP_BASE_SZ, &rsp);
-    TEST_ASSERT_FATAL(rc == 0);
+    ble_att_read_type_rsp_write(buf, BLE_ATT_READ_TYPE_RSP_BASE_SZ, &rsp);
 
     off = BLE_ATT_READ_TYPE_RSP_BASE_SZ;
     for (i = 0; ; i++) {

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2fef21d6/net/nimble/host/src/test/ble_gatt_disc_d_test.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/test/ble_gatt_disc_d_test.c b/net/nimble/host/src/test/ble_gatt_disc_d_test.c
index 3a40864..a3c76a5 100644
--- a/net/nimble/host/src/test/ble_gatt_disc_d_test.c
+++ b/net/nimble/host/src/test/ble_gatt_disc_d_test.c
@@ -71,8 +71,7 @@ ble_gatt_disc_d_test_misc_rx_rsp_once(
         rsp.bafp_format = BLE_ATT_FIND_INFO_RSP_FORMAT_128BIT;
     }
 
-    rc = ble_att_find_info_rsp_write(buf, BLE_ATT_FIND_INFO_RSP_BASE_SZ, &rsp);
-    TEST_ASSERT_FATAL(rc == 0);
+    ble_att_find_info_rsp_write(buf, BLE_ATT_FIND_INFO_RSP_BASE_SZ, &rsp);
 
     off = BLE_ATT_FIND_INFO_RSP_BASE_SZ;
     for (i = 0; ; i++) {

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2fef21d6/net/nimble/host/src/test/ble_gatt_disc_s_test.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/test/ble_gatt_disc_s_test.c b/net/nimble/host/src/test/ble_gatt_disc_s_test.c
index d8e66c5..533340a 100644
--- a/net/nimble/host/src/test/ble_gatt_disc_s_test.c
+++ b/net/nimble/host/src/test/ble_gatt_disc_s_test.c
@@ -71,9 +71,8 @@ ble_gatt_disc_s_test_misc_rx_all_rsp_once(
     ble_hs_test_util_tx_all();
 
     rsp.bagp_length = ble_gatt_disc_s_test_misc_svc_length(services);
-    rc = ble_att_read_group_type_rsp_write(
-        buf, BLE_ATT_READ_GROUP_TYPE_RSP_BASE_SZ, &rsp);
-    TEST_ASSERT_FATAL(rc == 0);
+    ble_att_read_group_type_rsp_write(buf, BLE_ATT_READ_GROUP_TYPE_RSP_BASE_SZ,
+                                      &rsp);
 
     off = BLE_ATT_READ_GROUP_TYPE_RSP_BASE_SZ;
     for (i = 0; ; i++) {

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2fef21d6/net/nimble/host/src/test/ble_gatt_find_s_test.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/test/ble_gatt_find_s_test.c b/net/nimble/host/src/test/ble_gatt_find_s_test.c
index d68135d..24b2dcc 100644
--- a/net/nimble/host/src/test/ble_gatt_find_s_test.c
+++ b/net/nimble/host/src/test/ble_gatt_find_s_test.c
@@ -114,9 +114,7 @@ ble_gatt_find_s_test_misc_rx_read_type(
         return 0;
     }
 
-    rc = ble_att_read_type_rsp_write(buf + 0, BLE_ATT_READ_TYPE_RSP_BASE_SZ,
-                                     &rsp);
-    TEST_ASSERT_FATAL(rc == 0);
+    ble_att_read_type_rsp_write(buf + 0, BLE_ATT_READ_TYPE_RSP_BASE_SZ, &rsp);
 
     chan = ble_hs_conn_chan_find(conn, BLE_L2CAP_CID_ATT);
     TEST_ASSERT_FATAL(chan != NULL);
@@ -151,7 +149,6 @@ ble_gatt_find_s_test_misc_verify_tx_read_type(uint16_t start_handle,
     struct ble_att_read_type_req req;
     struct os_mbuf *om;
     uint16_t uuid16;
-    int rc;
 
     ble_hs_test_util_tx_all();
 
@@ -161,8 +158,7 @@ ble_gatt_find_s_test_misc_verify_tx_read_type(uint16_t start_handle,
                         OS_MBUF_PKTLEN(ble_hs_test_util_prev_tx));
     TEST_ASSERT_FATAL(om != NULL);
 
-    rc = ble_att_read_type_req_parse(om->om_data, om->om_len, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_read_type_req_parse(om->om_data, om->om_len, &req);
 
     TEST_ASSERT(req.batq_start_handle == start_handle);
     TEST_ASSERT(req.batq_end_handle == end_handle);
@@ -176,7 +172,6 @@ ble_gatt_find_s_test_misc_verify_tx_read(uint16_t handle)
 {
     struct ble_att_read_req req;
     struct os_mbuf *om;
-    int rc;
 
     ble_hs_test_util_tx_all();
 
@@ -186,8 +181,7 @@ ble_gatt_find_s_test_misc_verify_tx_read(uint16_t handle)
                         OS_MBUF_PKTLEN(ble_hs_test_util_prev_tx));
     TEST_ASSERT_FATAL(om != NULL);
 
-    rc = ble_att_read_req_parse(om->om_data, om->om_len, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_read_req_parse(om->om_data, om->om_len, &req);
 
     TEST_ASSERT(req.barq_handle == handle);
     TEST_ASSERT(om->om_len == BLE_ATT_READ_REQ_SZ);

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2fef21d6/net/nimble/host/src/test/ble_gatt_read_test.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/test/ble_gatt_read_test.c b/net/nimble/host/src/test/ble_gatt_read_test.c
index 44dcd84..47392fb 100644
--- a/net/nimble/host/src/test/ble_gatt_read_test.c
+++ b/net/nimble/host/src/test/ble_gatt_read_test.c
@@ -254,8 +254,7 @@ ble_gatt_read_test_misc_uuid_rx_rsp_good(struct ble_hs_conn *conn,
     ble_hs_test_util_tx_all();
 
     rsp.batp_length = 2 + attrs[0].value_len;
-    rc = ble_att_read_type_rsp_write(buf, sizeof buf, &rsp);
-    TEST_ASSERT_FATAL(rc == 0);
+    ble_att_read_type_rsp_write(buf, sizeof buf, &rsp);
 
     prev_len = 0;
     off = BLE_ATT_READ_TYPE_RSP_BASE_SZ;

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2fef21d6/net/nimble/host/src/test/ble_gatt_write_test.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/test/ble_gatt_write_test.c b/net/nimble/host/src/test/ble_gatt_write_test.c
index 4444053..3c17114 100644
--- a/net/nimble/host/src/test/ble_gatt_write_test.c
+++ b/net/nimble/host/src/test/ble_gatt_write_test.c
@@ -105,8 +105,7 @@ ble_gatt_write_test_rx_prep_rsp(struct ble_hs_conn *conn, uint16_t attr_handle,
 
     rsp.bapc_handle = attr_handle;
     rsp.bapc_offset = offset;
-    rc = ble_att_prep_write_rsp_write(buf, sizeof buf, &rsp);
-    TEST_ASSERT_FATAL(rc == 0);
+    ble_att_prep_write_rsp_write(buf, sizeof buf, &rsp);
 
     memcpy(buf + BLE_ATT_PREP_WRITE_CMD_BASE_SZ, attr_data, attr_data_len);
 
@@ -364,7 +363,6 @@ TEST_CASE(ble_gatt_write_test_rsp)
 {
     struct ble_hs_conn *conn;
     int attr_len;
-    int rc;
 
     ble_gatt_write_test_init();
 
@@ -372,9 +370,8 @@ TEST_CASE(ble_gatt_write_test_rsp)
                                         NULL, NULL);
 
     attr_len = 4;
-    rc = ble_gattc_write(2, 100, ble_gatt_write_test_attr_value,
-                         attr_len, ble_gatt_write_test_cb_good, &attr_len);
-    TEST_ASSERT(rc == 0);
+    ble_gattc_write(2, 100, ble_gatt_write_test_attr_value, attr_len,
+                    ble_gatt_write_test_cb_good, &attr_len);
 
     /* Send the pending ATT Write Command. */
     ble_hs_test_util_tx_all();

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2fef21d6/net/nimble/host/src/test/ble_gatts_notify_test.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/test/ble_gatts_notify_test.c b/net/nimble/host/src/test/ble_gatts_notify_test.c
index f2d9bd1..26fc55c 100644
--- a/net/nimble/host/src/test/ble_gatts_notify_test.c
+++ b/net/nimble/host/src/test/ble_gatts_notify_test.c
@@ -100,8 +100,7 @@ ble_gatts_notify_test_misc_enable_notify(struct ble_hs_conn *conn,
     int rc;
 
     req.bawq_handle = chr_def_handle + 2;
-    rc = ble_att_write_req_write(buf, sizeof buf, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_write_req_write(buf, sizeof buf, &req);
 
     htole16(buf + BLE_ATT_WRITE_REQ_BASE_SZ, flags);
     rc = ble_hs_test_util_l2cap_rx_payload_flat(conn, chan, buf, sizeof buf);
@@ -166,8 +165,7 @@ ble_gatts_notify_test_misc_rx_indicate_rsp(struct ble_hs_conn *conn,
     uint8_t buf[BLE_ATT_INDICATE_RSP_SZ];
     int rc;
 
-    rc = ble_att_indicate_rsp_write(buf, sizeof buf);
-    TEST_ASSERT(rc == 0);
+    ble_att_indicate_rsp_write(buf, sizeof buf);
 
     rc = ble_hs_test_util_l2cap_rx_payload_flat(conn, chan, buf, sizeof buf);
     TEST_ASSERT(rc == 0);
@@ -190,8 +188,7 @@ ble_gatts_notify_test_misc_verify_tx_n(struct ble_l2cap_chan *chan,
     rc = os_mbuf_copydata(ble_hs_test_util_prev_tx, 0, req_len, buf);
     TEST_ASSERT_FATAL(rc == 0);
 
-    rc = ble_att_notify_req_parse(buf, req_len, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_notify_req_parse(buf, req_len, &req);
 
     for (i = 0; i < attr_len; i++) {
         TEST_ASSERT(buf[BLE_ATT_NOTIFY_REQ_BASE_SZ + i] == attr_data[i]);
@@ -214,8 +211,7 @@ ble_gatts_notify_test_misc_verify_tx_i(struct ble_l2cap_chan *chan,
     rc = os_mbuf_copydata(ble_hs_test_util_prev_tx, 0, req_len, buf);
     TEST_ASSERT_FATAL(rc == 0);
 
-    rc = ble_att_indicate_req_parse(buf, req_len, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_indicate_req_parse(buf, req_len, &req);
 
     for (i = 0; i < attr_len; i++) {
         TEST_ASSERT(buf[BLE_ATT_INDICATE_REQ_BASE_SZ + i] == attr_data[i]);

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2fef21d6/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 63307b1..d2f179c 100644
--- a/net/nimble/host/src/test/ble_hs_test_util.c
+++ b/net/nimble/host/src/test/ble_hs_test_util.c
@@ -19,7 +19,6 @@
 
 #include <string.h>
 #include <errno.h>
-#include <assert.h>
 #include "stats/stats.h"
 #include "testutil/testutil.h"
 #include "nimble/ble.h"
@@ -165,6 +164,20 @@ ble_hs_test_util_rx_le_ack(uint16_t ocf, uint8_t status)
 }
 
 int
+ble_hs_test_util_l2cap_rx_first_frag(struct ble_hs_conn *conn, uint16_t cid,
+                                     struct hci_data_hdr *hci_hdr,
+                                     struct os_mbuf *om)
+{
+    int rc;
+
+    om = ble_l2cap_prepend_hdr(om, cid, OS_MBUF_PKTLEN(om));
+    TEST_ASSERT_FATAL(om != NULL);
+
+    rc = ble_hs_test_util_l2cap_rx(conn, hci_hdr, om);
+    return rc;
+}
+
+int
 ble_hs_test_util_l2cap_rx(struct ble_hs_conn *conn,
                           struct hci_data_hdr *hci_hdr,
                           struct os_mbuf *om)
@@ -175,8 +188,8 @@ ble_hs_test_util_l2cap_rx(struct ble_hs_conn *conn,
 
     rc = ble_l2cap_rx(conn, hci_hdr, om, &rx_cb, &rx_buf);
     if (rc == 0) {
-        assert(rx_cb != NULL);
-        assert(rx_buf != NULL);
+        TEST_ASSERT_FATAL(rx_cb != NULL);
+        TEST_ASSERT_FATAL(rx_buf != NULL);
         rc = rx_cb(conn->bhc_handle, &rx_buf);
         os_mbuf_free_chain(rx_buf);
     } else if (rc == BLE_HS_EAGAIN) {
@@ -199,20 +212,16 @@ ble_hs_test_util_l2cap_rx_payload_flat(struct ble_hs_conn *conn,
     om = ble_hs_misc_pkthdr();
     TEST_ASSERT_FATAL(om != NULL);
 
-    om->om_data += BLE_L2CAP_HDR_SZ;
-
     rc = os_mbuf_append(om, data, len);
     TEST_ASSERT_FATAL(rc == 0);
 
-    om = ble_l2cap_prepend_hdr(om, chan->blc_cid, OS_MBUF_PKTLEN(om));
-    TEST_ASSERT_FATAL(om != NULL);
-
     hci_hdr.hdh_handle_pb_bc =
         host_hci_handle_pb_bc_join(conn->bhc_handle,
                                    BLE_HCI_PB_FIRST_FLUSH, 0);
     hci_hdr.hdh_len = OS_MBUF_PKTHDR(om)->omp_len;
 
-    rc = ble_hs_test_util_l2cap_rx(conn, &hci_hdr, om);
+    rc = ble_hs_test_util_l2cap_rx_first_frag(conn, chan->blc_cid, &hci_hdr,
+                                              om);
     return rc;
 }
 
@@ -229,8 +238,7 @@ ble_hs_test_util_rx_att_err_rsp(struct ble_hs_conn *conn, uint8_t req_op,
     rsp.baep_handle = err_handle;
     rsp.baep_error_code = error_code;
 
-    rc = ble_att_error_rsp_write(buf, sizeof buf, &rsp);
-    TEST_ASSERT_FATAL(rc == 0);
+    ble_att_error_rsp_write(buf, sizeof buf, &rsp);
 
     chan = ble_hs_conn_chan_find(conn, BLE_L2CAP_CID_ATT);
     TEST_ASSERT_FATAL(chan != NULL);
@@ -276,7 +284,7 @@ ble_hs_test_util_rx_num_completed_pkts_event(
     for (entry = entries; entry->handle_id != 0; entry++) {
         num_entries++;
     }
-    assert(num_entries <= UINT8_MAX);
+    TEST_ASSERT_FATAL(num_entries <= UINT8_MAX);
 
     buf[0] = BLE_HCI_EVCODE_NUM_COMP_PKTS;
     buf[2] = num_entries;
@@ -428,16 +436,16 @@ ble_hs_test_util_init(void)
                          BLE_HS_TEST_UTIL_MEMBLOCK_SIZE,
                          ble_hs_test_util_mbuf_mpool_data, 
                          "ble_hs_test_util_mbuf_data");
-    assert(rc == 0);
+    TEST_ASSERT_FATAL(rc == 0);
 
     rc = os_mbuf_pool_init(&ble_hs_test_util_mbuf_pool,
                            &ble_hs_test_util_mbuf_mpool,
                            BLE_HS_TEST_UTIL_MEMBLOCK_SIZE,
                            BLE_HS_TEST_UTIL_NUM_MBUFS);
-    assert(rc == 0);
+    TEST_ASSERT_FATAL(rc == 0);
 
     rc = os_msys_register(&ble_hs_test_util_mbuf_pool);
-    assert(rc == 0);
+    TEST_ASSERT_FATAL(rc == 0);
 
     /* Don't limit a connection's ability to transmit; simplify tests. */
     ble_hs_cfg.max_outstanding_pkts_per_conn = 0;

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2fef21d6/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 8a97ab8..d1d696e 100644
--- a/net/nimble/host/src/test/ble_hs_test_util.h
+++ b/net/nimble/host/src/test/ble_hs_test_util.h
@@ -48,6 +48,10 @@ void ble_hs_test_util_rx_ack(uint16_t opcode, uint8_t status);
 void ble_hs_test_util_rx_ack_param(uint16_t opcode, uint8_t status,
                                    void *param, int param_len);
 void ble_hs_test_util_rx_le_ack(uint16_t ocf, uint8_t status);
+int ble_hs_test_util_l2cap_rx_first_frag(struct ble_hs_conn *conn,
+                                         uint16_t cid,
+                                         struct hci_data_hdr *hci_hdr,
+                                         struct os_mbuf *om);
 int ble_hs_test_util_l2cap_rx(struct ble_hs_conn *conn,
                               struct hci_data_hdr *hci_hdr,
                               struct os_mbuf *om);

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2fef21d6/net/nimble/host/src/test/ble_l2cap_sm_test.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/test/ble_l2cap_sm_test.c b/net/nimble/host/src/test/ble_l2cap_sm_test.c
index 113b697..f29675c 100644
--- a/net/nimble/host/src/test/ble_l2cap_sm_test.c
+++ b/net/nimble/host/src/test/ble_l2cap_sm_test.c
@@ -90,17 +90,14 @@ ble_l2cap_sm_test_util_rx_pair_cmd(struct ble_hs_conn *conn, uint8_t op,
 
     payload_len = BLE_L2CAP_SM_HDR_SZ + BLE_L2CAP_SM_PAIR_CMD_SZ;
 
-    om = ble_l2cap_prepend_hdr(om, BLE_L2CAP_CID_SM, payload_len);
-    TEST_ASSERT_FATAL(om != NULL);
-
     v = os_mbuf_extend(om, payload_len);
     TEST_ASSERT_FATAL(v != NULL);
 
-    rc = ble_l2cap_sm_pair_cmd_write(v, payload_len,
-                                     op == BLE_L2CAP_SM_OP_PAIR_REQ, cmd);
-    TEST_ASSERT_FATAL(rc == 0);
+    ble_l2cap_sm_pair_cmd_write(v, payload_len, op == BLE_L2CAP_SM_OP_PAIR_REQ,
+                                cmd);
 
-    rc = ble_hs_test_util_l2cap_rx(conn, &hci_hdr, om);
+    rc = ble_hs_test_util_l2cap_rx_first_frag(conn, BLE_L2CAP_CID_SM, &hci_hdr,
+                                              om);
     TEST_ASSERT_FATAL(rc == 0);
 }
 
@@ -137,16 +134,13 @@ ble_l2cap_sm_test_util_rx_confirm(struct ble_hs_conn *conn,
 
     payload_len = BLE_L2CAP_SM_HDR_SZ + BLE_L2CAP_SM_PAIR_CONFIRM_SZ;
 
-    om = ble_l2cap_prepend_hdr(om, BLE_L2CAP_CID_SM, payload_len);
-    TEST_ASSERT_FATAL(om != NULL);
-
     v = os_mbuf_extend(om, payload_len);
     TEST_ASSERT_FATAL(v != NULL);
 
-    rc = ble_l2cap_sm_pair_confirm_write(v, payload_len, cmd);
-    TEST_ASSERT_FATAL(rc == 0);
+    ble_l2cap_sm_pair_confirm_write(v, payload_len, cmd);
 
-    rc = ble_hs_test_util_l2cap_rx(conn, &hci_hdr, om);
+    rc = ble_hs_test_util_l2cap_rx_first_frag(conn, BLE_L2CAP_CID_SM, &hci_hdr,
+                                              om);
     TEST_ASSERT_FATAL(rc == 0);
 }
 
@@ -169,16 +163,13 @@ ble_l2cap_sm_test_util_rx_random(struct ble_hs_conn *conn,
 
     payload_len = BLE_L2CAP_SM_HDR_SZ + BLE_L2CAP_SM_PAIR_RANDOM_SZ;
 
-    om = ble_l2cap_prepend_hdr(om, BLE_L2CAP_CID_SM, payload_len);
-    TEST_ASSERT_FATAL(om != NULL);
-
     v = os_mbuf_extend(om, payload_len);
     TEST_ASSERT_FATAL(v != NULL);
 
-    rc = ble_l2cap_sm_pair_random_write(v, payload_len, cmd);
-    TEST_ASSERT_FATAL(rc == 0);
+    ble_l2cap_sm_pair_random_write(v, payload_len, cmd);
 
-    rc = ble_hs_test_util_l2cap_rx(conn, &hci_hdr, om);
+    rc = ble_hs_test_util_l2cap_rx_first_frag(conn, BLE_L2CAP_CID_SM, &hci_hdr,
+                                              om);
     TEST_ASSERT_FATAL(rc == 0);
 }
 
@@ -201,14 +192,12 @@ ble_l2cap_sm_test_util_verify_tx_pair_cmd(
     struct ble_l2cap_sm_pair_cmd *exp_cmd)
 {
     struct ble_l2cap_sm_pair_cmd cmd;
-    int rc;
 
     ble_l2cap_sm_test_util_verify_tx_hdr(op, BLE_L2CAP_SM_PAIR_CMD_SZ);
 
-    rc = ble_l2cap_sm_pair_cmd_parse(ble_hs_test_util_prev_tx->om_data,
-                                     ble_hs_test_util_prev_tx->om_len,
-                                     &cmd);
-    TEST_ASSERT_FATAL(rc == 0);
+    ble_l2cap_sm_pair_cmd_parse(ble_hs_test_util_prev_tx->om_data,
+                                ble_hs_test_util_prev_tx->om_len,
+                                &cmd);
 
     TEST_ASSERT(cmd.io_cap == exp_cmd->io_cap);
     TEST_ASSERT(cmd.oob_data_flag == exp_cmd->oob_data_flag);
@@ -239,15 +228,13 @@ ble_l2cap_sm_test_util_verify_tx_pair_confirm(
     struct ble_l2cap_sm_pair_confirm *exp_cmd)
 {
     struct ble_l2cap_sm_pair_confirm cmd;
-    int rc;
 
     ble_l2cap_sm_test_util_verify_tx_hdr(BLE_L2CAP_SM_OP_PAIR_CONFIRM,
                                          BLE_L2CAP_SM_PAIR_CONFIRM_SZ);
 
-    rc = ble_l2cap_sm_pair_confirm_parse(ble_hs_test_util_prev_tx->om_data,
-                                         ble_hs_test_util_prev_tx->om_len,
-                                         &cmd);
-    TEST_ASSERT_FATAL(rc == 0);
+    ble_l2cap_sm_pair_confirm_parse(ble_hs_test_util_prev_tx->om_data,
+                                    ble_hs_test_util_prev_tx->om_len,
+                                    &cmd);
 
     TEST_ASSERT(memcmp(cmd.value, exp_cmd->value, 16) == 0);
 }
@@ -257,15 +244,13 @@ ble_l2cap_sm_test_util_verify_tx_pair_random(
     struct ble_l2cap_sm_pair_random *exp_cmd)
 {
     struct ble_l2cap_sm_pair_random cmd;
-    int rc;
 
     ble_l2cap_sm_test_util_verify_tx_hdr(BLE_L2CAP_SM_OP_PAIR_RANDOM,
                                          BLE_L2CAP_SM_PAIR_RANDOM_SZ);
 
-    rc = ble_l2cap_sm_pair_random_parse(ble_hs_test_util_prev_tx->om_data,
-                                         ble_hs_test_util_prev_tx->om_len,
-                                         &cmd);
-    TEST_ASSERT_FATAL(rc == 0);
+    ble_l2cap_sm_pair_random_parse(ble_hs_test_util_prev_tx->om_data,
+                                   ble_hs_test_util_prev_tx->om_len,
+                                   &cmd);
 
     TEST_ASSERT(memcmp(cmd.value, exp_cmd->value, 16) == 0);
 }
@@ -275,15 +260,13 @@ ble_l2cap_sm_test_util_verify_tx_pair_fail(
     struct ble_l2cap_sm_pair_fail *exp_cmd)
 {
     struct ble_l2cap_sm_pair_fail cmd;
-    int rc;
 
     ble_l2cap_sm_test_util_verify_tx_hdr(BLE_L2CAP_SM_OP_PAIR_FAIL,
                                          BLE_L2CAP_SM_PAIR_FAIL_SZ);
 
-    rc = ble_l2cap_sm_pair_fail_parse(ble_hs_test_util_prev_tx->om_data,
-                                      ble_hs_test_util_prev_tx->om_len,
-                                      &cmd);
-    TEST_ASSERT_FATAL(rc == 0);
+    ble_l2cap_sm_pair_fail_parse(ble_hs_test_util_prev_tx->om_data,
+                                 ble_hs_test_util_prev_tx->om_len,
+                                 &cmd);
 
     TEST_ASSERT(cmd.reason == exp_cmd->reason);
 }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2fef21d6/net/nimble/host/src/test/ble_l2cap_test.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/test/ble_l2cap_test.c b/net/nimble/host/src/test/ble_l2cap_test.c
index 106b757..6ace301 100644
--- a/net/nimble/host/src/test/ble_l2cap_test.c
+++ b/net/nimble/host/src/test/ble_l2cap_test.c
@@ -54,7 +54,6 @@ ble_l2cap_test_util_rx_update_req(struct ble_hs_conn *conn, uint8_t id,
                                   struct ble_l2cap_sig_update_params *params)
 {
     struct ble_l2cap_sig_update_req req;
-    struct ble_l2cap_sig_hdr sig_hdr;
     struct hci_data_hdr hci_hdr;
     struct os_mbuf *om;
     void *v;
@@ -64,30 +63,18 @@ ble_l2cap_test_util_rx_update_req(struct ble_hs_conn *conn, uint8_t id,
         2, BLE_HCI_PB_FIRST_FLUSH,
         BLE_L2CAP_HDR_SZ + BLE_L2CAP_SIG_HDR_SZ + BLE_L2CAP_SIG_UPDATE_REQ_SZ);
 
-    om = ble_hs_misc_pkthdr();
-    TEST_ASSERT_FATAL(om != NULL);
-
-    om = ble_l2cap_prepend_hdr(om, BLE_L2CAP_CID_SIG,
-                               BLE_L2CAP_SIG_HDR_SZ +
-                                   BLE_L2CAP_SIG_UPDATE_REQ_SZ);
-    TEST_ASSERT_FATAL(om != NULL);
+    rc = ble_l2cap_sig_init_cmd(BLE_L2CAP_SIG_OP_UPDATE_REQ, id,
+                                BLE_L2CAP_SIG_UPDATE_REQ_SZ, &om, &v);
+    TEST_ASSERT_FATAL(rc == 0);
 
-    sig_hdr.op = BLE_L2CAP_SIG_OP_UPDATE_REQ;
-    sig_hdr.identifier = id;
-    sig_hdr.length = BLE_L2CAP_SIG_UPDATE_REQ_SZ;
     req.itvl_min = params->itvl_min;
     req.itvl_max = params->itvl_max;
     req.slave_latency = params->slave_latency;
     req.timeout_multiplier = params->timeout_multiplier;
+    ble_l2cap_sig_update_req_write(v, BLE_L2CAP_SIG_UPDATE_REQ_SZ, &req);
 
-    v = os_mbuf_extend(om, BLE_L2CAP_SIG_HDR_SZ + BLE_L2CAP_SIG_UPDATE_REQ_SZ);
-    TEST_ASSERT_FATAL(v != NULL);
-
-    rc = ble_l2cap_sig_update_req_write(
-        v, BLE_L2CAP_SIG_HDR_SZ + BLE_L2CAP_SIG_UPDATE_REQ_SZ, &sig_hdr, &req);
-    TEST_ASSERT_FATAL(rc == 0);
-
-    rc = ble_hs_test_util_l2cap_rx(conn, &hci_hdr, om);
+    rc = ble_hs_test_util_l2cap_rx_first_frag(conn, BLE_L2CAP_CID_SIG,
+                                              &hci_hdr, om);
     TEST_ASSERT_FATAL(rc == 0);
 }
 
@@ -96,7 +83,6 @@ ble_l2cap_test_util_rx_update_rsp(struct ble_hs_conn *conn,
                                   uint8_t id, uint16_t result)
 {
     struct ble_l2cap_sig_update_rsp rsp;
-    struct ble_l2cap_sig_hdr sig_hdr;
     struct hci_data_hdr hci_hdr;
     struct os_mbuf *om;
     void *v;
@@ -106,27 +92,15 @@ ble_l2cap_test_util_rx_update_rsp(struct ble_hs_conn *conn,
         2, BLE_HCI_PB_FIRST_FLUSH,
         BLE_L2CAP_HDR_SZ + BLE_L2CAP_SIG_HDR_SZ + BLE_L2CAP_SIG_UPDATE_RSP_SZ);
 
-    om = ble_hs_misc_pkthdr();
-    TEST_ASSERT_FATAL(om != NULL);
-
-    om = ble_l2cap_prepend_hdr(om, BLE_L2CAP_CID_SIG,
-                               BLE_L2CAP_SIG_HDR_SZ +
-                                   BLE_L2CAP_SIG_UPDATE_RSP_SZ);
-    TEST_ASSERT_FATAL(om != NULL);
+    rc = ble_l2cap_sig_init_cmd(BLE_L2CAP_SIG_OP_UPDATE_RSP, id,
+                                BLE_L2CAP_SIG_UPDATE_RSP_SZ, &om, &v);
+    TEST_ASSERT_FATAL(rc == 0);
 
-    sig_hdr.op = BLE_L2CAP_SIG_OP_UPDATE_RSP;
-    sig_hdr.identifier = id;
-    sig_hdr.length = BLE_L2CAP_SIG_UPDATE_RSP_SZ;
     rsp.result = result;
+    ble_l2cap_sig_update_rsp_write(v, BLE_L2CAP_SIG_UPDATE_RSP_SZ, &rsp);
 
-    v = os_mbuf_extend(om, BLE_L2CAP_SIG_HDR_SZ + BLE_L2CAP_SIG_UPDATE_RSP_SZ);
-    TEST_ASSERT_FATAL(v != NULL);
-
-    rc = ble_l2cap_sig_update_rsp_write(
-        v, BLE_L2CAP_SIG_HDR_SZ + BLE_L2CAP_SIG_UPDATE_RSP_SZ, &sig_hdr, &rsp);
-    TEST_ASSERT_FATAL(rc == 0);
-
-    rc = ble_hs_test_util_l2cap_rx(conn, &hci_hdr, om);
+    rc = ble_hs_test_util_l2cap_rx_first_frag(conn, BLE_L2CAP_CID_SIG,
+                                              &hci_hdr, om);
     return rc;
 }
 
@@ -139,21 +113,19 @@ ble_l2cap_test_util_verify_tx_update_req(
 {
     struct ble_l2cap_sig_update_req req;
     struct ble_l2cap_sig_hdr hdr;
-    int rc;
 
     TEST_ASSERT_FATAL(ble_hs_test_util_prev_tx != NULL);
     TEST_ASSERT(OS_MBUF_PKTLEN(ble_hs_test_util_prev_tx) ==
                 BLE_L2CAP_SIG_HDR_SZ + BLE_L2CAP_SIG_UPDATE_REQ_SZ);
-    rc = ble_l2cap_sig_hdr_parse(ble_hs_test_util_prev_tx->om_data,
-                                 ble_hs_test_util_prev_tx->om_len, &hdr);
-    TEST_ASSERT_FATAL(rc == 0);
+    ble_l2cap_sig_hdr_parse(ble_hs_test_util_prev_tx->om_data,
+                            ble_hs_test_util_prev_tx->om_len, &hdr);
 
     ble_hs_test_util_prev_tx->om_data += BLE_L2CAP_SIG_HDR_SZ;
     ble_hs_test_util_prev_tx->om_len -= BLE_L2CAP_SIG_HDR_SZ;
 
-    rc = ble_l2cap_sig_update_req_parse(ble_hs_test_util_prev_tx->om_data,
-                                        ble_hs_test_util_prev_tx->om_len,
-                                        &req);
+    ble_l2cap_sig_update_req_parse(ble_hs_test_util_prev_tx->om_data,
+                                   ble_hs_test_util_prev_tx->om_len,
+                                   &req);
     TEST_ASSERT(hdr.op == BLE_L2CAP_SIG_OP_UPDATE_REQ);
     TEST_ASSERT(hdr.length == BLE_L2CAP_SIG_UPDATE_REQ_SZ);
     TEST_ASSERT(req.itvl_min == params->itvl_min);
@@ -169,21 +141,19 @@ ble_l2cap_test_util_verify_tx_update_rsp(uint8_t exp_id, uint16_t exp_result)
 {
     struct ble_l2cap_sig_update_rsp rsp;
     struct ble_l2cap_sig_hdr hdr;
-    int rc;
 
     TEST_ASSERT_FATAL(ble_hs_test_util_prev_tx != NULL);
     TEST_ASSERT(OS_MBUF_PKTLEN(ble_hs_test_util_prev_tx) ==
                 BLE_L2CAP_SIG_HDR_SZ + BLE_L2CAP_SIG_UPDATE_RSP_SZ);
-    rc = ble_l2cap_sig_hdr_parse(ble_hs_test_util_prev_tx->om_data,
-                                 ble_hs_test_util_prev_tx->om_len, &hdr);
-    TEST_ASSERT_FATAL(rc == 0);
+    ble_l2cap_sig_hdr_parse(ble_hs_test_util_prev_tx->om_data,
+                            ble_hs_test_util_prev_tx->om_len, &hdr);
 
     ble_hs_test_util_prev_tx->om_data += BLE_L2CAP_SIG_HDR_SZ;
     ble_hs_test_util_prev_tx->om_len -= BLE_L2CAP_SIG_HDR_SZ;
 
-    rc = ble_l2cap_sig_update_rsp_parse(ble_hs_test_util_prev_tx->om_data,
-                                        ble_hs_test_util_prev_tx->om_len,
-                                        &rsp);
+    ble_l2cap_sig_update_rsp_parse(ble_hs_test_util_prev_tx->om_data,
+                                   ble_hs_test_util_prev_tx->om_len,
+                                   &rsp);
     TEST_ASSERT(hdr.op == BLE_L2CAP_SIG_OP_UPDATE_RSP);
     TEST_ASSERT(hdr.identifier == exp_id);
     TEST_ASSERT(hdr.length == BLE_L2CAP_SIG_UPDATE_RSP_SZ);

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2fef21d6/net/nimble/include/nimble/ble.h
----------------------------------------------------------------------
diff --git a/net/nimble/include/nimble/ble.h b/net/nimble/include/nimble/ble.h
index 0660c5b..27026fd 100644
--- a/net/nimble/include/nimble/ble.h
+++ b/net/nimble/include/nimble/ble.h
@@ -20,6 +20,7 @@
 #ifndef H_BLE_
 #define H_BLE_
 
+#include <inttypes.h>
 /* XXX: some or all of these should not be here */
 #include "os/os.h"
 


[3/3] incubator-mynewt-core git commit: ble host: reduce code size.

Posted by cc...@apache.org.
ble host: reduce code size.

* Use packed structs for over-the-air ATT and L2CAP commands.
* Compile-out ~90% of asserts except when BLE_HS_DEBUG is defined.


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

Branch: refs/heads/develop
Commit: 2fef21d6a1f9d3d83b88ecf11b825a6e5a354a47
Parents: f41a109
Author: Christopher Collins <cc...@apache.org>
Authored: Fri Apr 1 18:02:21 2016 -0700
Committer: Christopher Collins <cc...@apache.org>
Committed: Mon Apr 4 18:41:14 2016 -0700

----------------------------------------------------------------------
 apps/bletiny/src/main.c                         |   4 +
 net/nimble/host/src/ble_att.c                   |   1 -
 net/nimble/host/src/ble_att_clt.c               | 231 ++---
 net/nimble/host/src/ble_att_cmd.c               | 987 +++++++------------
 net/nimble/host/src/ble_att_cmd.h               | 168 ++--
 net/nimble/host/src/ble_att_priv.h              |  16 +-
 net/nimble/host/src/ble_att_svr.c               | 348 ++-----
 net/nimble/host/src/ble_fsm.c                   |  26 +-
 net/nimble/host/src/ble_fsm_priv.h              |   2 +
 net/nimble/host/src/ble_gap.c                   | 124 +--
 net/nimble/host/src/ble_gattc.c                 |  19 +-
 net/nimble/host/src/ble_gatts.c                 |  43 +-
 net/nimble/host/src/ble_hci_sched.c             |  22 +-
 net/nimble/host/src/ble_hs.c                    |   2 +-
 net/nimble/host/src/ble_hs_adv.c                |   3 +-
 net/nimble/host/src/ble_hs_conn.c               |  11 +-
 net/nimble/host/src/ble_hs_endian.h             |  57 ++
 net/nimble/host/src/ble_hs_misc.c               |  12 +-
 net/nimble/host/src/ble_hs_priv.h               |  26 +-
 net/nimble/host/src/ble_hs_startup.c            |  26 +-
 net/nimble/host/src/ble_l2cap.c                 |   5 +-
 net/nimble/host/src/ble_l2cap_priv.h            |  40 +-
 net/nimble/host/src/ble_l2cap_sig.c             |  16 +-
 net/nimble/host/src/ble_l2cap_sig_cmd.c         | 318 +++---
 net/nimble/host/src/ble_l2cap_sm.c              |  39 +-
 net/nimble/host/src/ble_l2cap_sm.h              |  40 +-
 net/nimble/host/src/ble_l2cap_sm_cmd.c          |  84 +-
 net/nimble/host/src/ble_uuid.c                  |   5 +-
 net/nimble/host/src/host_dbg.c                  |   4 +
 net/nimble/host/src/host_hci.c                  |  23 +-
 net/nimble/host/src/host_hci_cmd.c              |   4 +-
 net/nimble/host/src/test/ble_att_clt_test.c     |  33 +-
 net/nimble/host/src/test/ble_att_svr_test.c     | 180 ++--
 net/nimble/host/src/test/ble_gatt_disc_c_test.c |   3 +-
 net/nimble/host/src/test/ble_gatt_disc_d_test.c |   3 +-
 net/nimble/host/src/test/ble_gatt_disc_s_test.c |   5 +-
 net/nimble/host/src/test/ble_gatt_find_s_test.c |  12 +-
 net/nimble/host/src/test/ble_gatt_read_test.c   |   3 +-
 net/nimble/host/src/test/ble_gatt_write_test.c  |   9 +-
 .../host/src/test/ble_gatts_notify_test.c       |  12 +-
 net/nimble/host/src/test/ble_hs_test_util.c     |  38 +-
 net/nimble/host/src/test/ble_hs_test_util.h     |   4 +
 net/nimble/host/src/test/ble_l2cap_sm_test.c    |  61 +-
 net/nimble/host/src/test/ble_l2cap_test.c       |  74 +-
 net/nimble/include/nimble/ble.h                 |   1 +
 45 files changed, 1269 insertions(+), 1875 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2fef21d6/apps/bletiny/src/main.c
----------------------------------------------------------------------
diff --git a/apps/bletiny/src/main.c b/apps/bletiny/src/main.c
index d0eb018..e27a31c 100755
--- a/apps/bletiny/src/main.c
+++ b/apps/bletiny/src/main.c
@@ -42,6 +42,10 @@
 #include "host/ble_gap.h"
 #include "host/ble_gatt.h"
 #include "controller/ble_ll.h"
+
+/* XXX: An app should not include private headers from a library.  The bletiny
+ * app uses some of nimble's internal details for logging.
+ */
 #include "../src/ble_hs_conn.h"
 #include "../src/ble_hci_sched.h"
 

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2fef21d6/net/nimble/host/src/ble_att.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_att.c b/net/nimble/host/src/ble_att.c
index a621ec0..c9fa0bb 100644
--- a/net/nimble/host/src/ble_att.c
+++ b/net/nimble/host/src/ble_att.c
@@ -19,7 +19,6 @@
 
 #include <stddef.h>
 #include <errno.h>
-#include <assert.h>
 #include "bsp/bsp.h"
 #include "ble_hs_priv.h"
 

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2fef21d6/net/nimble/host/src/ble_att_clt.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_att_clt.c b/net/nimble/host/src/ble_att_clt.c
index 402636c..0206ddf 100644
--- a/net/nimble/host/src/ble_att_clt.c
+++ b/net/nimble/host/src/ble_att_clt.c
@@ -48,7 +48,7 @@ ble_att_clt_init_req(uint16_t initial_sz, struct os_mbuf **out_txom)
     }
 
     /* The caller expects the initial buffer to be at the start of the mbuf. */
-    assert(buf == (*out_txom)->om_data);
+    BLE_HS_DBG_ASSERT(buf == (*out_txom)->om_data);
 
     return 0;
 
@@ -130,7 +130,7 @@ ble_att_clt_tx_req(uint16_t conn_handle, struct os_mbuf *txom)
     int rc;
 
     rc = os_mbuf_copydata(txom, 0, 1, &att_op);
-    assert(rc == 0);
+    BLE_HS_DBG_ASSERT_EVAL(rc == 0);
 
     ble_att_inc_tx_stat(att_op);
 
@@ -171,9 +171,7 @@ ble_att_clt_rx_error(uint16_t conn_handle, struct os_mbuf **om)
         return rc;
     }
 
-    rc = ble_att_error_rsp_parse((*om)->om_data, (*om)->om_len, &rsp);
-    assert(rc == 0);
-
+    ble_att_error_rsp_parse((*om)->om_data, (*om)->om_len, &rsp);
     ble_gattc_rx_err(conn_handle, &rsp);
 
     return 0;
@@ -200,8 +198,7 @@ ble_att_clt_build_mtu_req(struct ble_att_mtu_cmd *req,
         goto done;
     }
 
-    rc = ble_att_mtu_req_write(txom->om_data, txom->om_len, req);
-    assert(rc == 0);
+    ble_att_mtu_req_write(txom->om_data, txom->om_len, req);
 
 done:
     if (rc != 0) {
@@ -267,8 +264,7 @@ ble_att_clt_rx_mtu(uint16_t conn_handle, struct os_mbuf **om)
 
     rc = ble_hs_misc_pullup_base(om, BLE_ATT_MTU_CMD_SZ);
     if (rc == 0) {
-        rc = ble_att_mtu_cmd_parse((*om)->om_data, (*om)->om_len, &rsp);
-        assert(rc == 0);
+        ble_att_mtu_cmd_parse((*om)->om_data, (*om)->om_len, &rsp);
 
         ble_hs_conn_lock();
 
@@ -299,24 +295,15 @@ ble_att_clt_build_find_info_req(struct ble_att_find_info_req *req,
     struct os_mbuf *txom;
     int rc;
 
-    txom = NULL;
-
     rc = ble_att_clt_init_req(BLE_ATT_FIND_INFO_REQ_SZ, &txom);
     if (rc != 0) {
-        goto done;
-    }
-
-    rc = ble_att_find_info_req_write(txom->om_data, txom->om_len, req);
-    assert(rc == 0);
-
-done:
-    if (rc != 0) {
-        os_mbuf_free_chain(txom);
-        txom = NULL;
+        return rc;
     }
 
+    ble_att_find_info_req_write(txom->om_data, txom->om_len, req);
     *out_txom = txom;
-    return rc;
+
+    return 0;
 }
 
 /**
@@ -353,6 +340,59 @@ ble_att_clt_tx_find_info(uint16_t conn_handle,
     return 0;
 }
 
+static int
+ble_att_clt_parse_find_info_entry(struct os_mbuf **rxom, uint8_t rsp_format,
+                                  struct ble_att_find_info_idata *idata)
+{
+    uint16_t uuid16;
+    int entry_len;
+    int rc;
+
+    switch (rsp_format) {
+    case BLE_ATT_FIND_INFO_RSP_FORMAT_16BIT:
+        entry_len = 2 + 2;
+        break;
+
+    case BLE_ATT_FIND_INFO_RSP_FORMAT_128BIT:
+        entry_len = 2 + 16;
+        break;
+
+    default:
+        return BLE_HS_EBADDATA;
+    }
+
+    rc = ble_hs_misc_pullup_base(rxom, entry_len);
+    if (rc != 0) {
+        return rc;
+    }
+
+    idata->attr_handle = le16toh((*rxom)->om_data);
+
+    switch (rsp_format) {
+    case BLE_ATT_FIND_INFO_RSP_FORMAT_16BIT:
+        uuid16 = le16toh((*rxom)->om_data + 2);
+        rc = ble_uuid_16_to_128(uuid16, idata->uuid128);
+        if (rc != 0) {
+            return BLE_HS_EBADDATA;
+        }
+        break;
+
+    case BLE_ATT_FIND_INFO_RSP_FORMAT_128BIT:
+        rc = os_mbuf_copydata(*rxom, 2, 16, idata->uuid128);
+        if (rc != 0) {
+            return BLE_HS_EBADDATA;
+        }
+        break;
+
+    default:
+        BLE_HS_DBG_ASSERT(0);
+        break;
+    }
+
+    os_mbuf_adj(*rxom, entry_len);
+    return 0;
+}
+
 /**
  * Lock restrictions:
  *     o Caller unlocks all ble_hs mutexes.
@@ -364,76 +404,34 @@ ble_att_clt_rx_find_info(uint16_t conn_handle, struct os_mbuf **om)
     return BLE_HS_ENOTSUP;
 #endif
 
-    struct ble_att_find_info_rsp rsp;
     struct ble_att_find_info_idata idata;
-    struct os_mbuf *rxom;
-    uint16_t uuid16;
+    struct ble_att_find_info_rsp rsp;
     int rc;
 
-    rxom = NULL;
-
     rc = ble_hs_misc_pullup_base(om, BLE_ATT_FIND_INFO_RSP_BASE_SZ);
     if (rc != 0) {
         goto done;
     }
 
-    /* Double indirection is unwieldy; use rxom for remainder of function. */
-    rxom = *om;
-
-    rc = ble_att_find_info_rsp_parse(rxom->om_data, rxom->om_len, &rsp);
-    assert(rc == 0);
+    ble_att_find_info_rsp_parse((*om)->om_data, (*om)->om_len, &rsp);
 
     /* Strip the response base from the front of the mbuf. */
-    os_mbuf_adj(rxom, BLE_ATT_FIND_INFO_RSP_BASE_SZ);
+    os_mbuf_adj((*om), BLE_ATT_FIND_INFO_RSP_BASE_SZ);
 
-    idata.attr_handle = 0;
-    while (OS_MBUF_PKTLEN(rxom) > 0) {
-        rc = ble_hs_misc_pullup_base(&rxom, 2);
+    while (OS_MBUF_PKTLEN(*om) > 0) {
+        rc = ble_att_clt_parse_find_info_entry(om, rsp.bafp_format, &idata);
         if (rc != 0) {
             goto done;
         }
 
-        idata.attr_handle = le16toh(rxom->om_data);
-        os_mbuf_adj(rxom, 2);
-
-        switch (rsp.bafp_format) {
-        case BLE_ATT_FIND_INFO_RSP_FORMAT_16BIT:
-            rc = ble_hs_misc_pullup_base(&rxom, 2);
-            if (rc != 0) {
-                goto done;
-            }
-            uuid16 = le16toh(rxom->om_data);
-            os_mbuf_adj(rxom, 2);
-
-            rc = ble_uuid_16_to_128(uuid16, idata.uuid128);
-            if (rc != 0) {
-                rc = BLE_HS_EBADDATA;
-                goto done;
-            }
-            break;
-
-        case BLE_ATT_FIND_INFO_RSP_FORMAT_128BIT:
-            rc = os_mbuf_copydata(rxom, 0, 16, idata.uuid128);
-            if (rc != 0) {
-                rc = BLE_HS_EBADDATA;
-                goto done;
-            }
-            os_mbuf_adj(rxom, 16);
-            break;
-
-        default:
-            rc = BLE_HS_EBADDATA;
-            goto done;
-        }
-
+        /* Hand find-info entry to GATT. */
         ble_gattc_rx_find_info_idata(conn_handle, &idata);
     }
 
     rc = 0;
 
 done:
-    *om = rxom;
-
+    /* Notify GATT that response processing is done. */
     ble_gattc_rx_find_info_complete(conn_handle, rc);
     return rc;
 }
@@ -450,33 +448,23 @@ ble_att_clt_build_find_type_value_req(struct ble_att_find_type_value_req *req,
                                       void *attribute_value, int value_len,
                                       struct os_mbuf **out_txom)
 {
-    struct os_mbuf *txom;
     int rc;
 
-    txom = NULL;
-
-    rc = ble_att_clt_init_req(BLE_ATT_FIND_TYPE_VALUE_REQ_BASE_SZ, &txom);
+    rc = ble_att_clt_init_req(BLE_ATT_FIND_TYPE_VALUE_REQ_BASE_SZ, out_txom);
     if (rc != 0) {
-        goto done;
-    }
-
-    rc = ble_att_find_type_value_req_write(txom->om_data, txom->om_len, req);
-    assert(rc == 0);
-
-    rc = os_mbuf_append(txom, attribute_value, value_len);
-    if (rc != 0) {
-        rc = BLE_HS_ENOMEM;
-        goto done;
+        return rc;
     }
 
-done:
+    ble_att_find_type_value_req_write((*out_txom)->om_data,
+                                      (*out_txom)->om_len,
+                                      req);
+    rc = os_mbuf_append(*out_txom, attribute_value, value_len);
     if (rc != 0) {
-        os_mbuf_free_chain(txom);
-        txom = NULL;
+        os_mbuf_free_chain(*out_txom);
+        return BLE_HS_ENOMEM;
     }
 
-    *out_txom = txom;
-    return rc;
+    return 0;
 }
 
 /**
@@ -520,18 +508,17 @@ ble_att_clt_tx_find_type_value(uint16_t conn_handle,
  */
 static int
 ble_att_clt_parse_find_type_value_hinfo(
-    struct os_mbuf **om, struct ble_att_find_type_value_hinfo *hinfo)
+    struct os_mbuf **om, struct ble_att_find_type_value_hinfo *dst)
 {
     int rc;
 
-    rc = ble_hs_misc_pullup_base(om,
-                                     BLE_ATT_FIND_TYPE_VALUE_HINFO_BASE_SZ);
+    rc = os_mbuf_copydata(*om, 0, BLE_ATT_FIND_TYPE_VALUE_HINFO_BASE_SZ, dst);
     if (rc != 0) {
-        return rc;
+        return BLE_HS_EBADDATA;
     }
 
-    hinfo->attr_handle = le16toh((*om)->om_data + 0);
-    hinfo->group_end_handle = le16toh((*om)->om_data + 2);
+    dst->attr_handle = TOFROMLE16(dst->attr_handle);
+    dst->group_end_handle = TOFROMLE16(dst->group_end_handle);
 
     return 0;
 }
@@ -551,12 +538,12 @@ ble_att_clt_rx_find_type_value(uint16_t conn_handle, struct os_mbuf **rxom)
     int rc;
 
     /* Reponse consists of a one-byte opcode (already verified) and a variable
-     * length Handles Information List field.  Strip the opcode from the
+     * length Handles-Information-List field.  Strip the opcode from the
      * response.
      */
     os_mbuf_adj(*rxom, BLE_ATT_FIND_TYPE_VALUE_RSP_BASE_SZ);
 
-    /* Parse the Handles Information List field, passing each entry to GATT. */
+    /* Parse the Handles-Information-List field, passing each entry to GATT. */
     rc = 0;
     while (OS_MBUF_PKTLEN(*rxom) > 0) {
         rc = ble_att_clt_parse_find_type_value_hinfo(rxom, &hinfo);
@@ -595,8 +582,7 @@ ble_att_clt_build_read_type_req(struct ble_att_read_type_req *req,
         goto done;
     }
 
-    rc = ble_att_read_type_req_write(txom->om_data, txom->om_len, req);
-    assert(rc == 0);
+    ble_att_read_type_req_write(txom->om_data, txom->om_len, req);
 
     rc = ble_uuid_append(txom, uuid128);
     if (rc != 0) {
@@ -690,8 +676,7 @@ ble_att_clt_rx_read_type(uint16_t conn_handle, struct os_mbuf **rxom)
         goto done;
     }
 
-    rc = ble_att_read_type_rsp_parse((*rxom)->om_data, (*rxom)->om_len, &rsp);
-    assert(rc == 0);
+    ble_att_read_type_rsp_parse((*rxom)->om_data, (*rxom)->om_len, &rsp);
 
     /* Strip the response base from the front of the mbuf. */
     os_mbuf_adj(*rxom, BLE_ATT_READ_TYPE_RSP_BASE_SZ);
@@ -735,8 +720,7 @@ ble_att_clt_build_read_req(struct ble_att_read_req *req,
         goto done;
     }
 
-    rc = ble_att_read_req_write(txom->om_data, txom->om_len, req);
-    assert(rc == 0);
+    ble_att_read_req_write(txom->om_data, txom->om_len, req);
 
 done:
     if (rc != 0) {
@@ -828,8 +812,7 @@ ble_att_clt_build_read_blob_req(struct ble_att_read_blob_req *req,
         goto done;
     }
 
-    rc = ble_att_read_blob_req_write(txom->om_data, txom->om_len, req);
-    assert(rc == 0);
+    ble_att_read_blob_req_write(txom->om_data, txom->om_len, req);
 
 done:
     if (rc != 0) {
@@ -924,8 +907,7 @@ ble_att_clt_build_read_mult_req(uint16_t *att_handles, int num_att_handles,
         goto done;
     }
 
-    rc = ble_att_read_mult_req_write(txom->om_data, txom->om_len);
-    assert(rc == 0);
+    ble_att_read_mult_req_write(txom->om_data, txom->om_len);
 
     for (i = 0; i < num_att_handles; i++) {
         buf = os_mbuf_extend(txom, 2);
@@ -1030,8 +1012,7 @@ ble_att_clt_build_read_group_type_req(struct ble_att_read_group_type_req *req,
         goto done;
     }
 
-    rc = ble_att_read_group_type_req_write(txom->om_data, txom->om_len, req);
-    assert(rc == 0);
+    ble_att_read_group_type_req_write(txom->om_data, txom->om_len, req);
 
     rc = ble_uuid_append(txom, uuid128);
     if (rc != 0) {
@@ -1127,15 +1108,12 @@ ble_att_clt_rx_read_group_type(uint16_t conn_handle, struct os_mbuf **rxom)
     struct ble_att_read_group_type_rsp rsp;
     int rc;
 
-    rc = ble_hs_misc_pullup_base(rxom,
-                                     BLE_ATT_READ_GROUP_TYPE_RSP_BASE_SZ);
+    rc = ble_hs_misc_pullup_base(rxom, BLE_ATT_READ_GROUP_TYPE_RSP_BASE_SZ);
     if (rc != 0) {
         goto done;
     }
 
-    rc = ble_att_read_group_type_rsp_parse((*rxom)->om_data, (*rxom)->om_len,
-                                           &rsp);
-    assert(rc == 0);
+    ble_att_read_group_type_rsp_parse((*rxom)->om_data, (*rxom)->om_len, &rsp);
 
     /* Strip the base from the front of the response. */
     os_mbuf_adj(*rxom, BLE_ATT_READ_GROUP_TYPE_RSP_BASE_SZ);
@@ -1183,11 +1161,10 @@ ble_att_clt_build_write_req_or_cmd(uint16_t conn_handle,
     }
 
     if (is_req) {
-        rc = ble_att_write_req_write(txom->om_data, txom->om_len, req);
+        ble_att_write_req_write(txom->om_data, txom->om_len, req);
     } else {
-        rc = ble_att_write_cmd_write(txom->om_data, txom->om_len, req);
+        ble_att_write_cmd_write(txom->om_data, txom->om_len, req);
     }
-    assert(rc == 0);
 
     rc = ble_att_clt_append_blob(conn_handle, txom, value, value_len);
     if (rc != 0) {
@@ -1310,8 +1287,7 @@ ble_att_clt_build_prep_write_req(uint16_t conn_handle,
         goto done;
     }
 
-    rc = ble_att_prep_write_req_write(txom->om_data, txom->om_len, req);
-    assert(rc == 0);
+    ble_att_prep_write_req_write(txom->om_data, txom->om_len, req);
 
     rc = ble_att_clt_append_blob(conn_handle, txom, value, value_len);
     if (rc != 0) {
@@ -1398,8 +1374,7 @@ ble_att_clt_rx_prep_write(uint16_t conn_handle, struct os_mbuf **rxom)
         goto done;
     }
 
-    rc = ble_att_prep_write_rsp_parse((*rxom)->om_data, (*rxom)->om_len, &rsp);
-    assert(rc == 0);
+    ble_att_prep_write_rsp_parse((*rxom)->om_data, (*rxom)->om_len, &rsp);
 
     /* Strip the base from the front of the response. */
     os_mbuf_adj(*rxom, BLE_ATT_PREP_WRITE_CMD_BASE_SZ);
@@ -1434,8 +1409,7 @@ ble_att_clt_build_exec_write_req(struct ble_att_exec_write_req *req,
         goto done;
     }
 
-    rc = ble_att_exec_write_req_write(txom->om_data, txom->om_len, req);
-    assert(rc == 0);
+    ble_att_exec_write_req_write(txom->om_data, txom->om_len, req);
 
 done:
     if (rc != 0) {
@@ -1494,8 +1468,7 @@ ble_att_clt_rx_exec_write(uint16_t conn_handle, struct os_mbuf **rxom)
 
     rc = ble_hs_misc_pullup_base(rxom, BLE_ATT_EXEC_WRITE_RSP_SZ);
     if (rc == 0) {
-        rc = ble_att_exec_write_rsp_parse((*rxom)->om_data, (*rxom)->om_len);
-        assert(rc == 0);
+        ble_att_exec_write_rsp_parse((*rxom)->om_data, (*rxom)->om_len);
     }
 
     ble_gattc_rx_exec_write_rsp(conn_handle, rc);
@@ -1526,8 +1499,7 @@ ble_att_clt_build_notify_req(uint16_t conn_handle,
         goto done;
     }
 
-    rc = ble_att_notify_req_write(txom->om_data, txom->om_len, req);
-    assert(rc == 0);
+    ble_att_notify_req_write(txom->om_data, txom->om_len, req);
 
     rc = ble_att_clt_append_blob(conn_handle, txom, value, value_len);
     if (rc != 0) {
@@ -1601,8 +1573,7 @@ ble_att_clt_build_indicate_req(uint16_t conn_handle,
         goto done;
     }
 
-    rc = ble_att_indicate_req_write(txom->om_data, txom->om_len, req);
-    assert(rc == 0);
+    ble_att_indicate_req_write(txom->om_data, txom->om_len, req);
 
     rc = ble_att_clt_append_blob(conn_handle, txom, value, value_len);
     if (rc != 0) {

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2fef21d6/net/nimble/host/src/ble_att_cmd.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_att_cmd.c b/net/nimble/host/src/ble_att_cmd.c
index 4aef8f0..ff4c19e 100644
--- a/net/nimble/host/src/ble_att_cmd.c
+++ b/net/nimble/host/src/ble_att_cmd.c
@@ -26,854 +26,613 @@
 #include "host/ble_uuid.h"
 #include "ble_hs_priv.h"
 
-int
-ble_att_error_rsp_parse(void *payload, int len, struct ble_att_error_rsp *rsp)
+static void *
+ble_att_init_parse(uint8_t op, void *payload, int min_len, int actual_len)
 {
     uint8_t *u8ptr;
 
-    if (len < BLE_ATT_ERROR_RSP_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
+    BLE_HS_DBG_ASSERT(actual_len >= min_len);
 
     u8ptr = payload;
+    BLE_HS_DBG_ASSERT(u8ptr[0] == op);
 
-    if (u8ptr[0] != BLE_ATT_OP_ERROR_RSP) {
-        return BLE_HS_EINVAL;
-    }
-
-    rsp->baep_req_op = u8ptr[1];
-    rsp->baep_handle = le16toh(u8ptr + 2);
-    rsp->baep_error_code = u8ptr[4];
-
-    return 0;
+    return u8ptr + 1;
 }
 
-int
-ble_att_error_rsp_write(void *payload, int len, struct ble_att_error_rsp *rsp)
+static void *
+ble_att_init_parse_2op(uint8_t op1, uint8_t op2, void *payload,
+                       int min_len, int actual_len)
 {
     uint8_t *u8ptr;
 
-    if (len < BLE_ATT_ERROR_RSP_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
+    BLE_HS_DBG_ASSERT(actual_len >= min_len);
 
     u8ptr = payload;
+    BLE_HS_DBG_ASSERT(u8ptr[0] == op1 || u8ptr[0] == op2);
 
-    u8ptr[0] = BLE_ATT_OP_ERROR_RSP;
-    u8ptr[1] = rsp->baep_req_op;
-    htole16(u8ptr + 2, rsp->baep_handle);
-    u8ptr[4] = rsp->baep_error_code;
-
-    return 0;
+    return u8ptr + 1;
 }
 
-int
-ble_att_mtu_cmd_parse(void *payload, int len, struct ble_att_mtu_cmd *cmd)
+static void *
+ble_att_init_write(uint8_t op, void *payload, int min_len, int actual_len)
 {
     uint8_t *u8ptr;
 
-    if (len < BLE_ATT_MTU_CMD_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
+    BLE_HS_DBG_ASSERT(actual_len >= min_len);
 
     u8ptr = payload;
+    u8ptr[0] = op;
 
-    if (u8ptr[0] != BLE_ATT_OP_MTU_REQ &&
-        u8ptr[0] != BLE_ATT_OP_MTU_RSP) {
+    return u8ptr + 1;
+}
 
-        return BLE_HS_EINVAL;
-    }
+static void
+ble_att_error_rsp_swap(struct ble_att_error_rsp *dst,
+                       struct ble_att_error_rsp *src)
+{
+    dst->baep_req_op = src->baep_req_op;
+    dst->baep_handle = TOFROMLE16(src->baep_handle);
+    dst->baep_error_code = src->baep_error_code;
+}
 
-    cmd->bamc_mtu = le16toh(u8ptr + 1);
+void
+ble_att_error_rsp_parse(void *payload, int len, struct ble_att_error_rsp *dst)
+{
+    struct ble_att_error_rsp *src;
 
-    return 0;
+    src = ble_att_init_parse(BLE_ATT_OP_ERROR_RSP, payload,
+                             BLE_ATT_ERROR_RSP_SZ, len);
+    ble_att_error_rsp_swap(dst, src);
 }
 
-int
-ble_att_mtu_req_write(void *payload, int len,
-                      struct ble_att_mtu_cmd *cmd)
+void
+ble_att_error_rsp_write(void *payload, int len, struct ble_att_error_rsp *src)
 {
-    uint8_t *u8ptr;
+    struct ble_att_error_rsp *dst;
 
-    if (len < BLE_ATT_MTU_CMD_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
+    dst = ble_att_init_write(BLE_ATT_OP_ERROR_RSP, payload,
+                             BLE_ATT_ERROR_RSP_SZ, len);
+    ble_att_error_rsp_swap(dst, src);
+}
 
-    u8ptr = payload;
+static void
+ble_att_mtu_cmd_swap(struct ble_att_mtu_cmd *dst, struct ble_att_mtu_cmd *src)
+{
+    dst->bamc_mtu = src->bamc_mtu;
+}
 
-    u8ptr[0] = BLE_ATT_OP_MTU_REQ;
-    htole16(u8ptr + 1, cmd->bamc_mtu);
+void
+ble_att_mtu_cmd_parse(void *payload, int len, struct ble_att_mtu_cmd *dst)
+{
+    struct ble_att_mtu_cmd *src;
 
-    return 0;
+    src = ble_att_init_parse_2op(BLE_ATT_OP_MTU_REQ, BLE_ATT_OP_MTU_RSP,
+                                 payload, BLE_ATT_MTU_CMD_SZ, len);
+    ble_att_mtu_cmd_swap(dst, src);
 }
 
-int
-ble_att_mtu_rsp_write(void *payload, int len, struct ble_att_mtu_cmd *cmd)
+void
+ble_att_mtu_req_write(void *payload, int len, struct ble_att_mtu_cmd *src)
 {
-    uint8_t *u8ptr;
+    struct ble_att_mtu_cmd *dst;
 
-    if (len < BLE_ATT_MTU_CMD_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
+    dst = ble_att_init_write(BLE_ATT_OP_MTU_REQ, payload,
+                             BLE_ATT_MTU_CMD_SZ, len);
+    ble_att_mtu_cmd_swap(dst, src);
+}
 
-    u8ptr = payload;
+void
+ble_att_mtu_rsp_write(void *payload, int len, struct ble_att_mtu_cmd *src)
+{
+    struct ble_att_mtu_cmd *dst;
 
-    u8ptr[0] = BLE_ATT_OP_MTU_RSP;
-    htole16(u8ptr + 1, cmd->bamc_mtu);
+    dst = ble_att_init_write(BLE_ATT_OP_MTU_RSP, payload,
+                             BLE_ATT_MTU_CMD_SZ, len);
+    ble_att_mtu_cmd_swap(dst, src);
+}
 
-    return 0;
+static void
+ble_att_find_info_req_swap(struct ble_att_find_info_req *dst,
+                           struct ble_att_find_info_req *src)
+{
+    dst->bafq_start_handle = TOFROMLE16(src->bafq_start_handle);
+    dst->bafq_end_handle = TOFROMLE16(src->bafq_end_handle);
 }
 
-int
+void
 ble_att_find_info_req_parse(void *payload, int len,
-                            struct ble_att_find_info_req *req)
+                            struct ble_att_find_info_req *dst)
 {
-    uint8_t *u8ptr;
-
-    if (len < BLE_ATT_FIND_INFO_REQ_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
-
-    u8ptr = payload;
-
-    if (u8ptr[0] != BLE_ATT_OP_FIND_INFO_REQ) {
-        return BLE_HS_EINVAL;
-    }
+    struct ble_att_find_info_req *src;
 
-    req->bafq_start_handle = le16toh(u8ptr + 1);
-    req->bafq_end_handle = le16toh(u8ptr + 3);
-
-    return 0;
+    src = ble_att_init_parse(BLE_ATT_OP_FIND_INFO_REQ, payload,
+                             BLE_ATT_FIND_INFO_REQ_SZ, len);
+    ble_att_find_info_req_swap(dst, src);
 }
 
-int
+void
 ble_att_find_info_req_write(void *payload, int len,
-                            struct ble_att_find_info_req *req)
+                            struct ble_att_find_info_req *src)
 {
-    uint8_t *u8ptr;
+    struct ble_att_find_info_req *dst;
 
-    if (len < BLE_ATT_FIND_INFO_REQ_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
-
-    u8ptr = payload;
-
-    u8ptr[0] = BLE_ATT_OP_FIND_INFO_REQ;
-    htole16(u8ptr + 1, req->bafq_start_handle);
-    htole16(u8ptr + 3, req->bafq_end_handle);
+    dst = ble_att_init_write(BLE_ATT_OP_FIND_INFO_REQ, payload,
+                             BLE_ATT_FIND_INFO_REQ_SZ, len);
+    ble_att_find_info_req_swap(dst, src);
+}
 
-    return 0;
+static void
+ble_att_find_info_rsp_swap(struct ble_att_find_info_rsp *dst,
+                           struct ble_att_find_info_rsp *src)
+{
+    dst->bafp_format = src->bafp_format;
 }
 
-int
+void
 ble_att_find_info_rsp_parse(void *payload, int len,
-                            struct ble_att_find_info_rsp *rsp)
+                            struct ble_att_find_info_rsp *dst)
 {
-    uint8_t *u8ptr;
-
-    if (len < BLE_ATT_FIND_INFO_RSP_BASE_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
-
-    u8ptr = payload;
+    struct ble_att_find_info_rsp *src;
 
-    if (u8ptr[0] != BLE_ATT_OP_FIND_INFO_RSP) {
-        return BLE_HS_EINVAL;
-    }
-
-    rsp->bafp_format = u8ptr[1];
-
-    return 0;
+    src = ble_att_init_parse(BLE_ATT_OP_FIND_INFO_RSP, payload,
+                             BLE_ATT_FIND_INFO_RSP_BASE_SZ, len);
+    ble_att_find_info_rsp_swap(dst, src);
 }
 
-int
+void
 ble_att_find_info_rsp_write(void *payload, int len,
-                            struct ble_att_find_info_rsp *rsp)
+                            struct ble_att_find_info_rsp *src)
 {
-    uint8_t *u8ptr;
-
-    if (len < BLE_ATT_FIND_INFO_RSP_BASE_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
+    struct ble_att_find_info_rsp *dst;
 
-    u8ptr = payload;
-
-    u8ptr[0] = BLE_ATT_OP_FIND_INFO_RSP;
-    u8ptr[1] = rsp->bafp_format;
+    dst = ble_att_init_write(BLE_ATT_OP_FIND_INFO_RSP, payload,
+                             BLE_ATT_FIND_INFO_RSP_BASE_SZ, len);
+    ble_att_find_info_rsp_swap(dst, src);
+}
 
-    return 0;
+static void
+ble_att_find_type_value_req_swap(struct ble_att_find_type_value_req *dst,
+                                 struct ble_att_find_type_value_req *src)
+{
+    dst->bavq_start_handle = TOFROMLE16(src->bavq_start_handle);
+    dst->bavq_end_handle = TOFROMLE16(src->bavq_end_handle);
+    dst->bavq_attr_type = TOFROMLE16(src->bavq_attr_type);
 }
 
-int
+void
 ble_att_find_type_value_req_parse(void *payload, int len,
-                                  struct ble_att_find_type_value_req *req)
+                                  struct ble_att_find_type_value_req *dst)
 {
-    uint8_t *u8ptr;
-
-    if (len < BLE_ATT_FIND_TYPE_VALUE_REQ_BASE_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
-
-    u8ptr = payload;
-
-    if (u8ptr[0] != BLE_ATT_OP_FIND_TYPE_VALUE_REQ) {
-        return BLE_HS_EINVAL;
-    }
+    struct ble_att_find_type_value_req *src;
 
-    req->bavq_start_handle = le16toh(u8ptr + 1);
-    req->bavq_end_handle = le16toh(u8ptr + 3);
-    req->bavq_attr_type = le16toh(u8ptr + 5);
-
-    return 0;
+    src = ble_att_init_parse(BLE_ATT_OP_FIND_TYPE_VALUE_REQ, payload,
+                             BLE_ATT_FIND_TYPE_VALUE_REQ_BASE_SZ, len);
+    ble_att_find_type_value_req_swap(dst, src);
 }
 
-int
+void
 ble_att_find_type_value_req_write(void *payload, int len,
-                                  struct ble_att_find_type_value_req *req)
+                                  struct ble_att_find_type_value_req *src)
 {
-    uint8_t *u8ptr;
+    struct ble_att_find_type_value_req *dst;
 
-    if (len < BLE_ATT_FIND_TYPE_VALUE_REQ_BASE_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
-
-    u8ptr = payload;
-
-    u8ptr[0] = BLE_ATT_OP_FIND_TYPE_VALUE_REQ;
-    htole16(u8ptr + 1, req->bavq_start_handle);
-    htole16(u8ptr + 3, req->bavq_end_handle);
-    htole16(u8ptr + 5, req->bavq_attr_type);
+    dst = ble_att_init_write(BLE_ATT_OP_FIND_TYPE_VALUE_REQ, payload,
+                             BLE_ATT_FIND_TYPE_VALUE_REQ_BASE_SZ, len);
+    ble_att_find_type_value_req_swap(dst, src);
+}
 
-    return 0;
+static void
+ble_att_read_type_req_swap(struct ble_att_read_type_req *dst,
+                           struct ble_att_read_type_req *src)
+{
+    dst->batq_start_handle = TOFROMLE16(src->batq_start_handle);
+    dst->batq_end_handle = TOFROMLE16(src->batq_end_handle);
 }
 
-int
+void
 ble_att_read_type_req_parse(void *payload, int len,
-                            struct ble_att_read_type_req *req)
+                            struct ble_att_read_type_req *dst)
 {
-    uint8_t *u8ptr;
-
-    if (len < BLE_ATT_READ_TYPE_REQ_BASE_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
-
-    u8ptr = payload;
-
-    if (u8ptr[0] != BLE_ATT_OP_READ_TYPE_REQ) {
-        return BLE_HS_EINVAL;
-    }
-
-    req->batq_start_handle = le16toh(u8ptr + 1);
-    req->batq_end_handle = le16toh(u8ptr + 3);
+    struct ble_att_read_type_req *src;
 
-    return 0;
+    src = ble_att_init_parse(BLE_ATT_OP_READ_TYPE_REQ, payload,
+                             BLE_ATT_READ_TYPE_REQ_BASE_SZ, len);
+    ble_att_read_type_req_swap(dst, src);
 }
 
-int
+void
 ble_att_read_type_req_write(void *payload, int len,
-                            struct ble_att_read_type_req *req)
+                            struct ble_att_read_type_req *src)
 {
-    uint8_t *u8ptr;
-
-    if (len < BLE_ATT_READ_TYPE_REQ_BASE_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
-
-    u8ptr = payload;
+    struct ble_att_read_type_req *dst;
 
-    u8ptr[0] = BLE_ATT_OP_READ_TYPE_REQ;
-    htole16(u8ptr + 1, req->batq_start_handle);
-    htole16(u8ptr + 3, req->batq_end_handle);
+    dst = ble_att_init_write(BLE_ATT_OP_READ_TYPE_REQ, payload,
+                             BLE_ATT_READ_TYPE_REQ_BASE_SZ, len);
+    ble_att_read_type_req_swap(dst, src);
+}
 
-    return 0;
+static void
+ble_att_read_type_rsp_swap(struct ble_att_read_type_rsp *dst,
+                           struct ble_att_read_type_rsp *src)
+{
+    dst->batp_length = src->batp_length;
 }
 
-int
+void
 ble_att_read_type_rsp_parse(void *payload, int len,
-                            struct ble_att_read_type_rsp *rsp)
+                            struct ble_att_read_type_rsp *dst)
 {
-    uint8_t *u8ptr;
-
-    if (len < BLE_ATT_READ_TYPE_RSP_BASE_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
+    struct ble_att_read_type_rsp *src;
 
-    u8ptr = payload;
-
-    rsp->batp_length = u8ptr[1];
-
-    return 0;
+    src = ble_att_init_parse(BLE_ATT_OP_READ_TYPE_RSP, payload,
+                             BLE_ATT_READ_TYPE_RSP_BASE_SZ, len);
+    ble_att_read_type_rsp_swap(dst, src);
 }
 
-int
+void
 ble_att_read_type_rsp_write(void *payload, int len,
-                            struct ble_att_read_type_rsp *rsp)
+                            struct ble_att_read_type_rsp *src)
 {
-    uint8_t *u8ptr;
-
-    if (len < BLE_ATT_READ_TYPE_RSP_BASE_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
-
-    u8ptr = payload;
+    struct ble_att_read_type_rsp *dst;
 
-    u8ptr[0] = BLE_ATT_OP_READ_TYPE_RSP;
-    u8ptr[1] = rsp->batp_length;
-
-    return 0;
+    dst = ble_att_init_write(BLE_ATT_OP_READ_TYPE_RSP, payload,
+                             BLE_ATT_READ_TYPE_RSP_BASE_SZ, len);
+    ble_att_read_type_rsp_swap(dst, src);
 }
-
-int
-ble_att_read_req_parse(void *payload, int len, struct ble_att_read_req *req)
+static void
+ble_att_read_req_swap(struct ble_att_read_req *dst,
+                      struct ble_att_read_req *src)
 {
-    uint8_t *u8ptr;
-
-    if (len < BLE_ATT_READ_REQ_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
-
-    u8ptr = payload;
-
-    if (u8ptr[0] != BLE_ATT_OP_READ_REQ) {
-        return BLE_HS_EINVAL;
-    }
-
-    req->barq_handle = le16toh(u8ptr + 1);
-
-    return 0;
+    dst->barq_handle = TOFROMLE16(src->barq_handle);
 }
 
-int
-ble_att_read_req_write(void *payload, int len, struct ble_att_read_req *req)
+void
+ble_att_read_req_parse(void *payload, int len, struct ble_att_read_req *dst)
 {
-    uint8_t *u8ptr;
+    struct ble_att_read_req *src;
 
-    if (len < BLE_ATT_READ_REQ_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
+    src = ble_att_init_parse(BLE_ATT_OP_READ_REQ, payload,
+                             BLE_ATT_READ_REQ_SZ, len);
+    ble_att_read_req_swap(dst, src);
+}
 
-    u8ptr = payload;
+void
+ble_att_read_req_write(void *payload, int len, struct ble_att_read_req *src)
+{
+    struct ble_att_read_req *dst;
 
-    u8ptr[0] = BLE_ATT_OP_READ_REQ;
-    htole16(u8ptr + 1, req->barq_handle);
+    dst = ble_att_init_write(BLE_ATT_OP_READ_REQ, payload,
+                             BLE_ATT_READ_REQ_SZ, len);
+    ble_att_read_req_swap(dst, src);
+}
 
-    return 0;
+static void
+ble_att_read_blob_req_swap(struct ble_att_read_blob_req *dst,
+                           struct ble_att_read_blob_req *src)
+{
+    dst->babq_handle = src->babq_handle;
+    dst->babq_offset = src->babq_offset;
 }
 
-int
+void
 ble_att_read_blob_req_parse(void *payload, int len,
-                            struct ble_att_read_blob_req *req)
+                            struct ble_att_read_blob_req *dst)
 {
-    uint8_t *u8ptr;
-
-    if (len < BLE_ATT_READ_BLOB_REQ_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
-
-    u8ptr = payload;
+    struct ble_att_read_blob_req *src;
 
-    if (u8ptr[0] != BLE_ATT_OP_READ_BLOB_REQ) {
-        return BLE_HS_EINVAL;
-    }
-
-    req->babq_handle = le16toh(u8ptr + 1);
-    req->babq_offset = le16toh(u8ptr + 3);
-
-    return 0;
+    src = ble_att_init_parse(BLE_ATT_OP_READ_BLOB_REQ, payload,
+                             BLE_ATT_READ_BLOB_REQ_SZ, len);
+    ble_att_read_blob_req_swap(dst, src);
 }
 
-int
+void
 ble_att_read_blob_req_write(void *payload, int len,
-                            struct ble_att_read_blob_req *req)
+                            struct ble_att_read_blob_req *src)
 {
-    uint8_t *u8ptr;
-
-    if (len < BLE_ATT_READ_BLOB_REQ_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
+    struct ble_att_read_blob_req *dst;
 
-    u8ptr = payload;
-
-    u8ptr[0] = BLE_ATT_OP_READ_BLOB_REQ;
-    htole16(u8ptr + 1, req->babq_handle);
-    htole16(u8ptr + 3, req->babq_offset);
-
-    return 0;
+    dst = ble_att_init_write(BLE_ATT_OP_READ_BLOB_REQ, payload,
+                             BLE_ATT_READ_BLOB_REQ_SZ, len);
+    ble_att_read_blob_req_swap(dst, src);
 }
 
-int
+void
 ble_att_read_mult_req_parse(void *payload, int len)
 {
-    uint8_t *u8ptr;
-
-    if (len < BLE_ATT_READ_MULT_REQ_BASE_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
-
-    u8ptr = payload;
-    if (u8ptr[0] != BLE_ATT_OP_READ_MULT_REQ) {
-        return BLE_HS_EINVAL;
-    }
-
-    return 0;
+    ble_att_init_parse(BLE_ATT_OP_READ_MULT_REQ, payload,
+                       BLE_ATT_READ_MULT_REQ_BASE_SZ, len);
 }
 
-int
+void
 ble_att_read_mult_req_write(void *payload, int len)
 {
-    uint8_t *u8ptr;
-
-    if (len < BLE_ATT_READ_MULT_REQ_BASE_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
-
-    u8ptr = payload;
-    u8ptr[0] = BLE_ATT_OP_READ_MULT_REQ;
-
-    return 0;
+    ble_att_init_write(BLE_ATT_OP_READ_MULT_REQ, payload,
+                       BLE_ATT_READ_MULT_REQ_BASE_SZ, len);
 }
 
-int
+void
 ble_att_read_mult_rsp_parse(void *payload, int len)
 {
-    uint8_t *u8ptr;
-
-    if (len < BLE_ATT_READ_MULT_RSP_BASE_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
-
-    u8ptr = payload;
-    if (u8ptr[0] != BLE_ATT_OP_READ_MULT_RSP) {
-        return BLE_HS_EINVAL;
-    }
-
-    return 0;
+    ble_att_init_parse(BLE_ATT_OP_READ_MULT_RSP, payload,
+                       BLE_ATT_READ_MULT_RSP_BASE_SZ, len);
 }
 
-int
+void
 ble_att_read_mult_rsp_write(void *payload, int len)
 {
-    uint8_t *u8ptr;
-
-    if (len < BLE_ATT_READ_MULT_RSP_BASE_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
-
-    u8ptr = payload;
-    u8ptr[0] = BLE_ATT_OP_READ_MULT_RSP;
+    ble_att_init_write(BLE_ATT_OP_READ_MULT_RSP, payload,
+                       BLE_ATT_READ_MULT_RSP_BASE_SZ, len);
+}
 
-    return 0;
+static void
+ble_att_read_group_type_req_swap(struct ble_att_read_group_type_req *dst,
+                                 struct ble_att_read_group_type_req *src)
+{
+    dst->bagq_start_handle = src->bagq_start_handle;
+    dst->bagq_end_handle = src->bagq_end_handle;
 }
 
-int
+void
 ble_att_read_group_type_req_parse(void *payload, int len,
-                                  struct ble_att_read_group_type_req *req)
+                                  struct ble_att_read_group_type_req *dst)
 {
-    uint8_t *u8ptr;
-
-    if (len < BLE_ATT_READ_GROUP_TYPE_REQ_BASE_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
-
-    u8ptr = payload;
-
-    if (u8ptr[0] != BLE_ATT_OP_READ_GROUP_TYPE_REQ) {
-        return BLE_HS_EINVAL;
-    }
-
-    req->bagq_start_handle = le16toh(u8ptr + 1);
-    req->bagq_end_handle = le16toh(u8ptr + 3);
+    struct ble_att_read_group_type_req *src;
 
-    return 0;
+    src = ble_att_init_parse(BLE_ATT_OP_READ_GROUP_TYPE_REQ, payload,
+                             BLE_ATT_READ_GROUP_TYPE_REQ_BASE_SZ, len);
+    ble_att_read_group_type_req_swap(dst, src);
 }
 
-int
+void
 ble_att_read_group_type_req_write(void *payload, int len,
-                                  struct ble_att_read_group_type_req *req)
+                                  struct ble_att_read_group_type_req *src)
 {
-    uint8_t *u8ptr;
-
-    if (len < BLE_ATT_READ_GROUP_TYPE_REQ_BASE_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
-
-    u8ptr = payload;
+    struct ble_att_read_group_type_req *dst;
 
-    u8ptr[0] = BLE_ATT_OP_READ_GROUP_TYPE_REQ;
-    htole16(u8ptr + 1, req->bagq_start_handle);
-    htole16(u8ptr + 3, req->bagq_end_handle);
+    dst = ble_att_init_write(BLE_ATT_OP_READ_GROUP_TYPE_REQ, payload,
+                             BLE_ATT_READ_GROUP_TYPE_REQ_BASE_SZ, len);
+    ble_att_read_group_type_req_swap(dst, src);
+}
 
-    return 0;
+static void
+ble_att_read_group_type_rsp_swap(struct ble_att_read_group_type_rsp *dst,
+                                 struct ble_att_read_group_type_rsp *src)
+{
+    dst->bagp_length = src->bagp_length;
 }
 
-int
+void
 ble_att_read_group_type_rsp_parse(void *payload, int len,
-                                  struct ble_att_read_group_type_rsp *rsp)
+                                  struct ble_att_read_group_type_rsp *dst)
 {
-    uint8_t *u8ptr;
-
-    if (len < BLE_ATT_READ_GROUP_TYPE_RSP_BASE_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
+    struct ble_att_read_group_type_rsp *src;
 
-    u8ptr = payload;
-
-    if (u8ptr[0] != BLE_ATT_OP_READ_GROUP_TYPE_RSP) {
-        return BLE_HS_EINVAL;
-    }
-
-    rsp->bagp_length = u8ptr[1];
-
-    return 0;
+    src = ble_att_init_parse(BLE_ATT_OP_READ_GROUP_TYPE_RSP, payload,
+                             BLE_ATT_READ_GROUP_TYPE_RSP_BASE_SZ, len);
+    ble_att_read_group_type_rsp_swap(dst, src);
 }
 
-int
+void
 ble_att_read_group_type_rsp_write(void *payload, int len,
-                                  struct ble_att_read_group_type_rsp *rsp)
+                                  struct ble_att_read_group_type_rsp *src)
 {
-    uint8_t *u8ptr;
-
-    if (len < BLE_ATT_READ_GROUP_TYPE_RSP_BASE_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
-
-    u8ptr = payload;
+    struct ble_att_read_group_type_rsp *dst;
 
-    u8ptr[0] = BLE_ATT_OP_READ_GROUP_TYPE_RSP;
-    u8ptr[1] = rsp->bagp_length;
-
-    return 0;
+    dst = ble_att_init_write(BLE_ATT_OP_READ_GROUP_TYPE_RSP, payload,
+                             BLE_ATT_READ_GROUP_TYPE_RSP_BASE_SZ, len);
+    ble_att_read_group_type_rsp_swap(dst, src);
 }
 
-int
-ble_att_write_req_parse(void *payload, int len, struct ble_att_write_req *req)
+static void
+ble_att_write_req_swap(struct ble_att_write_req *dst,
+                       struct ble_att_write_req *src)
 {
-    uint8_t *u8ptr;
-
-    if (len < BLE_ATT_WRITE_REQ_BASE_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
-
-    u8ptr = payload;
-
-    if (u8ptr[0] != BLE_ATT_OP_WRITE_REQ) {
-        return BLE_HS_EINVAL;
-    }
-
-    req->bawq_handle = le16toh(u8ptr + 1);
-
-    return 0;
+    dst->bawq_handle = src->bawq_handle;
 }
 
-int
-ble_att_write_cmd_parse(void *payload, int len, struct ble_att_write_req *req)
+void
+ble_att_write_req_parse(void *payload, int len, struct ble_att_write_req *dst)
 {
-    uint8_t *u8ptr;
-
-    if (len < BLE_ATT_WRITE_REQ_BASE_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
-
-    u8ptr = payload;
-
-    if (u8ptr[0] != BLE_ATT_OP_WRITE_CMD) {
-        return BLE_HS_EINVAL;
-    }
+    struct ble_att_write_req *src;
 
-    req->bawq_handle = le16toh(u8ptr + 1);
-
-    return 0;
+    src = ble_att_init_parse(BLE_ATT_OP_WRITE_REQ, payload,
+                             BLE_ATT_WRITE_REQ_BASE_SZ, len);
+    ble_att_write_req_swap(dst, src);
 }
 
-int
-ble_att_write_req_write(void *payload, int len, struct ble_att_write_req *req)
+void
+ble_att_write_cmd_parse(void *payload, int len, struct ble_att_write_req *dst)
 {
-    uint8_t *u8ptr;
+    struct ble_att_write_req *src;
 
-    if (len < BLE_ATT_WRITE_REQ_BASE_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
-
-    u8ptr = payload;
-
-    u8ptr[0] = BLE_ATT_OP_WRITE_REQ;
-    htole16(u8ptr + 1, req->bawq_handle);
-
-    return 0;
+    src = ble_att_init_parse(BLE_ATT_OP_WRITE_CMD, payload,
+                             BLE_ATT_WRITE_REQ_BASE_SZ, len);
+    ble_att_write_req_swap(dst, src);
 }
 
-int
-ble_att_write_cmd_write(void *payload, int len, struct ble_att_write_req *req)
+void
+ble_att_write_req_write(void *payload, int len, struct ble_att_write_req *src)
 {
-    uint8_t *u8ptr;
-
-    if (len < BLE_ATT_WRITE_REQ_BASE_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
-
-    u8ptr = payload;
-
-    u8ptr[0] = BLE_ATT_OP_WRITE_CMD;
-    htole16(u8ptr + 1, req->bawq_handle);
+    struct ble_att_write_req *dst;
 
-    return 0;
+    dst = ble_att_init_write(BLE_ATT_OP_WRITE_REQ, payload,
+                             BLE_ATT_WRITE_REQ_BASE_SZ, len);
+    ble_att_write_req_swap(dst, src);
 }
 
-static int
-ble_att_prep_write_cmd_parse(void *payload, int len,
-                             struct ble_att_prep_write_cmd *cmd, int is_req)
+void
+ble_att_write_cmd_write(void *payload, int len, struct ble_att_write_req *src)
 {
-    uint8_t *u8ptr;
-
-    if (len < BLE_ATT_PREP_WRITE_CMD_BASE_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
-
-    u8ptr = payload;
-
-    if (is_req) {
-        if (u8ptr[0] != BLE_ATT_OP_PREP_WRITE_REQ) {
-            return BLE_HS_EINVAL;
-        }
-    } else {
-        if (u8ptr[0] != BLE_ATT_OP_PREP_WRITE_RSP) {
-            return BLE_HS_EINVAL;
-        }
-    }
-
-    cmd->bapc_handle = le16toh(u8ptr + 1);
-    cmd->bapc_offset = le16toh(u8ptr + 3);
+    struct ble_att_write_req *dst;
 
-    return 0;
+    dst = ble_att_init_write(BLE_ATT_OP_WRITE_CMD, payload,
+                             BLE_ATT_WRITE_REQ_BASE_SZ, len);
+    ble_att_write_req_swap(dst, src);
 }
 
-static int
-ble_att_prep_write_cmd_write(void *payload, int len,
-                             struct ble_att_prep_write_cmd *cmd, int is_req)
+static void
+ble_att_prep_write_cmd_swap(struct ble_att_prep_write_cmd *dst,
+                            struct ble_att_prep_write_cmd *src)
 {
-    uint8_t *u8ptr;
-
-    if (len < BLE_ATT_PREP_WRITE_CMD_BASE_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
-
-    u8ptr = payload;
-
-    if (is_req) {
-        u8ptr[0] = BLE_ATT_OP_PREP_WRITE_REQ;
-    } else {
-        u8ptr[0] = BLE_ATT_OP_PREP_WRITE_RSP;
-    }
-    htole16(u8ptr + 1, cmd->bapc_handle);
-    htole16(u8ptr + 3, cmd->bapc_offset);
-
-    return 0;
+    dst->bapc_handle = src->bapc_handle;
+    dst->bapc_offset = src->bapc_offset;
 }
 
-int
+void
 ble_att_prep_write_req_parse(void *payload, int len,
-                             struct ble_att_prep_write_cmd *cmd)
+                             struct ble_att_prep_write_cmd *dst)
 {
-    return ble_att_prep_write_cmd_parse(payload, len, cmd, 1);
+    struct ble_att_prep_write_cmd *src;
+
+    src = ble_att_init_parse(BLE_ATT_OP_PREP_WRITE_REQ, payload,
+                             BLE_ATT_PREP_WRITE_CMD_BASE_SZ, len);
+    ble_att_prep_write_cmd_swap(dst, src);
 }
 
-int
+void
 ble_att_prep_write_req_write(void *payload, int len,
-                             struct ble_att_prep_write_cmd *cmd)
+                             struct ble_att_prep_write_cmd *src)
 {
-    return ble_att_prep_write_cmd_write(payload, len, cmd, 1);
+    struct ble_att_prep_write_cmd *dst;
+
+    dst = ble_att_init_write(BLE_ATT_OP_PREP_WRITE_REQ, payload,
+                             BLE_ATT_PREP_WRITE_CMD_BASE_SZ, len);
+    ble_att_prep_write_cmd_swap(dst, src);
 }
 
-int
+void
 ble_att_prep_write_rsp_parse(void *payload, int len,
-                             struct ble_att_prep_write_cmd *cmd)
+                             struct ble_att_prep_write_cmd *dst)
 {
-    return ble_att_prep_write_cmd_parse(payload, len, cmd, 0);
+    struct ble_att_prep_write_cmd *src;
+
+    src = ble_att_init_parse(BLE_ATT_OP_PREP_WRITE_RSP, payload,
+                             BLE_ATT_PREP_WRITE_CMD_BASE_SZ, len);
+    ble_att_prep_write_cmd_swap(dst, src);
 }
 
-int
+void
 ble_att_prep_write_rsp_write(void *payload, int len,
-                             struct ble_att_prep_write_cmd *cmd)
+                             struct ble_att_prep_write_cmd *src)
 {
-    return ble_att_prep_write_cmd_write(payload, len, cmd, 0);
+    struct ble_att_prep_write_cmd *dst;
+
+    dst = ble_att_init_write(BLE_ATT_OP_PREP_WRITE_RSP, payload,
+                             BLE_ATT_PREP_WRITE_CMD_BASE_SZ, len);
+    ble_att_prep_write_cmd_swap(dst, src);
 }
 
-int
-ble_att_exec_write_req_parse(void *payload, int len,
-                             struct ble_att_exec_write_req *req)
+static void
+ble_att_exec_write_req_swap(struct ble_att_exec_write_req *dst,
+                            struct ble_att_exec_write_req *src)
 {
-    uint8_t *u8ptr;
-
-    if (len < BLE_ATT_EXEC_WRITE_REQ_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
-
-    u8ptr = payload;
-
-    if (u8ptr[0] != BLE_ATT_OP_EXEC_WRITE_REQ) {
-        return BLE_HS_EINVAL;
-    }
+    dst->baeq_flags = src->baeq_flags;
+}
 
-    req->baeq_flags = u8ptr[1];
+void
+ble_att_exec_write_req_parse(void *payload, int len,
+                             struct ble_att_exec_write_req *dst)
+{
+    struct ble_att_exec_write_req *src;
 
-    return 0;
+    src = ble_att_init_parse(BLE_ATT_OP_EXEC_WRITE_REQ, payload,
+                             BLE_ATT_EXEC_WRITE_REQ_SZ, len);
+    ble_att_exec_write_req_swap(dst, src);
 }
 
-int
+void
 ble_att_exec_write_req_write(void *payload, int len,
-                             struct ble_att_exec_write_req *req)
+                             struct ble_att_exec_write_req *src)
 {
-    uint8_t *u8ptr;
-
-    if (len < BLE_ATT_EXEC_WRITE_REQ_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
-
-    u8ptr = payload;
-    u8ptr[0] = BLE_ATT_OP_EXEC_WRITE_REQ;
-    u8ptr[1] = req->baeq_flags;
+    struct ble_att_exec_write_req *dst;
 
-    return 0;
+    dst = ble_att_init_write(BLE_ATT_OP_EXEC_WRITE_REQ, payload,
+                             BLE_ATT_EXEC_WRITE_REQ_SZ, len);
+    ble_att_exec_write_req_swap(dst, src);
 }
 
-int
+void
 ble_att_exec_write_rsp_parse(void *payload, int len)
 {
-    uint8_t *u8ptr;
-
-    if (len < BLE_ATT_EXEC_WRITE_RSP_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
-
-    u8ptr = payload;
-    if (u8ptr[0] != BLE_ATT_OP_EXEC_WRITE_RSP) {
-        return BLE_HS_EINVAL;
-    }
-
-    return 0;
+    ble_att_init_parse(BLE_ATT_OP_EXEC_WRITE_RSP, payload,
+                       BLE_ATT_EXEC_WRITE_RSP_SZ, len);
 }
 
-int
+void
 ble_att_exec_write_rsp_write(void *payload, int len)
 {
-    uint8_t *u8ptr;
-
-    if (len < BLE_ATT_EXEC_WRITE_RSP_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
-
-    u8ptr = payload;
-    u8ptr[0] = BLE_ATT_OP_EXEC_WRITE_RSP;
+    ble_att_init_write(BLE_ATT_OP_EXEC_WRITE_RSP, payload,
+                       BLE_ATT_EXEC_WRITE_RSP_SZ, len);
+}
 
-    return 0;
+static void
+ble_att_notify_req_swap(struct ble_att_notify_req *dst,
+                        struct ble_att_notify_req *src)
+{
+    dst->banq_handle = src->banq_handle;
 }
 
-int
+void
 ble_att_notify_req_parse(void *payload, int len,
-                         struct ble_att_notify_req *req)
+                         struct ble_att_notify_req *dst)
 {
-    uint8_t *u8ptr;
-
-    if (len < BLE_ATT_NOTIFY_REQ_BASE_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
-
-    u8ptr = payload;
-
-    if (u8ptr[0] != BLE_ATT_OP_NOTIFY_REQ) {
-        return BLE_HS_EINVAL;
-    }
-
-    req->banq_handle = le16toh(u8ptr + 1);
-
-    return 0;
+    struct ble_att_notify_req *src;
 
+    src = ble_att_init_parse(BLE_ATT_OP_NOTIFY_REQ, payload,
+                             BLE_ATT_NOTIFY_REQ_BASE_SZ, len);
+    ble_att_notify_req_swap(dst, src);
 }
 
-int
+void
 ble_att_notify_req_write(void *payload, int len,
-                         struct ble_att_notify_req *req)
+                         struct ble_att_notify_req *src)
 {
-    uint8_t *u8ptr;
-
-    if (len < BLE_ATT_NOTIFY_REQ_BASE_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
+    struct ble_att_notify_req *dst;
 
-    u8ptr = payload;
-    u8ptr[0] = BLE_ATT_OP_NOTIFY_REQ;
-    htole16(u8ptr + 1, req->banq_handle);
+    dst = ble_att_init_write(BLE_ATT_OP_NOTIFY_REQ, payload,
+                             BLE_ATT_NOTIFY_REQ_BASE_SZ, len);
+    ble_att_notify_req_swap(dst, src);
+}
 
-    return 0;
+static void
+ble_att_indicate_req_swap(struct ble_att_indicate_req *dst,
+                          struct ble_att_indicate_req *src)
+{
+    dst->baiq_handle = src->baiq_handle;
 }
 
-int
+void
 ble_att_indicate_req_parse(void *payload, int len,
-                           struct ble_att_indicate_req *req)
+                           struct ble_att_indicate_req *dst)
 {
-    uint8_t *u8ptr;
-
-    if (len < BLE_ATT_INDICATE_REQ_BASE_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
-
-    u8ptr = payload;
-
-    if (u8ptr[0] != BLE_ATT_OP_INDICATE_REQ) {
-        return BLE_HS_EINVAL;
-    }
-
-    req->baiq_handle = le16toh(u8ptr + 1);
-
-    return 0;
+    struct ble_att_indicate_req *src;
 
+    src = ble_att_init_parse(BLE_ATT_OP_INDICATE_REQ, payload,
+                             BLE_ATT_INDICATE_REQ_BASE_SZ, len);
+    ble_att_indicate_req_swap(dst, src);
 }
 
-int
+void
 ble_att_indicate_req_write(void *payload, int len,
-                         struct ble_att_indicate_req *req)
+                         struct ble_att_indicate_req *src)
 {
-    uint8_t *u8ptr;
-
-    if (len < BLE_ATT_INDICATE_REQ_BASE_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
-
-    u8ptr = payload;
-    u8ptr[0] = BLE_ATT_OP_INDICATE_REQ;
-    htole16(u8ptr + 1, req->baiq_handle);
+    struct ble_att_indicate_req *dst;
 
-    return 0;
+    dst = ble_att_init_write(BLE_ATT_OP_INDICATE_REQ, payload,
+                             BLE_ATT_INDICATE_REQ_BASE_SZ, len);
+    ble_att_indicate_req_swap(dst, src);
 }
 
-int
+void
 ble_att_indicate_rsp_parse(void *payload, int len)
 {
-    uint8_t *u8ptr;
-
-    if (len < BLE_ATT_INDICATE_RSP_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
-
-    u8ptr = payload;
-    if (u8ptr[0] != BLE_ATT_OP_INDICATE_RSP) {
-        return BLE_HS_EINVAL;
-    }
-
-    return 0;
+    ble_att_init_parse(BLE_ATT_OP_INDICATE_RSP, payload,
+                       BLE_ATT_INDICATE_RSP_SZ, len);
 }
 
-int
+void
 ble_att_indicate_rsp_write(void *payload, int len)
 {
-    uint8_t *u8ptr;
-
-    if (len < BLE_ATT_INDICATE_RSP_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
-
-    u8ptr = payload;
-    u8ptr[0] = BLE_ATT_OP_INDICATE_RSP;
-
-    return 0;
+    ble_att_init_write(BLE_ATT_OP_INDICATE_RSP, payload,
+                       BLE_ATT_INDICATE_RSP_SZ, len);
 }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2fef21d6/net/nimble/host/src/ble_att_cmd.h
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_att_cmd.h b/net/nimble/host/src/ble_att_cmd.h
index 702c2dc..e3b0444 100644
--- a/net/nimble/host/src/ble_att_cmd.h
+++ b/net/nimble/host/src/ble_att_cmd.h
@@ -36,7 +36,7 @@ struct ble_att_error_rsp {
     uint8_t baep_req_op;
     uint16_t baep_handle;
     uint8_t baep_error_code;
-};
+} __attribute__((packed));
 
 /**
  * | Parameter                          | Size (octets)     |
@@ -47,7 +47,7 @@ struct ble_att_error_rsp {
 #define BLE_ATT_MTU_CMD_SZ               3
 struct ble_att_mtu_cmd {
     uint16_t bamc_mtu;
-};
+} __attribute__((packed));
 
 /**
  * | Parameter                          | Size (octets)     |
@@ -304,87 +304,87 @@ struct ble_att_indicate_req {
  */
 #define BLE_ATT_INDICATE_RSP_SZ         1
 
-int ble_att_error_rsp_parse(void *payload, int len,
-                            struct ble_att_error_rsp *rsp);
-int ble_att_error_rsp_write(void *payload, int len,
-                            struct ble_att_error_rsp *rsp);
-int ble_att_mtu_cmd_parse(void *payload, int len,
-                          struct ble_att_mtu_cmd *cmd);
-int ble_att_mtu_req_write(void *payload, int len,
-                          struct ble_att_mtu_cmd *cmd);
-int ble_att_mtu_rsp_write(void *payload, int len,
-                          struct ble_att_mtu_cmd *cmd);
-int ble_att_find_info_req_parse(void *payload, int len,
-                                struct ble_att_find_info_req *req);
-int ble_att_find_info_req_write(void *payload, int len,
-                                struct ble_att_find_info_req *req);
-int ble_att_find_info_rsp_parse(void *payload, int len,
-                                struct ble_att_find_info_rsp *rsp);
-int ble_att_find_info_rsp_write(void *payload, int len,
-                                struct ble_att_find_info_rsp *rsp);
-int ble_att_find_type_value_req_parse(void *payload, int len,
-                                      struct ble_att_find_type_value_req *req);
-int ble_att_find_type_value_req_write(void *payload, int len,
-                                      struct ble_att_find_type_value_req *req);
-int ble_att_read_type_req_parse(void *payload, int len,
-                                struct ble_att_read_type_req *req);
-int ble_att_read_type_req_write(void *payload, int len,
-                                struct ble_att_read_type_req *req);
-int ble_att_read_type_rsp_parse(void *payload, int len,
-                                struct ble_att_read_type_rsp *rsp);
-int ble_att_read_type_rsp_write(void *payload, int len,
-                                struct ble_att_read_type_rsp *rsp);
-int ble_att_read_req_parse(void *payload, int len,
-                           struct ble_att_read_req *req);
-int ble_att_read_req_write(void *payload, int len,
-                           struct ble_att_read_req *req);
-int ble_att_read_blob_req_parse(void *payload, int len,
-                                struct ble_att_read_blob_req *req);
-int ble_att_read_blob_req_write(void *payload, int len,
-                                struct ble_att_read_blob_req *req);
-int ble_att_read_mult_req_parse(void *payload, int len);
-int ble_att_read_mult_req_write(void *payload, int len);
-int ble_att_read_mult_rsp_parse(void *payload, int len);
-int ble_att_read_mult_rsp_write(void *payload, int len);
-int ble_att_read_group_type_req_parse(void *payload, int len,
-                                      struct ble_att_read_group_type_req *req);
-int ble_att_read_group_type_req_write(void *payload, int len,
-                                      struct ble_att_read_group_type_req *req);
-int ble_att_read_group_type_rsp_parse(void *payload, int len,
-                                      struct ble_att_read_group_type_rsp *rsp);
-int ble_att_read_group_type_rsp_write(void *payload, int len,
-                                      struct ble_att_read_group_type_rsp *rsp);
-int ble_att_write_req_parse(void *payload, int len,
-                            struct ble_att_write_req *req);
-int ble_att_write_req_write(void *payload, int len,
-                            struct ble_att_write_req *req);
-int ble_att_write_cmd_parse(void *payload, int len,
-                            struct ble_att_write_req *req);
-int ble_att_write_cmd_write(void *payload, int len,
-                            struct ble_att_write_req *req);
-int ble_att_prep_write_req_parse(void *payload, int len,
-                                 struct ble_att_prep_write_cmd *cmd);
-int ble_att_prep_write_req_write(void *payload, int len,
-                                 struct ble_att_prep_write_cmd *cmd);
-int ble_att_prep_write_rsp_parse(void *payload, int len,
-                                 struct ble_att_prep_write_cmd *cmd);
-int ble_att_prep_write_rsp_write(void *payload, int len,
-                                 struct ble_att_prep_write_cmd *cmd);
-int ble_att_exec_write_req_parse(void *payload, int len,
-                                 struct ble_att_exec_write_req *req);
-int ble_att_exec_write_req_write(void *payload, int len,
-                                 struct ble_att_exec_write_req *req);
-int ble_att_exec_write_rsp_parse(void *payload, int len);
-int ble_att_exec_write_rsp_write(void *payload, int len);
-int ble_att_notify_req_parse(void *payload, int len,
-                             struct ble_att_notify_req *req);
-int ble_att_notify_req_write(void *payload, int len,
-                             struct ble_att_notify_req *req);
-int ble_att_indicate_req_parse(void *payload, int len,
-                               struct ble_att_indicate_req *req);
-int ble_att_indicate_req_write(void *payload, int len,
-                               struct ble_att_indicate_req *req);
-int ble_att_indicate_rsp_parse(void *payload, int len);
-int ble_att_indicate_rsp_write(void *payload, int len);
+void ble_att_error_rsp_parse(void *payload, int len,
+                              struct ble_att_error_rsp *rsp);
+void ble_att_error_rsp_write(void *payload, int len,
+                              struct ble_att_error_rsp *rsp);
+void ble_att_mtu_cmd_parse(void *payload, int len,
+                            struct ble_att_mtu_cmd *cmd);
+void ble_att_mtu_req_write(void *payload, int len,
+                            struct ble_att_mtu_cmd *cmd);
+void ble_att_mtu_rsp_write(void *payload, int len,
+                           struct ble_att_mtu_cmd *cmd);
+void ble_att_find_info_req_parse(void *payload, int len,
+                                 struct ble_att_find_info_req *req);
+void ble_att_find_info_req_write(void *payload, int len,
+                                 struct ble_att_find_info_req *req);
+void ble_att_find_info_rsp_parse(void *payload, int len,
+                                 struct ble_att_find_info_rsp *rsp);
+void ble_att_find_info_rsp_write(void *payload, int len,
+                                 struct ble_att_find_info_rsp *rsp);
+void ble_att_find_type_value_req_parse(void *payload, int len,
+                                       struct ble_att_find_type_value_req *req);
+void ble_att_find_type_value_req_write(void *payload, int len,
+                                       struct ble_att_find_type_value_req *req);
+void ble_att_read_type_req_parse(void *payload, int len,
+                                 struct ble_att_read_type_req *req);
+void ble_att_read_type_req_write(void *payload, int len,
+                                 struct ble_att_read_type_req *req);
+void ble_att_read_type_rsp_parse(void *payload, int len,
+                                 struct ble_att_read_type_rsp *rsp);
+void ble_att_read_type_rsp_write(void *payload, int len,
+                                 struct ble_att_read_type_rsp *rsp);
+void ble_att_read_req_parse(void *payload, int len,
+                            struct ble_att_read_req *req);
+void ble_att_read_req_write(void *payload, int len,
+                            struct ble_att_read_req *req);
+void ble_att_read_blob_req_parse(void *payload, int len,
+                                 struct ble_att_read_blob_req *req);
+void ble_att_read_blob_req_write(void *payload, int len,
+                                 struct ble_att_read_blob_req *req);
+void ble_att_read_mult_req_parse(void *payload, int len);
+void ble_att_read_mult_req_write(void *payload, int len);
+void ble_att_read_mult_rsp_parse(void *payload, int len);
+void ble_att_read_mult_rsp_write(void *payload, int len);
+void ble_att_read_group_type_req_parse(void *payload, int len,
+                                       struct ble_att_read_group_type_req *req);
+void ble_att_read_group_type_req_write(void *payload, int len,
+                                       struct ble_att_read_group_type_req *req);
+void ble_att_read_group_type_rsp_parse(void *payload, int len,
+                                       struct ble_att_read_group_type_rsp *rsp);
+void ble_att_read_group_type_rsp_write(void *payload, int len,
+                                       struct ble_att_read_group_type_rsp *rsp);
+void ble_att_write_req_parse(void *payload, int len,
+                             struct ble_att_write_req *req);
+void ble_att_write_req_write(void *payload, int len,
+                             struct ble_att_write_req *req);
+void ble_att_write_cmd_parse(void *payload, int len,
+                             struct ble_att_write_req *req);
+void ble_att_write_cmd_write(void *payload, int len,
+                             struct ble_att_write_req *req);
+void ble_att_prep_write_req_parse(void *payload, int len,
+                                  struct ble_att_prep_write_cmd *cmd);
+void ble_att_prep_write_req_write(void *payload, int len,
+                                  struct ble_att_prep_write_cmd *cmd);
+void ble_att_prep_write_rsp_parse(void *payload, int len,
+                                  struct ble_att_prep_write_cmd *cmd);
+void ble_att_prep_write_rsp_write(void *payload, int len,
+                                  struct ble_att_prep_write_cmd *cmd);
+void ble_att_exec_write_req_parse(void *payload, int len,
+                                  struct ble_att_exec_write_req *req);
+void ble_att_exec_write_req_write(void *payload, int len,
+                                  struct ble_att_exec_write_req *req);
+void ble_att_exec_write_rsp_parse(void *payload, int len);
+void ble_att_exec_write_rsp_write(void *payload, int len);
+void ble_att_notify_req_parse(void *payload, int len,
+                              struct ble_att_notify_req *req);
+void ble_att_notify_req_write(void *payload, int len,
+                              struct ble_att_notify_req *req);
+void ble_att_indicate_req_parse(void *payload, int len,
+                                struct ble_att_indicate_req *req);
+void ble_att_indicate_req_write(void *payload, int len,
+                                struct ble_att_indicate_req *req);
+void ble_att_indicate_rsp_parse(void *payload, int len);
+void ble_att_indicate_rsp_write(void *payload, int len);
 
 #endif

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2fef21d6/net/nimble/host/src/ble_att_priv.h
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_att_priv.h b/net/nimble/host/src/ble_att_priv.h
index ad5937f..3a0bc6d 100644
--- a/net/nimble/host/src/ble_att_priv.h
+++ b/net/nimble/host/src/ble_att_priv.h
@@ -132,19 +132,6 @@ struct ble_att_svr_entry {
     void *ha_cb_arg;
 };
 
-/**
- * Called from ble_att_svr_walk().  Called on each entry in the 
- * ble_att_svr_list.
- *
- * @param Contains the current ble_att being iterated through
- * @param The user supplied argument to ble_att_svr_walk()
- *
- * @return 0 on continue, 1 on stop
- */
-typedef int (*ble_att_svr_walk_func_t)(struct ble_att_svr_entry *entry,
-                                       void *arg);
-
-
 #define HA_OPCODE_METHOD_START (0)
 #define HA_OPCODE_METHOD_END (5)
 #define HA_OPCODE_COMMAND_FLAG (1 << 6) 
@@ -170,7 +157,8 @@ int ble_att_init(void);
 extern ble_att_svr_notify_fn *ble_att_svr_notify_cb;
 extern void *ble_att_svr_notify_cb_arg;
 
-int ble_att_svr_find_by_uuid(uint8_t *uuid, struct ble_att_svr_entry **ha_ptr);
+struct ble_att_svr_entry *
+ble_att_svr_find_by_uuid(struct ble_att_svr_entry *start_at, uint8_t *uuid);
 uint16_t ble_att_svr_prev_handle(void);
 int ble_att_svr_rx_mtu(uint16_t conn_handle, struct os_mbuf **om);
 int ble_att_svr_rx_find_info(uint16_t conn_handle, struct os_mbuf **rxom);

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2fef21d6/net/nimble/host/src/ble_att_svr.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_att_svr.c b/net/nimble/host/src/ble_att_svr.c
index 483a315..b5b1bd6 100644
--- a/net/nimble/host/src/ble_att_svr.c
+++ b/net/nimble/host/src/ble_att_svr.c
@@ -19,7 +19,6 @@
 
 #include <string.h>
 #include <errno.h>
-#include <assert.h>
 #include "bsp/bsp.h"
 #include "os/os.h"
 #include "nimble/ble.h"
@@ -65,9 +64,8 @@ static uint16_t
 ble_att_svr_next_id(void)
 {
     /* Rollover is fatal. */
-    assert(ble_att_svr_id != UINT16_MAX);
-
-    return (++ble_att_svr_id);
+    BLE_HS_DBG_ASSERT(ble_att_svr_id != UINT16_MAX);
+    return ++ble_att_svr_id;
 }
 
 /**
@@ -143,70 +141,6 @@ ble_att_svr_prev_handle(void)
 }
 
 /**
- * Walk the host attribute list, calling walk_func on each entry with argument.
- * If walk_func wants to stop iteration, it returns 1.  To continue iteration
- * it returns 0.
- *
- * Lock restrictions: None.
- *
- * @param walk_func             The function to call for each element in the
- *                                  host attribute list.
- * @param arg                   The argument to provide to walk_func
- * @param ha_ptr                On input: Indicates the starting point of the
- *                                  walk; null means start at the beginning of
- *                                  the list, non-null means start at the
- *                                  following entry.
- *                              On output: Indicates the last ble_att element
- *                                  processed, or NULL if the entire list has
- *                                  been processed.
- *
- * @return 1 on stopped, 0 on fully processed and an error code otherwise.
- */
-int
-ble_att_svr_walk(ble_att_svr_walk_func_t walk_func, void *arg,
-                 struct ble_att_svr_entry **ha_ptr)
-{
-    struct ble_att_svr_entry *ha;
-    int rc;
-
-    assert(ha_ptr != NULL);
-
-    if (*ha_ptr == NULL) {
-        ha = STAILQ_FIRST(&ble_att_svr_list);
-    } else {
-        ha = STAILQ_NEXT(*ha_ptr, ha_next);
-    }
-
-    while (ha != NULL) {
-        rc = walk_func(ha, arg);
-        if (rc == 1) {
-            *ha_ptr = ha;
-            goto done;
-        }
-
-        ha = STAILQ_NEXT(ha, ha_next);
-    }
-
-    rc = 0;
-
-done:
-    return rc;
-}
-
-/**
- * Lock restrictions: None.
- */
-static int
-ble_att_svr_match_handle(struct ble_att_svr_entry *ha, void *arg)
-{
-    if (ha->ha_handle_id == *(uint16_t *) arg) {
-        return (1);
-    } else {
-        return (0);
-    }
-}
-
-/**
  * Find a host attribute by handle id.
  *
  * Lock restrictions: None.
@@ -222,37 +156,21 @@ ble_att_svr_match_handle(struct ble_att_svr_entry *ha, void *arg)
  *
  * @return                      0 on success; BLE_HS_ENOENT on not found.
  */
-int
-ble_att_svr_find_by_handle(uint16_t handle_id,
-                           struct ble_att_svr_entry **ha_ptr)
+struct ble_att_svr_entry *
+ble_att_svr_find_by_handle(uint16_t handle_id)
 {
-    int rc;
-
-    rc = ble_att_svr_walk(ble_att_svr_match_handle, &handle_id, ha_ptr);
-    if (rc == 1) {
-        /* Found a matching handle */
-        return 0;
-    } else {
-        /* Not found */
-        return BLE_HS_ENOENT;
-    }
-}
-
-/**
- * Lock restrictions: None.
- */
-static int
-ble_att_svr_match_uuid(struct ble_att_svr_entry *ha, void *arg)
-{
-    uint8_t *uuid;
+    struct ble_att_svr_entry *entry;
 
-    uuid = arg;
+    for (entry = STAILQ_FIRST(&ble_att_svr_list);
+         entry != NULL;
+         entry = STAILQ_NEXT(entry, ha_next)) {
 
-    if (memcmp(ha->ha_uuid, uuid, sizeof ha->ha_uuid) == 0) {
-        return (1);
-    } else {
-        return (0);
+        if (entry->ha_handle_id == handle_id) {
+            return entry;
+        }
     }
+
+    return NULL;
 }
 
 /**
@@ -271,19 +189,24 @@ ble_att_svr_match_uuid(struct ble_att_svr_entry *ha, void *arg)
  *
  * @return                      0 on success; BLE_HS_ENOENT on not found.
  */
-int
-ble_att_svr_find_by_uuid(uint8_t *uuid, struct ble_att_svr_entry **ha_ptr)
+struct ble_att_svr_entry *
+ble_att_svr_find_by_uuid(struct ble_att_svr_entry *prev, uint8_t *uuid)
 {
-    int rc;
+    struct ble_att_svr_entry *entry;
 
-    rc = ble_att_svr_walk(ble_att_svr_match_uuid, uuid, ha_ptr);
-    if (rc == 1) {
-        /* Found a matching handle */
-        return 0;
+    if (prev == NULL) {
+        entry = STAILQ_FIRST(&ble_att_svr_list);
     } else {
-        /* No match */
-        return BLE_HS_ENOENT;
+        entry = STAILQ_NEXT(prev, ha_next);
     }
+
+    for (; entry != NULL; entry = STAILQ_NEXT(entry, ha_next)) {
+        if (memcmp(entry->ha_uuid, uuid, sizeof entry->ha_uuid) == 0) {
+            return entry;
+        }
+    }
+
+    return NULL;
 }
 
 static int
@@ -335,7 +258,7 @@ ble_att_svr_read(uint16_t conn_handle, struct ble_att_svr_entry *entry,
 
     /* XXX: Check security. */
 
-    assert(entry->ha_cb != NULL);
+    BLE_HS_DBG_ASSERT(entry->ha_cb != NULL);
     rc = entry->ha_cb(conn_handle, entry->ha_handle_id,
                       entry->ha_uuid, BLE_ATT_ACCESS_OP_READ, ctxt,
                       entry->ha_cb_arg);
@@ -365,11 +288,10 @@ ble_att_svr_read_handle(uint16_t conn_handle, uint16_t attr_handle,
     struct ble_att_svr_entry *entry;
     int rc;
 
-    entry = NULL;
-    rc = ble_att_svr_find_by_handle(attr_handle, &entry);
-    if (rc != 0) {
+    entry = ble_att_svr_find_by_handle(attr_handle);
+    if (entry == NULL) {
         *out_att_err = BLE_ATT_ERR_INVALID_HANDLE;
-        return rc;
+        return BLE_HS_ENOENT;
     }
 
     rc = ble_att_svr_read(conn_handle, entry, ctxt, out_att_err);
@@ -390,7 +312,7 @@ ble_att_svr_write(uint16_t conn_handle, struct ble_att_svr_entry *entry,
     uint8_t att_err;
     int rc;
 
-    assert(!ble_hs_conn_locked_by_cur_task());
+    BLE_HS_DBG_ASSERT(!ble_hs_conn_locked_by_cur_task());
 
     if (conn_handle != BLE_HS_CONN_HANDLE_NONE &&
         !(entry->ha_flags & HA_FLAG_PERM_WRITE)) {
@@ -402,7 +324,7 @@ ble_att_svr_write(uint16_t conn_handle, struct ble_att_svr_entry *entry,
 
     /* XXX: Check security. */
 
-    assert(entry->ha_cb != NULL);
+    BLE_HS_DBG_ASSERT(entry->ha_cb != NULL);
     rc = entry->ha_cb(conn_handle, entry->ha_handle_id,
                       entry->ha_uuid, BLE_ATT_ACCESS_OP_WRITE, ctxt,
                       entry->ha_cb_arg);
@@ -429,11 +351,10 @@ ble_att_svr_write_handle(uint16_t conn_handle, uint16_t attr_handle,
     struct ble_att_svr_entry *entry;
     int rc;
 
-    entry = NULL;
-    rc = ble_att_svr_find_by_handle(attr_handle, &entry);
-    if (rc != 0) {
+    entry = ble_att_svr_find_by_handle(attr_handle);
+    if (entry == NULL) {
         *out_att_err = BLE_ATT_ERR_INVALID_HANDLE;
-        return rc;
+        return BLE_HS_ENOENT;
     }
 
     rc = ble_att_svr_write(conn_handle, entry, ctxt, out_att_err);
@@ -456,7 +377,7 @@ ble_att_svr_tx_error_rsp(struct ble_hs_conn *conn, struct ble_l2cap_chan *chan,
     void *dst;
     int rc;
 
-    assert(error_code != 0);
+    BLE_HS_DBG_ASSERT(error_code != 0);
 
     txom = ble_hs_misc_pkthdr();
     if (txom == NULL) {
@@ -474,8 +395,7 @@ ble_att_svr_tx_error_rsp(struct ble_hs_conn *conn, struct ble_l2cap_chan *chan,
     rsp.baep_handle = handle;
     rsp.baep_error_code = error_code;
 
-    rc = ble_att_error_rsp_write(dst, BLE_ATT_ERROR_RSP_SZ, &rsp);
-    assert(rc == 0);
+    ble_att_error_rsp_write(dst, BLE_ATT_ERROR_RSP_SZ, &rsp);
 
     rc = ble_l2cap_tx(conn, chan, txom);
     txom = NULL;
@@ -541,7 +461,7 @@ ble_att_svr_tx_rsp(uint16_t conn_handle, int rc, struct os_mbuf *txom,
             rc = BLE_HS_ENOTCONN;
         } else {
             if (rc == 0) {
-                assert(txom != NULL);
+                BLE_HS_DBG_ASSERT(txom != NULL);
                 rc = ble_l2cap_tx(conn, chan, txom);
                 txom = NULL;
                 if (rc != 0) {
@@ -607,8 +527,7 @@ ble_att_svr_build_mtu_rsp(uint16_t conn_handle, struct os_mbuf **out_txom,
 
     cmd.bamc_mtu = mtu;
 
-    rc = ble_att_mtu_rsp_write(dst, BLE_ATT_MTU_CMD_SZ, &cmd);
-    assert(rc == 0);
+    ble_att_mtu_rsp_write(dst, BLE_ATT_MTU_CMD_SZ, &cmd);
 
     rc = 0;
 
@@ -637,8 +556,7 @@ ble_att_svr_rx_mtu(uint16_t conn_handle, struct os_mbuf **om)
         goto done;
     }
 
-    rc = ble_att_mtu_cmd_parse((*om)->om_data, (*om)->om_len, &cmd);
-    assert(rc == 0);
+    ble_att_mtu_cmd_parse((*om)->om_data, (*om)->om_len, &cmd);
 
     rc = ble_att_svr_build_mtu_rsp(conn_handle, &txom, &att_err);
     if (rc != 0) {
@@ -685,10 +603,10 @@ ble_att_svr_fill_info(struct ble_att_find_info_req *req, struct os_mbuf *om,
                       uint16_t mtu, uint8_t *format)
 {
     struct ble_att_svr_entry *ha;
-    uint16_t handle_id;
     uint16_t uuid16;
+    uint8_t *buf;
     int num_entries;
-    int rsp_sz;
+    int entry_sz;
     int rc;
 
     *format = 0;
@@ -703,66 +621,49 @@ ble_att_svr_fill_info(struct ble_att_find_info_req *req, struct os_mbuf *om,
         if (ha->ha_handle_id >= req->bafq_start_handle) {
             uuid16 = ble_uuid_128_to_16(ha->ha_uuid);
 
-            if (*format == 0) {
-                if (uuid16 != 0) {
+            if (uuid16 != 0) {
+                if (*format == 0) {
                     *format = BLE_ATT_FIND_INFO_RSP_FORMAT_16BIT;
-                } else {
-                    *format = BLE_ATT_FIND_INFO_RSP_FORMAT_128BIT;
-                }
-            }
-
-            switch (*format) {
-            case BLE_ATT_FIND_INFO_RSP_FORMAT_16BIT:
-                if (uuid16 == 0) {
+                } else if (*format != BLE_ATT_FIND_INFO_RSP_FORMAT_16BIT) {
                     rc = 0;
                     goto done;
                 }
 
-                rsp_sz = OS_MBUF_PKTHDR(om)->omp_len + 4;
-                if (rsp_sz > mtu) {
+                entry_sz = 4;
+            } else {
+                if (*format == 0) {
+                    *format = BLE_ATT_FIND_INFO_RSP_FORMAT_128BIT;
+                } else if (*format != BLE_ATT_FIND_INFO_RSP_FORMAT_128BIT) {
                     rc = 0;
                     goto done;
                 }
+                entry_sz = 18;
+            }
 
-                htole16(&handle_id, ha->ha_handle_id);
-                rc = os_mbuf_append(om, &handle_id, 2);
-                if (rc != 0) {
-                    goto done;
-                }
+            if (OS_MBUF_PKTLEN(om) + entry_sz > mtu) {
+                rc = 0;
+                goto done;
+            }
 
-                htole16(&uuid16, uuid16);
-                rc = os_mbuf_append(om, &uuid16, 2);
-                if (rc != 0) {
-                    goto done;
-                }
-                break;
+            buf = os_mbuf_extend(om, entry_sz);
+            if (buf == NULL) {
+                rc = BLE_HS_ENOMEM;
+                goto done;
+            }
 
-            case BLE_ATT_FIND_INFO_RSP_FORMAT_128BIT:
-                if (uuid16 != 0) {
-                    rc = 0;
-                    goto done;
-                }
+            htole16(buf + 0, ha->ha_handle_id);
 
-                rsp_sz = OS_MBUF_PKTHDR(om)->omp_len + 18;
-                if (rsp_sz > mtu) {
-                    rc = 0;
-                    goto done;
-                }
-
-                htole16(&handle_id, ha->ha_handle_id);
-                rc = os_mbuf_append(om, &handle_id, 2);
-                if (rc != 0) {
-                    goto done;
-                }
+            switch (*format) {
+            case BLE_ATT_FIND_INFO_RSP_FORMAT_16BIT:
+                htole16(buf + 2, uuid16);
+                break;
 
-                rc = os_mbuf_append(om, &ha->ha_uuid, 16);
-                if (rc != 0) {
-                    goto done;
-                }
+            case BLE_ATT_FIND_INFO_RSP_FORMAT_128BIT:
+                memcpy(buf + 2, ha->ha_uuid, sizeof ha->ha_uuid);
                 break;
 
             default:
-                assert(0);
+                BLE_HS_DBG_ASSERT(0);
                 break;
             }
 
@@ -771,7 +672,6 @@ ble_att_svr_fill_info(struct ble_att_find_info_req *req, struct os_mbuf *om,
     }
 
 done:
-
     if (rc == 0 && num_entries == 0) {
         return BLE_HS_ENOENT;
     } else {
@@ -819,8 +719,7 @@ ble_att_svr_build_find_info_rsp(uint16_t conn_handle,
         goto done;
     }
 
-    rc = ble_att_find_info_rsp_write(buf, BLE_ATT_FIND_INFO_RSP_BASE_SZ, &rsp);
-    assert(rc == 0);
+    ble_att_find_info_rsp_write(buf, BLE_ATT_FIND_INFO_RSP_BASE_SZ, &rsp);
 
     /* Write the variable length Information Data field, populating the format
      * field as appropriate.
@@ -866,8 +765,7 @@ ble_att_svr_rx_find_info(uint16_t conn_handle, struct os_mbuf **rxom)
         goto done;
     }
 
-    rc = ble_att_find_info_req_parse((*rxom)->om_data, (*rxom)->om_len, &req);
-    assert(rc == 0);
+    ble_att_find_info_req_parse((*rxom)->om_data, (*rxom)->om_len, &req);
 
     /* Tx error response if start handle is greater than end handle or is equal
      * to 0 (Vol. 3, Part F, 3.4.3.1).
@@ -1192,9 +1090,7 @@ ble_att_svr_rx_find_type_value(uint16_t conn_handle, struct os_mbuf **rxom)
         goto done;
     }
 
-    rc = ble_att_find_type_value_req_parse((*rxom)->om_data, (*rxom)->om_len,
-                                           &req);
-    assert(rc == 0);
+    ble_att_find_type_value_req_parse((*rxom)->om_data, (*rxom)->om_len, &req);
 
     /* Tx error response if start handle is greater than end handle or is equal
      * to 0 (Vol. 3, Part F, 3.4.3.3).
@@ -1280,13 +1176,10 @@ ble_att_svr_build_read_type_rsp(uint16_t conn_handle,
     /* Find all matching attributes, writing a record for each. */
     entry = NULL;
     while (1) {
-        rc = ble_att_svr_find_by_uuid(uuid128, &entry);
-        if (rc == BLE_HS_ENOENT) {
+        entry = ble_att_svr_find_by_uuid(entry, uuid128);
+        if (entry == NULL) {
+            rc = BLE_HS_ENOENT;
             break;
-        } else if (rc != 0) {
-            *att_err = BLE_ATT_ERR_UNLIKELY;
-            *err_handle = 0;
-            goto done;
         }
 
         if (entry->ha_handle_id > req->batq_end_handle) {
@@ -1346,8 +1239,7 @@ done:
 
         /* Fill the response base. */
         rsp.batp_length = BLE_ATT_READ_TYPE_ADATA_BASE_SZ + prev_attr_len;
-        rc = ble_att_read_type_rsp_write(txom->om_data, txom->om_len, &rsp);
-        assert(rc == 0);
+        ble_att_read_type_rsp_write(txom->om_data, txom->om_len, &rsp);
     }
 
     *out_txom = txom;
@@ -1391,8 +1283,7 @@ ble_att_svr_rx_read_type(uint16_t conn_handle, struct os_mbuf **rxom)
         goto done;
     }
 
-    rc = ble_att_read_type_req_parse((*rxom)->om_data, (*rxom)->om_len, &req);
-    assert(rc == 0);
+    ble_att_read_type_req_parse((*rxom)->om_data, (*rxom)->om_len, &req);
 
     if (req.batq_start_handle > req.batq_end_handle ||
         req.batq_start_handle == 0) {
@@ -1527,8 +1418,7 @@ ble_att_svr_rx_read(uint16_t conn_handle, struct os_mbuf **rxom)
         goto done;
     }
 
-    rc = ble_att_read_req_parse((*rxom)->om_data, (*rxom)->om_len, &req);
-    assert(rc == 0);
+    ble_att_read_req_parse((*rxom)->om_data, (*rxom)->om_len, &req);
 
     ctxt.offset = 0;
     rc = ble_att_svr_read_handle(conn_handle, req.barq_handle, &ctxt,
@@ -1638,13 +1528,7 @@ ble_att_svr_rx_read_blob(uint16_t conn_handle, struct os_mbuf **rxom)
         goto done;
     }
 
-    rc = ble_att_read_blob_req_parse((*rxom)->om_data, (*rxom)->om_len, &req);
-    if (rc != 0) {
-        att_err = BLE_ATT_ERR_INVALID_PDU;
-        err_handle = 0;
-        rc = BLE_HS_EBADDATA;
-        goto done;
-    }
+    ble_att_read_blob_req_parse((*rxom)->om_data, (*rxom)->om_len, &req);
 
     ctxt.offset = req.babq_offset;
     rc = ble_att_svr_read_handle(conn_handle, req.babq_handle, &ctxt,
@@ -1718,8 +1602,7 @@ ble_att_svr_build_read_mult_rsp(uint16_t conn_handle,
         rc = BLE_HS_ENOMEM;
         goto done;
     }
-    rc = ble_att_read_mult_rsp_write(dptr, BLE_ATT_READ_MULT_RSP_BASE_SZ);
-    assert(rc == 0);
+    ble_att_read_mult_rsp_write(dptr, BLE_ATT_READ_MULT_RSP_BASE_SZ);
 
     tx_space = mtu - OS_MBUF_PKTLEN(txom);
 
@@ -1801,13 +1684,7 @@ ble_att_svr_rx_read_mult(uint16_t conn_handle, struct os_mbuf **rxom)
         goto done;
     }
 
-    rc = ble_att_read_mult_req_parse((*rxom)->om_data, (*rxom)->om_len);
-    if (rc != 0) {
-        att_err = BLE_ATT_ERR_INVALID_PDU;
-        err_handle = 0;
-        rc = BLE_HS_EBADDATA;
-        goto done;
-    }
+    ble_att_read_mult_req_parse((*rxom)->om_data, (*rxom)->om_len);
 
     /* Strip opcode from request. */
     os_mbuf_adj(*rxom, BLE_ATT_READ_MULT_REQ_BASE_SZ);
@@ -1998,7 +1875,7 @@ ble_att_svr_build_read_group_type_rsp(uint16_t conn_handle,
                     if (rc == BLE_HS_ENOMEM) {
                         *att_err = BLE_ATT_ERR_INSUFFICIENT_RES;
                     } else {
-                        assert(rc == BLE_HS_EMSGSIZE);
+                        BLE_HS_DBG_ASSERT(rc == BLE_HS_EMSGSIZE);
                     }
                     goto done;
                 }
@@ -2046,7 +1923,7 @@ ble_att_svr_build_read_group_type_rsp(uint16_t conn_handle,
                     break;
 
                 default:
-                    assert(0);
+                    BLE_HS_DBG_ASSERT(0);
                     goto done;
                 }
 
@@ -2088,9 +1965,9 @@ done:
     }
 
     if (rc == 0 || rc == BLE_HS_EMSGSIZE) {
-        rc = ble_att_read_group_type_rsp_write(
-            rsp_buf, BLE_ATT_READ_GROUP_TYPE_RSP_BASE_SZ, &rsp);
-        assert(rc == 0);
+        ble_att_read_group_type_rsp_write(rsp_buf,
+                                          BLE_ATT_READ_GROUP_TYPE_RSP_BASE_SZ,
+                                          &rsp);
     }
 
     *out_txom = txom;
@@ -2132,14 +2009,7 @@ ble_att_svr_rx_read_group_type(uint16_t conn_handle, struct os_mbuf **rxom)
         goto done;
     }
 
-    rc = ble_att_read_group_type_req_parse((*rxom)->om_data, (*rxom)->om_len,
-                                           &req);
-    if (rc != 0) {
-        att_err = BLE_ATT_ERR_INVALID_PDU;
-        err_handle = 0;
-        rc = BLE_HS_EBADDATA;
-        goto done;
-    }
+    ble_att_read_group_type_req_parse((*rxom)->om_data, (*rxom)->om_len, &req);
 
     if (req.bagq_start_handle > req.bagq_end_handle ||
         req.bagq_start_handle == 0) {
@@ -2243,8 +2113,7 @@ ble_att_svr_rx_write(uint16_t conn_handle, struct os_mbuf **rxom)
         goto done;
     }
 
-    rc = ble_att_write_req_parse((*rxom)->om_data, (*rxom)->om_len, &req);
-    assert(rc == 0);
+    ble_att_write_req_parse((*rxom)->om_data, (*rxom)->om_len, &req);
 
     /* Strip the request base from the front of the mbuf. */
     os_mbuf_adj(*rxom, BLE_ATT_WRITE_REQ_BASE_SZ);
@@ -2294,8 +2163,7 @@ ble_att_svr_rx_write_no_rsp(uint16_t conn_handle, struct os_mbuf **rxom)
         return rc;
     }
 
-    rc = ble_att_write_cmd_parse((*rxom)->om_data, (*rxom)->om_len, &req);
-    assert(rc == 0);
+    ble_att_write_cmd_parse((*rxom)->om_data, (*rxom)->om_len, &req);
 
     /* Strip the request base from the front of the mbuf. */
     os_mbuf_adj(*rxom, BLE_ATT_WRITE_REQ_BASE_SZ);
@@ -2479,14 +2347,13 @@ ble_att_svr_prep_write(struct ble_hs_conn *conn, uint16_t *err_handle)
         rc = os_mbuf_copydata(entry->bape_value, 0,
                               OS_MBUF_PKTLEN(entry->bape_value),
                               ble_att_flat_buf + buf_off);
-        assert(rc == 0);
+        BLE_HS_DBG_ASSERT_EVAL(rc == 0);
         buf_off += OS_MBUF_PKTLEN(entry->bape_value);
 
         /* If this is the last entry for this attribute, perform the write. */
         if (next == NULL || entry->bape_handle != next->bape_handle) {
-            attr = NULL;
-            rc = ble_att_svr_find_by_handle(entry->bape_handle, &attr);
-            if (rc != 0) {
+            attr = ble_att_svr_find_by_handle(entry->bape_handle);
+            if (attr == NULL) {
                 *err_handle = entry->bape_handle;
                 return BLE_ATT_ERR_INVALID_HANDLE;
             }
@@ -2542,15 +2409,14 @@ ble_att_svr_rx_prep_write(uint16_t conn_handle, struct os_mbuf **rxom)
         goto done;
     }
 
-    rc = ble_att_prep_write_req_parse((*rxom)->om_data, (*rxom)->om_len, &req);
-    assert(rc == 0);
+    ble_att_prep_write_req_parse((*rxom)->om_data, (*rxom)->om_len, &req);
 
     /* Strip the request base from the front of the mbuf. */
     os_mbuf_adj(*rxom, BLE_ATT_PREP_WRITE_CMD_BASE_SZ);
 
-    attr_entry = NULL;
-    rc = ble_att_svr_find_by_handle(req.bapc_handle, &attr_entry);
-    if (rc != 0) {
+    attr_entry = ble_att_svr_find_by_handle(req.bapc_handle);
+    if (attr_entry == NULL) {
+        rc = BLE_HS_ENOENT;
         att_err = BLE_ATT_ERR_INVALID_HANDLE;
         err_handle = req.bapc_handle;
         goto done;
@@ -2615,9 +2481,8 @@ ble_att_svr_rx_prep_write(uint16_t conn_handle, struct os_mbuf **rxom)
     }
     txom = *rxom;
 
-    rc = ble_att_prep_write_rsp_write(txom->om_data,
-                                      BLE_ATT_PREP_WRITE_CMD_BASE_SZ, &req);
-    assert(rc == 0);
+    ble_att_prep_write_rsp_write(txom->om_data, BLE_ATT_PREP_WRITE_CMD_BASE_SZ,
+                                 &req);
 
     rc = 0;
 
@@ -2681,8 +2546,7 @@ ble_att_svr_build_exec_write_rsp(struct os_mbuf **out_txom, uint8_t *att_err)
         goto done;
     }
 
-    rc = ble_att_exec_write_rsp_write(dst, BLE_ATT_EXEC_WRITE_RSP_SZ);
-    assert(rc == 0);
+    ble_att_exec_write_rsp_write(dst, BLE_ATT_EXEC_WRITE_RSP_SZ);
 
     rc = 0;
 
@@ -2718,8 +2582,7 @@ ble_att_svr_rx_exec_write(uint16_t conn_handle, struct os_mbuf **rxom)
         goto done;
     }
 
-    rc = ble_att_exec_write_req_parse((*rxom)->om_data, (*rxom)->om_len, &req);
-    assert(rc == 0);
+    ble_att_exec_write_req_parse((*rxom)->om_data, (*rxom)->om_len, &req);
 
     rc = ble_att_svr_build_exec_write_rsp(&txom, &att_err);
     if (rc != 0) {
@@ -2779,8 +2642,7 @@ ble_att_svr_rx_notify(uint16_t conn_handle, struct os_mbuf **rxom)
         return BLE_HS_ENOMEM;
     }
 
-    rc = ble_att_notify_req_parse((*rxom)->om_data, (*rxom)->om_len, &req);
-    assert(rc == 0);
+    ble_att_notify_req_parse((*rxom)->om_data, (*rxom)->om_len, &req);
 
     if (req.banq_handle == 0) {
         return BLE_HS_EBADDATA;
@@ -2829,8 +2691,7 @@ ble_att_svr_build_indicate_rsp(struct os_mbuf **out_txom)
         goto done;
     }
 
-    rc = ble_att_indicate_rsp_write(dst, BLE_ATT_INDICATE_RSP_SZ);
-    assert(rc == 0);
+    ble_att_indicate_rsp_write(dst, BLE_ATT_INDICATE_RSP_SZ);
 
     rc = 0;
 
@@ -2868,8 +2729,7 @@ ble_att_svr_rx_indicate(uint16_t conn_handle, struct os_mbuf **rxom)
         goto done;
     }
 
-    rc = ble_att_indicate_req_parse((*rxom)->om_data, (*rxom)->om_len, &req);
-    assert(rc == 0);
+    ble_att_indicate_req_parse((*rxom)->om_data, (*rxom)->om_len, &req);
 
     if (req.baiq_handle == 0) {
         rc = BLE_HS_EBADDATA;



[2/3] incubator-mynewt-core git commit: ble host: reduce code size.

Posted by cc...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2fef21d6/net/nimble/host/src/ble_fsm.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_fsm.c b/net/nimble/host/src/ble_fsm.c
index b380216..e6edd28 100644
--- a/net/nimble/host/src/ble_fsm.c
+++ b/net/nimble/host/src/ble_fsm.c
@@ -40,11 +40,11 @@ ble_fsm_lock(struct ble_fsm *fsm)
 
     owner = fsm->mutex.mu_owner;
     if (owner != NULL) {
-        assert(owner != os_sched_get_current_task());
+        BLE_HS_DBG_ASSERT_EVAL(owner != os_sched_get_current_task());
     }
 
     rc = os_mutex_pend(&fsm->mutex, 0xffffffff);
-    assert(rc == 0 || rc == OS_NOT_STARTED);
+    BLE_HS_DBG_ASSERT_EVAL(rc == 0 || rc == OS_NOT_STARTED);
 }
 
 void
@@ -53,7 +53,7 @@ ble_fsm_unlock(struct ble_fsm *fsm)
     int rc;
 
     rc = os_mutex_release(&fsm->mutex);
-    assert(rc == 0 || rc == OS_NOT_STARTED);
+    BLE_HS_DBG_ASSERT_EVAL(rc == 0 || rc == OS_NOT_STARTED);
 }
 
 int
@@ -97,7 +97,7 @@ ble_fsm_assert_sanity(struct ble_fsm *fsm)
             mask <<= 1;
         }
 
-        assert(num_set == 1);
+        BLE_HS_DBG_ASSERT(num_set == 1);
     }
 }
 
@@ -122,10 +122,10 @@ ble_fsm_proc_remove(struct ble_fsm_proc_list *src_list,
                     struct ble_fsm_proc *prev)
 {
     if (prev == NULL) {
-        assert(STAILQ_FIRST(src_list) == proc);
+        BLE_HS_DBG_ASSERT(STAILQ_FIRST(src_list) == proc);
         STAILQ_REMOVE_HEAD(src_list, next);
     } else {
-        assert(STAILQ_NEXT(prev, next) == proc);
+        BLE_HS_DBG_ASSERT(STAILQ_NEXT(prev, next) == proc);
         STAILQ_NEXT(prev, next) = STAILQ_NEXT(proc, next);
     }
 }
@@ -179,7 +179,7 @@ ble_fsm_proc_can_pend(struct ble_fsm_proc *proc)
 void
 ble_fsm_proc_set_pending(struct ble_fsm_proc *proc)
 {
-    assert(!(proc->flags & BLE_FSM_PROC_F_PENDING));
+    BLE_HS_DBG_ASSERT(!(proc->flags & BLE_FSM_PROC_F_PENDING));
 
     proc->flags &= ~BLE_FSM_PROC_F_EXPECTING;
     proc->flags |= BLE_FSM_PROC_F_PENDING;
@@ -194,7 +194,7 @@ ble_fsm_proc_set_pending(struct ble_fsm_proc *proc)
 static void
 ble_fsm_proc_set_expecting(struct ble_fsm_proc *proc)
 {
-    assert(!(proc->flags & BLE_FSM_PROC_F_EXPECTING));
+    BLE_HS_DBG_ASSERT(!(proc->flags & BLE_FSM_PROC_F_EXPECTING));
 
     proc->flags &= ~BLE_FSM_PROC_F_PENDING;
     proc->flags |= BLE_FSM_PROC_F_EXPECTING;
@@ -306,7 +306,7 @@ ble_fsm_proc_extract(struct ble_fsm *fsm,
             goto done;
 
         default:
-            assert(0);
+            BLE_HS_DBG_ASSERT(0);
             rc = 1;
             goto done;
         }
@@ -387,7 +387,7 @@ ble_fsm_proc_extract_list(struct ble_fsm *fsm,
             break;
 
         default:
-            assert(0);
+            BLE_HS_DBG_ASSERT(0);
             move = 0;
             done = 1;
             break;
@@ -487,7 +487,7 @@ ble_fsm_wakeup(struct ble_fsm *fsm)
             break;
 
         default:
-            assert(0);
+            BLE_HS_DBG_ASSERT(0);
             break;
         }
 
@@ -511,8 +511,8 @@ ble_fsm_new(struct ble_fsm *fsm, ble_fsm_kick_fn *kick_cb,
 {
     int rc;
 
-    assert(kick_cb != NULL);
-    assert(free_cb != NULL);
+    BLE_HS_DBG_ASSERT(kick_cb != NULL);
+    BLE_HS_DBG_ASSERT(free_cb != NULL);
 
     memset(fsm, 0, sizeof *fsm);
 

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2fef21d6/net/nimble/host/src/ble_fsm_priv.h
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_fsm_priv.h b/net/nimble/host/src/ble_fsm_priv.h
index 062f37d..cc874c4 100644
--- a/net/nimble/host/src/ble_fsm_priv.h
+++ b/net/nimble/host/src/ble_fsm_priv.h
@@ -20,6 +20,8 @@
 #ifndef H_BLE_FSM_PRIV_
 #define H_BLE_FSM_PRIV_
 
+#include "os/os_mutex.h"
+
 struct ble_fsm_proc {
     STAILQ_ENTRY(ble_fsm_proc) next;
 

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2fef21d6/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 da72b9c..b5cb973 100644
--- a/net/nimble/host/src/ble_gap.c
+++ b/net/nimble/host/src/ble_gap.c
@@ -255,11 +255,11 @@ ble_gap_lock(void)
 
     owner = ble_gap_mutex.mu_owner;
     if (owner != NULL) {
-        assert(owner != os_sched_get_current_task());
+        BLE_HS_DBG_ASSERT_EVAL(owner != os_sched_get_current_task());
     }
 
     rc = os_mutex_pend(&ble_gap_mutex, 0xffffffff);
-    assert(rc == 0 || rc == OS_NOT_STARTED);
+    BLE_HS_DBG_ASSERT_EVAL(rc == 0 || rc == OS_NOT_STARTED);
 }
 
 static void
@@ -268,7 +268,7 @@ ble_gap_unlock(void)
     int rc;
 
     rc = os_mutex_release(&ble_gap_mutex);
-    assert(rc == 0 || rc == OS_NOT_STARTED);
+    BLE_HS_DBG_ASSERT_EVAL(rc == 0 || rc == OS_NOT_STARTED);
 }
 
 int
@@ -643,7 +643,7 @@ ble_gap_update_entry_alloc(uint16_t conn_handle,
 
 #ifdef BLE_HS_DEBUG
     ble_gap_lock();
-    assert(ble_gap_update_find(conn_handle) == NULL);
+    BLE_HS_DBG_ASSERT(ble_gap_update_find(conn_handle) == NULL);
     ble_gap_unlock();
 #endif
 
@@ -669,7 +669,7 @@ ble_gap_update_entry_free(struct ble_gap_update_entry *entry)
     int rc;
 
     rc = os_memblock_put(&ble_gap_update_pool, entry);
-    assert(rc == 0);
+    BLE_HS_DBG_ASSERT_EVAL(rc == 0);
 }
 
 /**
@@ -1017,7 +1017,7 @@ ble_gap_currently_advertising(void)
         return ble_gap_slave.state == BLE_GAP_STATE_S_DIR_ADV;
 
     default:
-        assert(0);
+        BLE_HS_DBG_ASSERT(0);
         return 0;
     }
 }
@@ -1092,7 +1092,7 @@ ble_gap_accept_master_conn(uint8_t addr_type, uint8_t *addr)
         break;
 
     default:
-        assert(0);
+        BLE_HS_DBG_ASSERT(0);
         rc = BLE_HS_ENOENT;
         break;
     }
@@ -1151,7 +1151,7 @@ ble_gap_accept_slave_conn(uint8_t addr_type, uint8_t *addr)
             break;
 
         default:
-            assert(0);
+            BLE_HS_DBG_ASSERT(0);
             rc = BLE_HS_ENOENT;
             break;
         }
@@ -1295,13 +1295,13 @@ ble_gap_rx_conn_complete(struct hci_le_conn_complete *evt)
         break;
 
     default:
-        assert(0);
+        BLE_HS_DBG_ASSERT(0);
         break;
     }
 
     /* We verified that there is a free connection when the procedure began. */
     conn = ble_hs_conn_alloc();
-    assert(conn != NULL);
+    BLE_HS_DBG_ASSERT(conn != NULL);
 
     conn->bhc_handle = evt->connection_handle;
     memcpy(conn->bhc_addr, evt->peer_addr, sizeof conn->bhc_addr);
@@ -1370,7 +1370,7 @@ ble_gap_master_timer_exp(void *arg)
 {
     ble_hs_misc_assert_no_locks();
 
-    assert(ble_gap_master_in_progress());
+    BLE_HS_DBG_ASSERT(ble_gap_master_in_progress());
 
     switch (ble_gap_master.op) {
     case BLE_GAP_OP_M_DISC:
@@ -1395,7 +1395,7 @@ ble_gap_slave_timer_exp(void *arg)
 {
     ble_hs_misc_assert_no_locks();
 
-    assert(ble_gap_slave_in_progress());
+    BLE_HS_DBG_ASSERT(ble_gap_slave_in_progress());
     ble_gap_call_slave_cb(BLE_GAP_EVENT_ADV_FINISHED, 0, 1);
 }
 
@@ -1464,9 +1464,9 @@ ble_gap_wl_enqueue(uint8_t state, int in_progress,
 static void
 ble_gap_wl_ack_add(struct ble_hci_ack *ack, void *arg)
 {
-    assert(ble_gap_wl.op == BLE_GAP_OP_W_SET);
-    assert(ble_gap_wl.state == BLE_GAP_STATE_W_ADD);
-    assert(ble_gap_wl.hci_handle == ack->bha_hci_handle);
+    BLE_HS_DBG_ASSERT(ble_gap_wl.op == BLE_GAP_OP_W_SET);
+    BLE_HS_DBG_ASSERT(ble_gap_wl.state == BLE_GAP_STATE_W_ADD);
+    BLE_HS_DBG_ASSERT(ble_gap_wl.hci_handle == ack->bha_hci_handle);
 
     ble_gap_wl.hci_handle = BLE_HCI_SCHED_HANDLE_NONE;
 
@@ -1494,10 +1494,10 @@ ble_gap_wl_tx_add(void *arg)
     struct ble_gap_white_entry *white_entry;
     int rc;
 
-    assert(ble_gap_wl.op == BLE_GAP_OP_W_SET);
-    assert(ble_gap_wl.state == BLE_GAP_STATE_W_ADD);
-    assert(ble_gap_wl.entries != NULL);
-    assert(ble_gap_wl.cur < ble_gap_wl.count);
+    BLE_HS_DBG_ASSERT(ble_gap_wl.op == BLE_GAP_OP_W_SET);
+    BLE_HS_DBG_ASSERT(ble_gap_wl.state == BLE_GAP_STATE_W_ADD);
+    BLE_HS_DBG_ASSERT(ble_gap_wl.entries != NULL);
+    BLE_HS_DBG_ASSERT(ble_gap_wl.cur < ble_gap_wl.count);
 
     ble_hci_sched_set_ack_cb(ble_gap_wl_ack_add, NULL);
 
@@ -1519,9 +1519,9 @@ ble_gap_wl_tx_add(void *arg)
 static void
 ble_gap_wl_ack_clear(struct ble_hci_ack *ack, void *arg)
 {
-    assert(ble_gap_wl.op == BLE_GAP_OP_W_SET);
-    assert(ble_gap_wl.state == BLE_GAP_STATE_W_CLEAR);
-    assert(ble_gap_wl.hci_handle == ack->bha_hci_handle);
+    BLE_HS_DBG_ASSERT(ble_gap_wl.op == BLE_GAP_OP_W_SET);
+    BLE_HS_DBG_ASSERT(ble_gap_wl.state == BLE_GAP_STATE_W_CLEAR);
+    BLE_HS_DBG_ASSERT(ble_gap_wl.hci_handle == ack->bha_hci_handle);
 
     ble_gap_wl.hci_handle = BLE_HCI_SCHED_HANDLE_NONE;
 
@@ -1542,8 +1542,8 @@ ble_gap_wl_tx_clear(void *arg)
 {
     int rc;
 
-    assert(ble_gap_wl.op == BLE_GAP_OP_W_SET);
-    assert(ble_gap_wl.state == BLE_GAP_STATE_W_CLEAR);
+    BLE_HS_DBG_ASSERT(ble_gap_wl.op == BLE_GAP_OP_W_SET);
+    BLE_HS_DBG_ASSERT(ble_gap_wl.state == BLE_GAP_STATE_W_CLEAR);
 
     ble_hci_sched_set_ack_cb(ble_gap_wl_ack_clear, NULL);
 
@@ -1627,7 +1627,7 @@ done:
 static void
 ble_gap_adv_ack_disable(struct ble_hci_ack *ack, void *arg)
 {
-    assert(ble_gap_slave.hci_handle == ack->bha_hci_handle);
+    BLE_HS_DBG_ASSERT(ble_gap_slave.hci_handle == ack->bha_hci_handle);
 
     ble_gap_slave.hci_handle = BLE_HCI_SCHED_HANDLE_NONE;
 
@@ -1728,7 +1728,7 @@ ble_gap_adv_itvls(uint8_t disc_mode, uint8_t conn_mode,
         break;
 
     default:
-        assert(0);
+        BLE_HS_DBG_ASSERT(0);
         *out_itvl_min = BLE_GAP_ADV_FAST_INTERVAL2_MIN;
         *out_itvl_max = BLE_GAP_ADV_FAST_INTERVAL2_MAX;
         break;
@@ -1752,7 +1752,7 @@ ble_gap_adv_get_dispatch(void)
         return ble_gap_dispatch_adv_dir[ble_gap_slave.state];
 
     default:
-        assert(0);
+        BLE_HS_DBG_ASSERT(0);
         return NULL;
     }
 }
@@ -1787,7 +1787,7 @@ ble_gap_adv_next_state(void)
 static void
 ble_gap_adv_ack(struct ble_hci_ack *ack, void *arg)
 {
-    assert(ble_gap_slave.hci_handle == ack->bha_hci_handle);
+    BLE_HS_DBG_ASSERT(ble_gap_slave.hci_handle == ack->bha_hci_handle);
 
     ble_gap_slave.hci_handle = BLE_HCI_SCHED_HANDLE_NONE;
 
@@ -1848,7 +1848,7 @@ ble_gap_adv_data_tx(void *arg)
     uint8_t flags;
     int rc;
 
-    assert(ble_gap_slave.op != BLE_GAP_OP_NULL);
+    BLE_HS_DBG_ASSERT(ble_gap_slave.op != BLE_GAP_OP_NULL);
 
     /* Calculate the value of the flags field from the discoverable mode. */
     flags = 0;
@@ -1865,7 +1865,7 @@ ble_gap_adv_data_tx(void *arg)
         break;
 
     default:
-        assert(0);
+        BLE_HS_DBG_ASSERT(0);
         break;
     }
 
@@ -1877,7 +1877,7 @@ ble_gap_adv_data_tx(void *arg)
         rc = ble_hs_adv_set_flat(BLE_HS_ADV_TYPE_FLAGS, 1, &flags,
                                  ble_gap_slave.adv_data, &adv_data_len,
                                  BLE_HCI_MAX_ADV_DATA_LEN);
-        assert(rc == 0);
+        BLE_HS_DBG_ASSERT(rc == 0);
     }
 
     /* Encode the transmit power AD field. */
@@ -1885,7 +1885,7 @@ ble_gap_adv_data_tx(void *arg)
                              &ble_gap_slave.tx_pwr_lvl,
                              ble_gap_slave.adv_data,
                              &adv_data_len, BLE_HCI_MAX_ADV_DATA_LEN);
-    assert(rc == 0);
+    BLE_HS_DBG_ASSERT(rc == 0);
 
     ble_hci_sched_set_ack_cb(ble_gap_adv_ack, NULL);
     rc = host_hci_cmd_le_set_adv_data(ble_gap_slave.adv_data,
@@ -1907,7 +1907,7 @@ ble_gap_adv_power_ack(struct ble_hci_ack *ack, void *arg)
 {
     int8_t power_level;
 
-    assert(ble_gap_slave.hci_handle == ack->bha_hci_handle);
+    BLE_HS_DBG_ASSERT(ble_gap_slave.hci_handle == ack->bha_hci_handle);
 
     ble_gap_slave.hci_handle = BLE_HCI_SCHED_HANDLE_NONE;
 
@@ -1984,7 +1984,7 @@ ble_gap_adv_params_tx(void *arg)
         break;
 
     default:
-        assert(0);
+        BLE_HS_DBG_ASSERT(0);
         break;
     }
 
@@ -2087,7 +2087,7 @@ ble_gap_adv_start(uint8_t discoverable_mode, uint8_t connectable_mode,
         break;
 
     default:
-        assert(0);
+        BLE_HS_DBG_ASSERT(0);
         break;
     }
 
@@ -2194,9 +2194,9 @@ ble_gap_adv_rsp_set_fields(struct ble_hs_adv_fields *rsp_fields)
 static void
 ble_gap_disc_ack_disable(struct ble_hci_ack *ack, void *arg)
 {
-    assert(ble_gap_master.op == BLE_GAP_OP_M_DISC);
-    assert(ble_gap_master.state == BLE_GAP_STATE_M_DISC_DISABLE);
-    assert(ble_gap_master.hci_handle == ack->bha_hci_handle);
+    BLE_HS_DBG_ASSERT(ble_gap_master.op == BLE_GAP_OP_M_DISC);
+    BLE_HS_DBG_ASSERT(ble_gap_master.state == BLE_GAP_STATE_M_DISC_DISABLE);
+    BLE_HS_DBG_ASSERT(ble_gap_master.hci_handle == ack->bha_hci_handle);
 
     ble_gap_master.hci_handle = BLE_HCI_SCHED_HANDLE_NONE;
 
@@ -2217,8 +2217,8 @@ ble_gap_disc_tx_disable(void *arg)
 {
     int rc;
 
-    assert(ble_gap_master.op == BLE_GAP_OP_M_DISC);
-    assert(ble_gap_master.state == BLE_GAP_STATE_M_DISC_DISABLE);
+    BLE_HS_DBG_ASSERT(ble_gap_master.op == BLE_GAP_OP_M_DISC);
+    BLE_HS_DBG_ASSERT(ble_gap_master.state == BLE_GAP_STATE_M_DISC_DISABLE);
 
     ble_hci_sched_set_ack_cb(ble_gap_disc_ack_disable, NULL);
     rc = host_hci_cmd_le_set_scan_enable(0, 0);
@@ -2238,9 +2238,9 @@ ble_gap_disc_tx_disable(void *arg)
 static void
 ble_gap_disc_ack_enable(struct ble_hci_ack *ack, void *arg)
 {
-    assert(ble_gap_master.op == BLE_GAP_OP_M_DISC);
-    assert(ble_gap_master.state == BLE_GAP_STATE_M_DISC_ENABLE);
-    assert(ble_gap_master.hci_handle == ack->bha_hci_handle);
+    BLE_HS_DBG_ASSERT(ble_gap_master.op == BLE_GAP_OP_M_DISC);
+    BLE_HS_DBG_ASSERT(ble_gap_master.state == BLE_GAP_STATE_M_DISC_ENABLE);
+    BLE_HS_DBG_ASSERT(ble_gap_master.hci_handle == ack->bha_hci_handle);
 
     ble_gap_master.hci_handle = BLE_HCI_SCHED_HANDLE_NONE;
 
@@ -2260,8 +2260,8 @@ ble_gap_disc_tx_enable(void *arg)
 {
     int rc;
 
-    assert(ble_gap_master.op == BLE_GAP_OP_M_DISC);
-    assert(ble_gap_master.state == BLE_GAP_STATE_M_DISC_ENABLE);
+    BLE_HS_DBG_ASSERT(ble_gap_master.op == BLE_GAP_OP_M_DISC);
+    BLE_HS_DBG_ASSERT(ble_gap_master.state == BLE_GAP_STATE_M_DISC_ENABLE);
 
     ble_hci_sched_set_ack_cb(ble_gap_disc_ack_enable, NULL);
     rc = host_hci_cmd_le_set_scan_enable(1, 0);
@@ -2280,9 +2280,9 @@ ble_gap_disc_tx_enable(void *arg)
 static void
 ble_gap_disc_ack_params(struct ble_hci_ack *ack, void *arg)
 {
-    assert(ble_gap_master.op == BLE_GAP_OP_M_DISC);
-    assert(ble_gap_master.state == BLE_GAP_STATE_M_DISC_PARAMS);
-    assert(ble_gap_master.hci_handle == ack->bha_hci_handle);
+    BLE_HS_DBG_ASSERT(ble_gap_master.op == BLE_GAP_OP_M_DISC);
+    BLE_HS_DBG_ASSERT(ble_gap_master.state == BLE_GAP_STATE_M_DISC_PARAMS);
+    BLE_HS_DBG_ASSERT(ble_gap_master.hci_handle == ack->bha_hci_handle);
 
     ble_gap_master.hci_handle = BLE_HCI_SCHED_HANDLE_NONE;
 
@@ -2304,8 +2304,8 @@ ble_gap_disc_tx_params(void *arg)
 {
     int rc;
 
-    assert(ble_gap_master.op == BLE_GAP_OP_M_DISC);
-    assert(ble_gap_master.state == BLE_GAP_STATE_M_DISC_PARAMS);
+    BLE_HS_DBG_ASSERT(ble_gap_master.op == BLE_GAP_OP_M_DISC);
+    BLE_HS_DBG_ASSERT(ble_gap_master.state == BLE_GAP_STATE_M_DISC_PARAMS);
 
     ble_hci_sched_set_ack_cb(ble_gap_disc_ack_params, NULL);
     rc = host_hci_cmd_le_set_scan_params(
@@ -2412,9 +2412,9 @@ done:
 static void
 ble_gap_conn_create_ack(struct ble_hci_ack *ack, void *arg)
 {
-    assert(ble_gap_master.op == BLE_GAP_OP_M_CONN);
-    assert(ble_gap_master.state == BLE_GAP_STATE_M_UNACKED);
-    assert(ble_gap_master.hci_handle == ack->bha_hci_handle);
+    BLE_HS_DBG_ASSERT(ble_gap_master.op == BLE_GAP_OP_M_CONN);
+    BLE_HS_DBG_ASSERT(ble_gap_master.state == BLE_GAP_STATE_M_UNACKED);
+    BLE_HS_DBG_ASSERT(ble_gap_master.hci_handle == ack->bha_hci_handle);
 
     ble_gap_master.hci_handle = BLE_HCI_SCHED_HANDLE_NONE;
 
@@ -2436,8 +2436,8 @@ ble_gap_conn_create_tx(void *arg)
     struct hci_create_conn hcc;
     int rc;
 
-    assert(ble_gap_master.op == BLE_GAP_OP_M_CONN);
-    assert(ble_gap_master.state == BLE_GAP_STATE_M_PENDING);
+    BLE_HS_DBG_ASSERT(ble_gap_master.op == BLE_GAP_OP_M_CONN);
+    BLE_HS_DBG_ASSERT(ble_gap_master.state == BLE_GAP_STATE_M_PENDING);
 
     hcc.scan_itvl = ble_gap_master.conn.params.scan_itvl;
     hcc.scan_window = ble_gap_master.conn.params.scan_window;
@@ -2733,8 +2733,8 @@ ble_gap_param_neg_reply_ack(struct ble_hci_ack *ack, void *arg)
     ble_gap_lock();
 
     entry = arg;
-    assert(entry->state == BLE_GAP_STATE_U_NEG_REPLY);
-    assert(entry->hci_handle == ack->bha_hci_handle);
+    BLE_HS_DBG_ASSERT(entry->state == BLE_GAP_STATE_U_NEG_REPLY);
+    BLE_HS_DBG_ASSERT(entry->hci_handle == ack->bha_hci_handle);
 
     SLIST_REMOVE(&ble_gap_update_entries, entry,
                  ble_gap_update_entry, next);
@@ -2756,8 +2756,8 @@ ble_gap_param_reply_ack(struct ble_hci_ack *ack, void *arg)
     ble_gap_lock();
 
     entry = arg;
-    assert(entry->state == BLE_GAP_STATE_U_REPLY);
-    assert(entry->hci_handle == ack->bha_hci_handle);
+    BLE_HS_DBG_ASSERT(entry->state == BLE_GAP_STATE_U_REPLY);
+    BLE_HS_DBG_ASSERT(entry->hci_handle == ack->bha_hci_handle);
 
     entry->hci_handle = BLE_HCI_SCHED_HANDLE_NONE;
 
@@ -2941,8 +2941,8 @@ ble_gap_update_ack(struct ble_hci_ack *ack, void *arg)
     ble_gap_lock();
 
     entry = arg;
-    assert(entry->state == BLE_GAP_STATE_U_UPDATE);
-    assert(entry->hci_handle == ack->bha_hci_handle);
+    BLE_HS_DBG_ASSERT(entry->state == BLE_GAP_STATE_U_UPDATE);
+    BLE_HS_DBG_ASSERT(entry->hci_handle == ack->bha_hci_handle);
 
     ble_gap_master.hci_handle = BLE_HCI_SCHED_HANDLE_NONE;
 
@@ -2974,7 +2974,7 @@ ble_gap_update_tx(void *arg)
     ble_gap_lock();
 
     entry = arg;
-    assert(entry->state == BLE_GAP_STATE_U_UPDATE);
+    BLE_HS_DBG_ASSERT(entry->state == BLE_GAP_STATE_U_UPDATE);
 
     cmd.handle = entry->conn_handle;
     cmd.conn_itvl_min = entry->params.itvl_min;

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2fef21d6/net/nimble/host/src/ble_gattc.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_gattc.c b/net/nimble/host/src/ble_gattc.c
index aab4684..385fd0a 100644
--- a/net/nimble/host/src/ble_gattc.c
+++ b/net/nimble/host/src/ble_gattc.c
@@ -18,7 +18,6 @@
  */
 
 #include <stddef.h>
-#include <assert.h>
 #include <stdlib.h>
 #include <errno.h>
 #include <string.h>
@@ -707,7 +706,7 @@ ble_gattc_proc_free(struct ble_fsm_proc *proc)
 
     if (proc != NULL) {
         rc = os_memblock_put(&ble_gattc_proc_pool, proc);
-        assert(rc == 0);
+        BLE_HS_DBG_ASSERT_EVAL(rc == 0);
     }
 }
 
@@ -812,7 +811,7 @@ ble_gattc_new_proc(uint16_t conn_handle, uint8_t op,
 static const struct ble_gattc_dispatch_entry *
 ble_gattc_dispatch_get(uint8_t op)
 {
-    assert(op < BLE_GATT_OP_MAX);
+    BLE_HS_DBG_ASSERT(op < BLE_GATT_OP_MAX);
     return ble_gattc_dispatch + op;
 }
 
@@ -888,7 +887,7 @@ ble_gattc_heartbeat(void *unused)
 
     rc = os_callout_reset(&ble_gattc_heartbeat_timer.cf_c,
                           BLE_GATT_HEARTBEAT_PERIOD * OS_TICKS_PER_SEC / 1000);
-    assert(rc == 0);
+    BLE_HS_DBG_ASSERT_EVAL(rc == 0);
 }
 
 /**
@@ -1110,7 +1109,7 @@ ble_gattc_disc_all_svcs_kick(struct ble_gattc_proc *proc)
     int rc;
 
     rc = ble_uuid_16_to_128(BLE_ATT_UUID_PRIMARY_SERVICE, uuid128);
-    assert(rc == 0);
+    BLE_HS_DBG_ASSERT_EVAL(rc == 0);
 
     req.bagq_start_handle = proc->disc_all_svcs.prev_handle + 1;
     req.bagq_end_handle = 0xffff;
@@ -1515,7 +1514,7 @@ ble_gattc_find_inc_svcs_kick(struct ble_gattc_proc *proc)
         read_type_req.batq_end_handle = proc->find_inc_svcs.end_handle;
 
         rc = ble_uuid_16_to_128(BLE_ATT_UUID_INCLUDE, uuid128);
-        assert(rc == 0);
+        BLE_HS_DBG_ASSERT_EVAL(rc == 0);
 
         rc = ble_att_clt_tx_read_type(proc->fsm_proc.conn_handle,
                                       &read_type_req, uuid128);
@@ -1801,7 +1800,7 @@ ble_gattc_disc_all_chrs_kick(struct ble_gattc_proc *proc)
     int rc;
 
     rc = ble_uuid_16_to_128(BLE_ATT_UUID_CHARACTERISTIC, uuid128);
-    assert(rc == 0);
+    BLE_HS_DBG_ASSERT_EVAL(rc == 0);
 
     req.batq_start_handle = proc->disc_all_chrs.prev_handle + 1;
     req.batq_end_handle = proc->disc_all_chrs.end_handle;
@@ -2023,7 +2022,7 @@ ble_gattc_disc_chr_uuid_kick(struct ble_gattc_proc *proc)
     int rc;
 
     rc = ble_uuid_16_to_128(BLE_ATT_UUID_CHARACTERISTIC, uuid128);
-    assert(rc == 0);
+    BLE_HS_DBG_ASSERT_EVAL(rc == 0);
 
     req.batq_start_handle = proc->disc_chr_uuid.prev_handle + 1;
     req.batq_end_handle = proc->disc_chr_uuid.end_handle;
@@ -4042,7 +4041,7 @@ ble_gattc_rx_extract_cb(struct ble_fsm_proc *proc, void *arg)
         rx_entry = ble_gattc_rx_entry_find(proc->op,
                                            extract_arg->rx_entries,
                                            extract_arg->num_rx_entries);
-        assert(rx_entry != NULL);
+        BLE_HS_DBG_ASSERT(rx_entry != NULL);
         if (rx_entry != NULL) {
             extract_arg->out_rx_entry = rx_entry;
             return BLE_FSM_EXTRACT_EMOVE_STOP;
@@ -4720,7 +4719,7 @@ ble_gattc_started(void)
 
     rc = os_callout_reset(&ble_gattc_heartbeat_timer.cf_c,
                           BLE_GATT_HEARTBEAT_PERIOD * OS_TICKS_PER_SEC / 1000);
-    assert(rc == 0);
+    BLE_HS_DBG_ASSERT_EVAL(rc == 0);
 }
 
 /**

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2fef21d6/net/nimble/host/src/ble_gatts.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_gatts.c b/net/nimble/host/src/ble_gatts.c
index 257e1ff..b6bd522 100644
--- a/net/nimble/host/src/ble_gatts.c
+++ b/net/nimble/host/src/ble_gatts.c
@@ -18,7 +18,6 @@
  */
 
 #include <stddef.h>
-#include <assert.h>
 #include <string.h>
 #include "console/console.h"
 #include "nimble/ble.h"
@@ -78,7 +77,7 @@ ble_gatts_svc_access(uint16_t conn_handle, uint16_t attr_handle,
 
     STATS_INC(ble_gatts_stats, svc_def_reads);
 
-    assert(op == BLE_ATT_ACCESS_OP_READ);
+    BLE_HS_DBG_ASSERT(op == BLE_ATT_ACCESS_OP_READ);
 
     svc = arg;
 
@@ -110,7 +109,7 @@ ble_gatts_inc_access(uint16_t conn_handle, uint16_t attr_handle,
 
     STATS_INC(ble_gatts_stats, svc_inc_reads);
 
-    assert(op == BLE_ATT_ACCESS_OP_READ);
+    BLE_HS_DBG_ASSERT(op == BLE_ATT_ACCESS_OP_READ);
 
     entry = arg;
 
@@ -222,7 +221,7 @@ ble_gatts_chr_def_access(uint16_t conn_handle, uint16_t attr_handle,
 
     STATS_INC(ble_gatts_stats, chr_def_reads);
 
-    assert(op == BLE_ATT_ACCESS_OP_READ);
+    BLE_HS_DBG_ASSERT(op == BLE_ATT_ACCESS_OP_READ);
 
     chr = arg;
 
@@ -277,7 +276,7 @@ ble_gatts_chr_op(uint8_t att_op)
         return BLE_GATT_ACCESS_OP_WRITE_CHR;
 
     default:
-        assert(0);
+        BLE_HS_DBG_ASSERT(0);
         return BLE_GATT_ACCESS_OP_READ_CHR;
     }
 }
@@ -313,7 +312,7 @@ ble_gatts_chr_val_access(uint16_t conn_handle, uint16_t attr_handle,
     int rc;
 
     chr = arg;
-    assert(chr != NULL && chr->access_cb != NULL);
+    BLE_HS_DBG_ASSERT(chr != NULL && chr->access_cb != NULL);
 
     gatt_op = ble_gatts_chr_op(att_op);
     gatt_ctxt.chr_access.chr = chr;
@@ -390,8 +389,8 @@ ble_gatts_register_inc(struct ble_gatts_svc_entry *entry)
     uint16_t handle;
     int rc;
 
-    assert(entry->handle != 0);
-    assert(entry->end_group_handle != 0xffff);
+    BLE_HS_DBG_ASSERT(entry->handle != 0);
+    BLE_HS_DBG_ASSERT(entry->end_group_handle != 0xffff);
 
     rc = ble_att_svr_register_uuid16(BLE_ATT_UUID_INCLUDE, HA_FLAG_PERM_READ,
                                      &handle, ble_gatts_inc_access, entry);
@@ -416,7 +415,7 @@ ble_gatts_dsc_op(uint8_t att_op)
         return BLE_GATT_ACCESS_OP_WRITE_DSC;
 
     default:
-        assert(0);
+        BLE_HS_DBG_ASSERT(0);
         return BLE_GATT_ACCESS_OP_READ_DSC;
     }
 }
@@ -452,7 +451,7 @@ ble_gatts_dsc_access(uint16_t conn_handle, uint16_t attr_handle,
     int rc;
 
     dsc = arg;
-    assert(dsc != NULL && dsc->access_cb != NULL);
+    BLE_HS_DBG_ASSERT(dsc != NULL && dsc->access_cb != NULL);
 
     gatt_op = ble_gatts_dsc_op(att_op);
     gatt_ctxt.dsc_access.dsc = dsc;
@@ -621,7 +620,7 @@ ble_gatts_clt_cfg_access_locked(struct ble_hs_conn *conn, uint16_t attr_handle,
         break;
 
     default:
-        assert(0);
+        BLE_HS_DBG_ASSERT(0);
         return BLE_ATT_ERR_UNLIKELY;
     }
 
@@ -718,7 +717,7 @@ ble_gatts_register_chr(const struct ble_gatt_chr_def *chr,
     if (rc != 0) {
         return rc;
     }
-    assert(val_handle == def_handle + 1);
+    BLE_HS_DBG_ASSERT(val_handle == def_handle + 1);
 
     if (register_cb != NULL) {
         register_ctxt.chr_reg.def_handle = def_handle;
@@ -732,7 +731,7 @@ ble_gatts_register_chr(const struct ble_gatt_chr_def *chr,
         if (rc != 0) {
             return rc;
         }
-        assert(dsc_handle == def_handle + 2);
+        BLE_HS_DBG_ASSERT(dsc_handle == def_handle + 2);
     }
 
     /* Register each descriptor. */
@@ -814,7 +813,7 @@ ble_gatts_register_svc(const struct ble_gatt_svc_def *svc,
     }
 
     rc = ble_gatts_svc_type_to_uuid(svc->type, &uuid16);
-    assert(rc == 0);
+    BLE_HS_DBG_ASSERT_EVAL(rc == 0);
 
     /* Register service definition attribute (cast away const on callback
      * arg).
@@ -835,7 +834,7 @@ ble_gatts_register_svc(const struct ble_gatt_svc_def *svc,
     if (svc->includes != NULL) {
         for (i = 0; svc->includes[i] != NULL; i++) {
             idx = ble_gatts_find_svc(svc->includes[i]);
-            assert(idx != -1);
+            BLE_HS_DBG_ASSERT_EVAL(idx != -1);
 
             rc = ble_gatts_register_inc(ble_gatts_svc_entries + idx);
             if (rc != 0) {
@@ -950,7 +949,7 @@ ble_gatts_conn_deinit(struct ble_gatts_conn *gatts_conn)
 
     if (gatts_conn->clt_cfgs != NULL) {
         rc = os_memblock_put(&ble_gatts_clt_cfg_pool, gatts_conn->clt_cfgs);
-        assert(rc == 0);
+        BLE_HS_DBG_ASSERT_EVAL(rc == 0);
 
         gatts_conn->clt_cfgs = NULL;
     }
@@ -980,12 +979,12 @@ ble_gatts_clt_cfg_init(void)
     int rc;
 
     rc = ble_uuid_16_to_128(BLE_ATT_UUID_CHARACTERISTIC, uuid128);
-    assert(rc == 0);
+    BLE_HS_DBG_ASSERT_EVAL(rc == 0);
 
     /* Count the number of client-configurable characteristics. */
     ble_gatts_num_cfgable_chrs = 0;
     ha = NULL;
-    while (ble_att_svr_find_by_uuid(uuid128, &ha) == 0) {
+    while ((ha = ble_att_svr_find_by_uuid(ha, uuid128)) != NULL) {
         chr = ha->ha_cb_arg;
         if (ble_gatts_chr_clt_cfg_allowed(chr) != 0) {
             ble_gatts_num_cfgable_chrs++;
@@ -1019,11 +1018,11 @@ ble_gatts_clt_cfg_init(void)
     /* Fill the cache. */
     idx = 0;
     ha = NULL;
-    while (ble_att_svr_find_by_uuid(uuid128, &ha) == 0) {
+    while ((ha = ble_att_svr_find_by_uuid(ha, uuid128)) != NULL) {
         chr = ha->ha_cb_arg;
         allowed_flags = ble_gatts_chr_clt_cfg_allowed(chr);
         if (allowed_flags != 0) {
-            assert(idx < ble_gatts_num_cfgable_chrs);
+            BLE_HS_DBG_ASSERT_EVAL(idx < ble_gatts_num_cfgable_chrs);
 
             ble_gatts_clt_cfgs[idx].chr_def_handle = ha->ha_handle_id;
             ble_gatts_clt_cfgs[idx].allowed = allowed_flags;
@@ -1133,9 +1132,9 @@ ble_gatts_chr_updated(uint16_t chr_def_handle)
          conn != NULL;
          conn = SLIST_NEXT(conn, bhc_next)) {
 
-        assert(conn->bhc_gatt_svr.num_clt_cfgs > idx);
+        BLE_HS_DBG_ASSERT_EVAL(conn->bhc_gatt_svr.num_clt_cfgs > idx);
         clt_cfg = conn->bhc_gatt_svr.clt_cfgs + idx;
-        assert(clt_cfg->chr_def_handle == chr_def_handle);
+        BLE_HS_DBG_ASSERT_EVAL(clt_cfg->chr_def_handle == chr_def_handle);
 
         if (clt_cfg->flags &
             (BLE_GATTS_CLT_CFG_F_NOTIFY | BLE_GATTS_CLT_CFG_F_INDICATE)) {

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2fef21d6/net/nimble/host/src/ble_hci_sched.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_hci_sched.c b/net/nimble/host/src/ble_hci_sched.c
index 2178eea..8b2f51a 100644
--- a/net/nimble/host/src/ble_hci_sched.c
+++ b/net/nimble/host/src/ble_hci_sched.c
@@ -19,7 +19,6 @@
 
 #include <stdlib.h>
 #include <string.h>
-#include <assert.h>
 #include "os/queue.h"
 #include "os/os_mempool.h"
 #include "ble_hs_priv.h"
@@ -52,12 +51,11 @@ ble_hci_sched_lock(void)
     int rc;
 
     owner = ble_hci_sched_mutex.mu_owner;
-    if (owner != NULL) {
-        assert(owner != os_sched_get_current_task());
-    }
+    BLE_HS_DBG_ASSERT_EVAL(owner == NULL ||
+                           owner != os_sched_get_current_task());
 
     rc = os_mutex_pend(&ble_hci_sched_mutex, 0xffffffff);
-    assert(rc == 0 || rc == OS_NOT_STARTED);
+    BLE_HS_DBG_ASSERT_EVAL(rc == 0 || rc == OS_NOT_STARTED);
 }
 
 static void
@@ -66,7 +64,7 @@ ble_hci_sched_unlock(void)
     int rc;
 
     rc = os_mutex_release(&ble_hci_sched_mutex);
-    assert(rc == 0 || rc == OS_NOT_STARTED);
+    BLE_HS_DBG_ASSERT_EVAL(rc == 0 || rc == OS_NOT_STARTED);
 }
 
 int
@@ -103,7 +101,7 @@ ble_hci_sched_entry_free(struct ble_hci_sched_entry *entry)
     int rc;
 
     rc = os_memblock_put(&ble_hci_sched_entry_pool, entry);
-    assert(rc == 0);
+    BLE_HS_DBG_ASSERT_EVAL(rc == 0);
 }
 
 /**
@@ -117,14 +115,14 @@ ble_hci_sched_entry_remove(struct ble_hci_sched_entry *entry,
                            struct ble_hci_sched_entry *prev)
 {
     if (os_started()) {
-        assert(ble_hci_sched_locked_by_cur_task());
+        BLE_HS_DBG_ASSERT(ble_hci_sched_locked_by_cur_task());
     }
 
     if (prev == NULL) {
-        assert(STAILQ_FIRST(&ble_hci_sched_list) == entry);
+        BLE_HS_DBG_ASSERT(STAILQ_FIRST(&ble_hci_sched_list) == entry);
         STAILQ_REMOVE_HEAD(&ble_hci_sched_list, next);
     } else {
-        assert(STAILQ_NEXT(prev, next) == prev);
+        BLE_HS_DBG_ASSERT(STAILQ_NEXT(prev, next) == prev);
         STAILQ_NEXT(prev, next) = STAILQ_NEXT(prev, next);
     }
 }
@@ -306,7 +304,7 @@ ble_hci_sched_process_next(void)
     struct ble_hci_sched_entry *entry;
     int rc;
 
-    assert(ble_hci_sched_cur_entry == NULL);
+    BLE_HS_DBG_ASSERT(ble_hci_sched_cur_entry == NULL);
 
     ble_hci_sched_lock();
 
@@ -400,7 +398,7 @@ void
 ble_hci_sched_set_ack_cb(ble_hci_sched_ack_fn *cb, void *arg)
 {
     /* Don't allow the current callback to be replaced with another. */
-    assert(ble_hci_sched_ack_cb == NULL || cb == NULL);
+    BLE_HS_DBG_ASSERT(ble_hci_sched_ack_cb == NULL || cb == NULL);
 
     ble_hci_sched_ack_cb = cb;
     ble_hci_sched_ack_arg = arg;

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2fef21d6/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 1299fb1..d646962 100644
--- a/net/nimble/host/src/ble_hs.c
+++ b/net/nimble/host/src/ble_hs.c
@@ -145,7 +145,7 @@ ble_hs_task_handler(void *arg)
             break;
 
         default:
-            assert(0);
+            BLE_HS_DBG_ASSERT(0);
             break;
         }
     }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2fef21d6/net/nimble/host/src/ble_hs_adv.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_hs_adv.c b/net/nimble/host/src/ble_hs_adv.c
index 29a8e1e..faf63b0 100644
--- a/net/nimble/host/src/ble_hs_adv.c
+++ b/net/nimble/host/src/ble_hs_adv.c
@@ -17,7 +17,6 @@
  * under the License.
  */
 
-#include <assert.h>
 #include <string.h>
 #include <errno.h>
 #include "nimble/ble.h"
@@ -49,7 +48,7 @@ ble_hs_adv_set_flat(uint8_t type, int data_len, void *data,
 
     int rc;
 
-    assert(data_len > 0);
+    BLE_HS_DBG_ASSERT(data_len > 0);
 
     rc = ble_hs_adv_set_hdr(type, data_len, max_len, dst, dst_len);
     if (rc != 0) {

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2fef21d6/net/nimble/host/src/ble_hs_conn.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_hs_conn.c b/net/nimble/host/src/ble_hs_conn.c
index aa1c6da..4d04a24 100644
--- a/net/nimble/host/src/ble_hs_conn.c
+++ b/net/nimble/host/src/ble_hs_conn.c
@@ -17,7 +17,6 @@
  * under the License.
  */
 
-#include <assert.h>
 #include <string.h>
 #include <errno.h>
 #include "os/os.h"
@@ -39,11 +38,11 @@ ble_hs_conn_lock(void)
 
     owner = ble_hs_conn_mutex.mu_owner;
     if (owner != NULL) {
-        assert(owner != os_sched_get_current_task());
+        BLE_HS_DBG_ASSERT_EVAL(owner != os_sched_get_current_task());
     }
 
     rc = os_mutex_pend(&ble_hs_conn_mutex, 0xffffffff);
-    assert(rc == 0 || rc == OS_NOT_STARTED);
+    BLE_HS_DBG_ASSERT_EVAL(rc == 0 || rc == OS_NOT_STARTED);
 }
 
 void
@@ -52,7 +51,7 @@ ble_hs_conn_unlock(void)
     int rc;
 
     rc = os_mutex_release(&ble_hs_conn_mutex);
-    assert(rc == 0 || rc == OS_NOT_STARTED);
+    BLE_HS_DBG_ASSERT_EVAL(rc == 0 || rc == OS_NOT_STARTED);
 }
 
 int
@@ -241,7 +240,7 @@ ble_hs_conn_free(struct ble_hs_conn *conn)
     }
 
     rc = os_memblock_put(&ble_hs_conn_pool, conn);
-    assert(rc == 0);
+    BLE_HS_DBG_ASSERT_EVAL(rc == 0);
 
     STATS_INC(ble_hs_stats, conn_delete);
 }
@@ -258,7 +257,7 @@ ble_hs_conn_insert(struct ble_hs_conn *conn)
 
     ble_hs_conn_lock();
 
-    assert(ble_hs_conn_find(conn->bhc_handle) == NULL);
+    BLE_HS_DBG_ASSERT_EVAL(ble_hs_conn_find(conn->bhc_handle) == NULL);
     SLIST_INSERT_HEAD(&ble_hs_conns, conn, bhc_next);
 
     ble_hs_conn_unlock();

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2fef21d6/net/nimble/host/src/ble_hs_endian.h
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_hs_endian.h b/net/nimble/host/src/ble_hs_endian.h
new file mode 100644
index 0000000..c2342ff
--- /dev/null
+++ b/net/nimble/host/src/ble_hs_endian.h
@@ -0,0 +1,57 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef H_BLE_HS_ENDIAN_
+#define H_BLE_HS_ENDIAN_
+
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+
+#define TOFROMLE16(x)   ((uint16_t) (x))
+#define TOFROMLE32(x)   ((uint32_t) (x))
+#define TOFROMLE64(x)   ((uint64_t) (x))
+
+#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
+
+#define TOFROMLE16(x)   ((uint16_t)                                 \
+                         ((((x) & 0xff00) >> 8) |                   \
+                          (((x) & 0x00ff) << 8)))
+
+#define TOFROMLE32(x)  ((uint32_t)                                  \
+                         ((((x) & 0xff000000) >> 24) |              \
+                          (((x) & 0x00ff0000) >>  8) |              \
+                          (((x) & 0x0000ff00) <<  8) |              \
+                          (((x) & 0x000000ff) << 24)))
+
+#define TOFROMLE64(x)  ((uint64_t)                                  \
+                         ((((x) & 0xff00000000000000ull) >> 56) |   \
+                          (((x) & 0x00ff000000000000ull) >> 40) |   \
+                          (((x) & 0x0000ff0000000000ull) >> 24) |   \
+                          (((x) & 0x000000ff00000000ull) >>  8) |   \
+                          (((x) & 0x00000000ff000000ull) <<  8) |   \
+                          (((x) & 0x0000000000ff0000ull) << 24) |   \
+                          (((x) & 0x000000000000ff00ull) << 40) |   \
+                          (((x) & 0x00000000000000ffull) << 56)))
+
+#else
+
+#error Unsupported endianness.
+
+#endif
+
+#endif

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2fef21d6/net/nimble/host/src/ble_hs_misc.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_hs_misc.c b/net/nimble/host/src/ble_hs_misc.c
index 5c3e8f0..a02e456 100644
--- a/net/nimble/host/src/ble_hs_misc.c
+++ b/net/nimble/host/src/ble_hs_misc.c
@@ -71,11 +71,11 @@ void
 ble_hs_misc_assert_no_locks(void)
 {
     if (os_started()) {
-        assert(!ble_hs_conn_locked_by_cur_task());
-        assert(!ble_gattc_locked_by_cur_task());
-        assert(!ble_gap_locked_by_cur_task());
-        assert(!ble_hci_sched_locked_by_cur_task());
-        assert(!ble_l2cap_sm_locked_by_cur_task());
+        assert(!ble_hs_conn_locked_by_cur_task()    &&
+               !ble_gattc_locked_by_cur_task()      &&
+               !ble_gap_locked_by_cur_task()        &&
+               !ble_hci_sched_locked_by_cur_task()  &&
+               !ble_l2cap_sm_locked_by_cur_task());
     }
 }
 
@@ -157,7 +157,7 @@ ble_hs_misc_conn_chan_find_reqd(uint16_t conn_handle, uint16_t cid,
     int rc;
 
     rc = ble_hs_misc_conn_chan_find(conn_handle, cid, &conn, &chan);
-    assert(conn == NULL || chan != NULL);
+    BLE_HS_DBG_ASSERT(conn == NULL || chan != NULL);
 
     if (out_conn != NULL) {
         *out_conn = conn;

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2fef21d6/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 2e5a664..9ecffe2 100644
--- a/net/nimble/host/src/ble_hs_priv.h
+++ b/net/nimble/host/src/ble_hs_priv.h
@@ -20,11 +20,8 @@
 #ifndef H_BLE_HS_PRIV_
 #define H_BLE_HS_PRIV_
 
+#include <assert.h>
 #include <inttypes.h>
-#include "stats/stats.h"
-#include "log/log.h"
-#include "nimble/nimble_opt.h"
-#include "host/ble_hs.h"
 #include "ble_att_cmd.h"
 #include "ble_att_priv.h"
 #include "ble_fsm_priv.h"
@@ -33,14 +30,19 @@
 #include "ble_hci_sched.h"
 #include "ble_hs_adv_priv.h"
 #include "ble_hs_conn.h"
+#include "ble_hs_endian.h"
 #include "ble_hs_startup.h"
 #include "ble_l2cap_priv.h"
 #include "ble_l2cap_sig.h"
 #include "ble_l2cap_sm.h"
-struct os_mbuf;
-struct os_mempool;
+#include "host/ble_hs.h"
+#include "log/log.h"
+#include "nimble/nimble_opt.h"
+#include "stats/stats.h"
 struct ble_hs_conn;
 struct ble_l2cap_chan;
+struct os_mbuf;
+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)
@@ -108,4 +110,16 @@ int ble_hs_misc_pullup_base(struct os_mbuf **om, int base_len);
                (addr)[0], (addr)[1], (addr)[2],         \
                (addr)[3], (addr)[4], (addr)[5])
 
+#if BLE_HS_DEBUG
+#define BLE_HS_DBG_ASSERT(x) assert(x)
+#else
+#define BLE_HS_DBG_ASSERT(x)
+#endif
+
+#if BLE_HS_DEBUG
+#define BLE_HS_DBG_ASSERT_EVAL(x) assert(x)
+#else
+#define BLE_HS_DBG_ASSERT_EVAL(x) ((void)(x))
+#endif
+
 #endif

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2fef21d6/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 6b505dc..c2d27f6 100644
--- a/net/nimble/host/src/ble_hs_startup.c
+++ b/net/nimble/host/src/ble_hs_startup.c
@@ -19,7 +19,6 @@
 
 #include <stddef.h>
 #include <string.h>
-#include <assert.h>
 #include "host/host_hci.h"
 #include "host/ble_hs.h"
 #include "ble_hs_priv.h"
@@ -73,7 +72,7 @@ ble_hs_startup_enqueue_tx(void)
     }
 
     tx_fn = ble_hs_startup_dispatch[ble_hs_startup_state];
-    assert(tx_fn != NULL);
+    BLE_HS_DBG_ASSERT(tx_fn != NULL);
 
     rc = ble_hci_sched_enqueue(tx_fn, NULL, NULL);
     if (rc != 0) {
@@ -87,7 +86,7 @@ ble_hs_startup_enqueue_tx(void)
 static void
 ble_hs_startup_gen_ack(struct ble_hci_ack *ack, void *arg)
 {
-    assert(ble_hs_startup_state < BLE_HS_STARTUP_STATE_MAX);
+    BLE_HS_DBG_ASSERT(ble_hs_startup_state < BLE_HS_STARTUP_STATE_MAX);
 
     if (ack->bha_status != 0) {
         ble_hs_startup_failure(ack->bha_status);
@@ -101,7 +100,8 @@ ble_hs_startup_gen_ack(struct ble_hci_ack *ack, void *arg)
 static void
 ble_hs_startup_le_read_sup_f_ack(struct ble_hci_ack *ack, void *arg)
 {
-    assert(ble_hs_startup_state == BLE_HS_STARTUP_STATE_LE_READ_SUP_F);
+    BLE_HS_DBG_ASSERT(ble_hs_startup_state ==
+                      BLE_HS_STARTUP_STATE_LE_READ_SUP_F);
 
     if (ack->bha_status != 0) {
         ble_hs_startup_failure(ack->bha_status);
@@ -121,7 +121,8 @@ ble_hs_startup_le_read_sup_f_tx(void *arg)
 {
     int rc;
 
-    assert(ble_hs_startup_state == BLE_HS_STARTUP_STATE_LE_READ_SUP_F);
+    BLE_HS_DBG_ASSERT(ble_hs_startup_state ==
+                      BLE_HS_STARTUP_STATE_LE_READ_SUP_F);
 
     ble_hci_sched_set_ack_cb(ble_hs_startup_le_read_sup_f_ack, NULL);
     rc = host_hci_cmd_le_read_loc_supp_feat();
@@ -139,7 +140,8 @@ ble_hs_startup_le_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_SZ);
+    BLE_HS_DBG_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);
@@ -169,7 +171,8 @@ ble_hs_startup_le_read_buf_sz_tx(void *arg)
 {
     int rc;
 
-    assert(ble_hs_startup_state == BLE_HS_STARTUP_STATE_LE_READ_BUF_SZ);
+    BLE_HS_DBG_ASSERT(ble_hs_startup_state ==
+                      BLE_HS_STARTUP_STATE_LE_READ_BUF_SZ);
 
     ble_hci_sched_set_ack_cb(ble_hs_startup_le_read_buf_size_ack, NULL);
     rc = host_hci_cmd_le_read_buffer_size();
@@ -185,7 +188,8 @@ ble_hs_startup_le_set_evmask_tx(void *arg)
 {
     int rc;
 
-    assert(ble_hs_startup_state == BLE_HS_STARTUP_STATE_LE_SET_EVMASK);
+    BLE_HS_DBG_ASSERT(ble_hs_startup_state ==
+                      BLE_HS_STARTUP_STATE_LE_SET_EVMASK);
 
     ble_hci_sched_set_ack_cb(ble_hs_startup_gen_ack, NULL);
     rc = host_hci_cmd_le_set_event_mask(0x000000000000001f);
@@ -201,7 +205,8 @@ ble_hs_startup_set_evmask_tx(void *arg)
 {
     int rc;
 
-    assert(ble_hs_startup_state == BLE_HS_STARTUP_STATE_SET_EVMASK);
+    BLE_HS_DBG_ASSERT(ble_hs_startup_state ==
+                      BLE_HS_STARTUP_STATE_SET_EVMASK);
 
     ble_hci_sched_set_ack_cb(ble_hs_startup_gen_ack, NULL);
     rc = host_hci_cmd_set_event_mask(0x20001fffffffffff);
@@ -217,7 +222,8 @@ ble_hs_startup_reset_tx(void *arg)
 {
     int rc;
 
-    assert(ble_hs_startup_state == BLE_HS_STARTUP_STATE_RESET);
+    BLE_HS_DBG_ASSERT(ble_hs_startup_state ==
+                      BLE_HS_STARTUP_STATE_RESET);
 
     ble_hci_sched_set_ack_cb(ble_hs_startup_gen_ack, NULL);
     rc = host_hci_cmd_reset();

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2fef21d6/net/nimble/host/src/ble_l2cap.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_l2cap.c b/net/nimble/host/src/ble_l2cap.c
index 96aca5c..c7a29af 100644
--- a/net/nimble/host/src/ble_l2cap.c
+++ b/net/nimble/host/src/ble_l2cap.c
@@ -19,7 +19,6 @@
 
 #include <string.h>
 #include <errno.h>
-#include <assert.h>
 #include "os/os.h"
 #include "nimble/ble.h"
 #include "nimble/hci_common.h"
@@ -80,7 +79,7 @@ ble_l2cap_chan_free(struct ble_l2cap_chan *chan)
     }
 
     rc = os_memblock_put(&ble_l2cap_chan_pool, chan);
-    assert(rc == 0);
+    BLE_HS_DBG_ASSERT_EVAL(rc == 0);
 
     STATS_INC(ble_l2cap_stats, chan_delete);
 }
@@ -105,7 +104,7 @@ ble_l2cap_chan_mtu(struct ble_l2cap_chan *chan)
         mtu = min(chan->blc_my_mtu, chan->blc_peer_mtu);
     }
 
-    assert(mtu >= chan->blc_default_mtu);
+    BLE_HS_DBG_ASSERT(mtu >= chan->blc_default_mtu);
 
     return mtu;
 }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2fef21d6/net/nimble/host/src/ble_l2cap_priv.h
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_l2cap_priv.h b/net/nimble/host/src/ble_l2cap_priv.h
index 6f6438a..9db54ea 100644
--- a/net/nimble/host/src/ble_l2cap_priv.h
+++ b/net/nimble/host/src/ble_l2cap_priv.h
@@ -47,12 +47,12 @@ struct ble_l2cap_sig_hdr {
     uint8_t op;
     uint8_t identifier;
     uint16_t length;
-};
+} __attribute__((packed));
 
 #define BLE_L2CAP_SIG_REJECT_MIN_SZ         2
 struct ble_l2cap_sig_reject {
     uint16_t reason;
-};
+} __attribute__((packed));
 
 #define BLE_L2CAP_SIG_UPDATE_REQ_SZ         8
 struct ble_l2cap_sig_update_req {
@@ -60,12 +60,12 @@ struct ble_l2cap_sig_update_req {
     uint16_t itvl_max;
     uint16_t slave_latency;
     uint16_t timeout_multiplier;
-};
+} __attribute__((packed));
 
 #define BLE_L2CAP_SIG_UPDATE_RSP_SZ         2
 struct ble_l2cap_sig_update_rsp {
     uint16_t result;
-};
+} __attribute__((packed));
 
 #define BLE_L2CAP_SIG_UPDATE_RSP_RESULT_ACCEPT  0x0000
 #define BLE_L2CAP_SIG_UPDATE_RSP_RESULT_REJECT  0x0001
@@ -117,30 +117,26 @@ int ble_l2cap_parse_hdr(struct os_mbuf *om, int off,
 struct os_mbuf *ble_l2cap_prepend_hdr(struct os_mbuf *om, uint16_t cid,
                                       uint16_t len);
 
-int ble_l2cap_sig_hdr_parse(void *payload, uint16_t len,
-                            struct ble_l2cap_sig_hdr *hdr);
-int ble_l2cap_sig_hdr_write(void *payload, uint16_t len,
-                            struct ble_l2cap_sig_hdr *hdr);
-int ble_l2cap_sig_reject_write(void *payload, uint16_t len,
-                               struct ble_l2cap_sig_hdr *hdr,
-                               struct ble_l2cap_sig_reject *cmd);
+int ble_l2cap_sig_init_cmd(uint8_t op, uint8_t id, uint8_t payload_len,
+                           struct os_mbuf **out_om, void **out_payload_buf);
+void ble_l2cap_sig_hdr_parse(void *payload, uint16_t len,
+                             struct ble_l2cap_sig_hdr *hdr);
+void ble_l2cap_sig_hdr_write(void *payload, uint16_t len,
+                             struct ble_l2cap_sig_hdr *hdr);
 int ble_l2cap_sig_reject_tx(uint16_t conn_handle, uint8_t id, uint16_t reason);
-int ble_l2cap_sig_update_req_parse(void *payload, int len,
-                                   struct ble_l2cap_sig_update_req *req);
-int ble_l2cap_sig_update_req_write(void *payload, int len,
-                                   struct ble_l2cap_sig_hdr *hdr,
-                                   struct ble_l2cap_sig_update_req *req);
+void ble_l2cap_sig_update_req_parse(void *payload, int len,
+                                    struct ble_l2cap_sig_update_req *req);
+void ble_l2cap_sig_update_req_write(void *payload, int len,
+                                    struct ble_l2cap_sig_update_req *src);
 int ble_l2cap_sig_update_req_tx(uint16_t conn_handle, uint8_t id,
                                 struct ble_l2cap_sig_update_req *req);
-int ble_l2cap_sig_update_rsp_parse(void *payload, int len,
-                                   struct ble_l2cap_sig_update_rsp *cmd);
-int ble_l2cap_sig_update_rsp_write(void *payload, int len,
-                                   struct ble_l2cap_sig_hdr *hdr,
-                                   struct ble_l2cap_sig_update_rsp *cmd);
+void ble_l2cap_sig_update_rsp_parse(void *payload, int len,
+                                    struct ble_l2cap_sig_update_rsp *cmd);
+void ble_l2cap_sig_update_rsp_write(void *payload, int len,
+                                    struct ble_l2cap_sig_update_rsp *src);
 int ble_l2cap_sig_update_rsp_tx(uint16_t conn_handle, uint8_t id,
                                 uint16_t result);
 
-
 struct ble_l2cap_chan *ble_l2cap_chan_alloc(void);
 void ble_l2cap_chan_free(struct ble_l2cap_chan *chan);
 

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2fef21d6/net/nimble/host/src/ble_l2cap_sig.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_l2cap_sig.c b/net/nimble/host/src/ble_l2cap_sig.c
index f0e3098..e4a20b5 100644
--- a/net/nimble/host/src/ble_l2cap_sig.c
+++ b/net/nimble/host/src/ble_l2cap_sig.c
@@ -19,7 +19,6 @@
 
 #include <string.h>
 #include <errno.h>
-#include <assert.h>
 #include "console/console.h"
 #include "nimble/ble.h"
 #include "ble_hs_priv.h"
@@ -224,7 +223,7 @@ ble_l2cap_sig_proc_free(struct ble_fsm_proc *proc)
 
     if (proc != NULL) {
         rc = os_memblock_put(&ble_l2cap_sig_proc_pool, proc);
-        assert(rc == 0);
+        BLE_HS_DBG_ASSERT_EVAL(rc == 0);
     }
 }
 
@@ -383,7 +382,7 @@ ble_l2cap_sig_rx_noop(uint16_t conn_handle,
 static void
 ble_l2cap_sig_update_call_cb(struct ble_l2cap_sig_proc *proc, int status)
 {
-    assert(!ble_hs_conn_locked_by_cur_task());
+    BLE_HS_DBG_ASSERT(!ble_hs_conn_locked_by_cur_task());
 
     if (status != 0) {
         STATS_INC(ble_l2cap_stats, update_fail);
@@ -434,8 +433,7 @@ ble_l2cap_sig_update_req_rx(uint16_t conn_handle,
         return BLE_HS_ENOTSUP;
     }
 
-    rc = ble_l2cap_sig_update_req_parse((*om)->om_data, (*om)->om_len, &req);
-    assert(rc == 0);
+    ble_l2cap_sig_update_req_parse((*om)->om_data, (*om)->om_len, &req);
 
     params.itvl_min = req.itvl_min;
     params.itvl_max = req.itvl_max;
@@ -492,8 +490,7 @@ ble_l2cap_sig_update_rsp_rx(uint16_t conn_handle,
         goto done;
     }
 
-    rc = ble_l2cap_sig_update_rsp_parse((*om)->om_data, (*om)->om_len, &rsp);
-    assert(rc == 0);
+    ble_l2cap_sig_update_rsp_parse((*om)->om_data, (*om)->om_len, &rsp);
 
     switch (rsp.result) {
     case BLE_L2CAP_SIG_UPDATE_RSP_RESULT_ACCEPT:
@@ -607,8 +604,7 @@ ble_l2cap_sig_rx(uint16_t conn_handle, struct os_mbuf **om)
         return rc;
     }
 
-    rc = ble_l2cap_sig_hdr_parse((*om)->om_data, (*om)->om_len, &hdr);
-    assert(rc == 0);
+    ble_l2cap_sig_hdr_parse((*om)->om_data, (*om)->om_len, &hdr);
 
     /* Strip L2CAP sig header from the front of the mbuf. */
     os_mbuf_adj(*om, BLE_L2CAP_SIG_HDR_SZ);
@@ -723,7 +719,7 @@ ble_l2cap_sig_heartbeat(void *unused)
     ticks = BLE_L2CAP_SIG_HEARTBEAT_PERIOD * OS_TICKS_PER_SEC / 1000;
     rc = os_callout_reset(&ble_l2cap_sig_heartbeat_timer.cf_c, ticks);
         
-    assert(rc == 0);
+    BLE_HS_DBG_ASSERT_EVAL(rc == 0);
 }
 
 /**

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2fef21d6/net/nimble/host/src/ble_l2cap_sig_cmd.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_l2cap_sig_cmd.c b/net/nimble/host/src/ble_l2cap_sig_cmd.c
index 34fc5cd..f5f6fa1 100644
--- a/net/nimble/host/src/ble_l2cap_sig_cmd.c
+++ b/net/nimble/host/src/ble_l2cap_sig_cmd.c
@@ -17,67 +17,37 @@
  * under the License.
  */
 
-#include <assert.h>
 #include "ble_hs_priv.h"
 
 int
-ble_l2cap_sig_hdr_parse(void *payload, uint16_t len,
-                        struct ble_l2cap_sig_hdr *hdr)
+ble_l2cap_sig_init_cmd(uint8_t op, uint8_t id, uint8_t payload_len,
+                       struct os_mbuf **out_om, void **out_payload_buf)
 {
-    uint8_t *u8ptr;
-
-    if (len < BLE_L2CAP_SIG_HDR_SZ) {
-        return BLE_HS_EBADDATA;
-    }
-
-    u8ptr = payload;
-    hdr->op = u8ptr[0];
-    hdr->identifier = u8ptr[1];
-    hdr->length = le16toh(u8ptr + 2);
-
-    return 0;
-}
+    struct ble_l2cap_sig_hdr hdr;
+    struct os_mbuf *txom;
+    void *v;
 
-int
-ble_l2cap_sig_hdr_write(void *payload, uint16_t len,
-                        struct ble_l2cap_sig_hdr *hdr)
-{
-    uint8_t *u8ptr;
+    *out_om = NULL;
+    *out_payload_buf = NULL;
 
-    if (len < BLE_L2CAP_SIG_HDR_SZ) {
-        return BLE_HS_EBADDATA;
+    txom = ble_hs_misc_pkthdr();
+    if (txom == NULL) {
+        return BLE_HS_ENOMEM;
     }
 
-    u8ptr = payload;
-    u8ptr[0] = hdr->op;
-    u8ptr[1] = hdr->identifier;
-    htole16(u8ptr + 2, hdr->length);
-
-    return 0;
-}
-
-int
-ble_l2cap_sig_reject_write(void *payload, uint16_t len,
-                           struct ble_l2cap_sig_hdr *hdr,
-                           struct ble_l2cap_sig_reject *cmd)
-{
-    uint8_t *u8ptr;
-    int rc;
-
-    u8ptr = payload;
-    rc = ble_l2cap_sig_hdr_write(u8ptr, len, hdr);
-    if (rc != 0) {
-        return rc;
+    v = os_mbuf_extend(txom, BLE_L2CAP_SIG_HDR_SZ + payload_len);
+    if (v == NULL) {
+        return BLE_HS_ENOMEM;
     }
 
-    u8ptr += BLE_L2CAP_SIG_HDR_SZ;
-    len -= BLE_L2CAP_SIG_HDR_SZ;
+    hdr.op = op;
+    hdr.identifier = id;
+    hdr.length = TOFROMLE16(payload_len);
 
-    if (len < BLE_L2CAP_SIG_REJECT_MIN_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
+    ble_l2cap_sig_hdr_write(v, BLE_L2CAP_SIG_HDR_SZ, &hdr);
 
-    htole16(u8ptr, cmd->reason);
+    *out_om = txom;
+    *out_payload_buf = (uint8_t *)v + BLE_L2CAP_SIG_HDR_SZ;
 
     return 0;
 }
@@ -108,209 +78,165 @@ ble_l2cap_sig_tx(uint16_t conn_handle, struct os_mbuf *txom)
     return rc;
 }
 
+static void
+ble_l2cap_sig_hdr_swap(struct ble_l2cap_sig_hdr *dst,
+                       struct ble_l2cap_sig_hdr *src)
+{
+    dst->op = src->op;
+    dst->identifier = src->identifier;
+    dst->length = TOFROMLE16(src->length);
+}
+
+void
+ble_l2cap_sig_hdr_parse(void *payload, uint16_t len,
+                        struct ble_l2cap_sig_hdr *dst)
+{
+    BLE_HS_DBG_ASSERT(len >= BLE_L2CAP_SIG_HDR_SZ);
+    ble_l2cap_sig_hdr_swap(dst, payload);
+}
+
+void
+ble_l2cap_sig_hdr_write(void *payload, uint16_t len,
+                        struct ble_l2cap_sig_hdr *src)
+{
+    BLE_HS_DBG_ASSERT(len >= BLE_L2CAP_SIG_HDR_SZ);
+    ble_l2cap_sig_hdr_swap(payload, src);
+}
+static void
+ble_l2cap_sig_reject_swap(struct ble_l2cap_sig_reject *dst,
+                          struct ble_l2cap_sig_reject *src)
+{
+    dst->reason = TOFROMLE16(src->reason);
+}
+
+static void
+ble_l2cap_sig_reject_write(void *payload, uint16_t len,
+                           struct ble_l2cap_sig_reject *src)
+{
+    BLE_HS_DBG_ASSERT(len >= BLE_L2CAP_SIG_REJECT_MIN_SZ);
+    ble_l2cap_sig_reject_swap(payload, src);
+}
+
 int
 ble_l2cap_sig_reject_tx(uint16_t conn_handle, uint8_t id, uint16_t reason)
 {
     /* XXX: Add support for optional data field. */
 
     struct ble_l2cap_sig_reject cmd;
-    struct ble_l2cap_sig_hdr hdr;
     struct os_mbuf *txom;
-    void *v;
+    void *payload_buf;
     int rc;
 
-    txom = ble_hs_misc_pkthdr();
-    if (txom == NULL) {
-        return BLE_HS_ENOMEM;
-    }
-
-    v = os_mbuf_extend(txom,
-                       BLE_L2CAP_SIG_HDR_SZ + BLE_L2CAP_SIG_REJECT_MIN_SZ);
-    if (v == NULL) {
-        return BLE_HS_ENOMEM;
-    }
+    rc = ble_l2cap_sig_init_cmd(BLE_L2CAP_SIG_OP_REJECT, id,
+                                BLE_L2CAP_SIG_REJECT_MIN_SZ, &txom,
+                                &payload_buf);
 
-    hdr.op = BLE_L2CAP_SIG_OP_REJECT;
-    hdr.identifier = id;
-    hdr.length = BLE_L2CAP_SIG_REJECT_MIN_SZ;
     cmd.reason = reason;
-
-    rc = ble_l2cap_sig_reject_write(
-        v, BLE_L2CAP_SIG_HDR_SZ + BLE_L2CAP_SIG_REJECT_MIN_SZ, &hdr, &cmd);
-    if (rc != 0) {
-        return rc;
-    }
+    ble_l2cap_sig_reject_write(payload_buf, BLE_L2CAP_SIG_REJECT_MIN_SZ, &cmd);
 
     STATS_INC(ble_l2cap_stats, sig_rx);
     rc = ble_l2cap_sig_tx(conn_handle, txom);
     return rc;
 }
 
-int
-ble_l2cap_sig_update_req_parse(void *payload, int len,
-                               struct ble_l2cap_sig_update_req *req)
+static void
+ble_l2cap_sig_update_req_swap(struct ble_l2cap_sig_update_req *dst,
+                              struct ble_l2cap_sig_update_req *src)
 {
-    uint8_t *u8ptr;
-
-    if (len < BLE_L2CAP_SIG_UPDATE_REQ_SZ) {
-        return BLE_HS_EBADDATA;
-    }
-
-    u8ptr = payload;
-
-    req->itvl_min = le16toh(u8ptr + 0);
-    req->itvl_max = le16toh(u8ptr + 2);
-    req->slave_latency = le16toh(u8ptr + 4);
-    req->timeout_multiplier = le16toh(u8ptr + 6);
-
-    return 0;
+    dst->itvl_min = TOFROMLE16(src->itvl_min);
+    dst->itvl_max = TOFROMLE16(src->itvl_max);
+    dst->slave_latency = TOFROMLE16(src->slave_latency);
+    dst->timeout_multiplier = TOFROMLE16(src->timeout_multiplier);
 }
 
-int
-ble_l2cap_sig_update_req_write(void *payload, int len,
-                               struct ble_l2cap_sig_hdr *hdr,
-                               struct ble_l2cap_sig_update_req *req)
+void
+ble_l2cap_sig_update_req_parse(void *payload, int len,
+                               struct ble_l2cap_sig_update_req *dst)
 {
-    uint8_t *u8ptr;
-    int rc;
-
-    u8ptr = payload;
-    rc = ble_l2cap_sig_hdr_write(u8ptr, len, hdr);
-    if (rc != 0) {
-        return rc;
-    }
-
-    u8ptr += BLE_L2CAP_SIG_HDR_SZ;
-    len -= BLE_L2CAP_SIG_HDR_SZ;
-
-    if (len < BLE_L2CAP_SIG_UPDATE_REQ_SZ) {
-        return BLE_HS_EINVAL;
-    }
-
-    htole16(u8ptr + 0, req->itvl_min);
-    htole16(u8ptr + 2, req->itvl_max);
-    htole16(u8ptr + 4, req->slave_latency);
-    htole16(u8ptr + 6, req->timeout_multiplier);
-
-    return 0;
+    BLE_HS_DBG_ASSERT(len >= BLE_L2CAP_SIG_UPDATE_REQ_SZ);
+    ble_l2cap_sig_update_req_swap(dst, payload);
 }
 
-int
-ble_l2cap_sig_update_rsp_parse(void *payload, int len,
-                               struct ble_l2cap_sig_update_rsp *cmd)
+void
+ble_l2cap_sig_update_req_write(void *payload, int len,
+                               struct ble_l2cap_sig_update_req *src)
 {
-    uint8_t *u8ptr;
-
-    u8ptr = payload;
-
-    if (len < BLE_L2CAP_SIG_UPDATE_RSP_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
-
-    cmd->result = le16toh(u8ptr);
-
-    return 0;
+    BLE_HS_DBG_ASSERT(len >= BLE_L2CAP_SIG_UPDATE_REQ_SZ);
+    ble_l2cap_sig_update_req_swap(payload, src);
 }
 
 int
-ble_l2cap_sig_update_rsp_write(void *payload, int len,
-                               struct ble_l2cap_sig_hdr *hdr,
-                               struct ble_l2cap_sig_update_rsp *cmd)
+ble_l2cap_sig_update_req_tx(uint16_t conn_handle, uint8_t id,
+                            struct ble_l2cap_sig_update_req *req)
 {
-    uint8_t *u8ptr;
+    struct os_mbuf *txom;
+    void *payload_buf;
     int rc;
 
-    u8ptr = payload;
-    rc = ble_l2cap_sig_hdr_write(u8ptr, len, hdr);
+    rc = ble_l2cap_sig_init_cmd(BLE_L2CAP_SIG_OP_UPDATE_REQ, id,
+                                BLE_L2CAP_SIG_UPDATE_REQ_SZ, &txom,
+                                &payload_buf);
     if (rc != 0) {
         return rc;
     }
 
-    u8ptr += BLE_L2CAP_SIG_HDR_SZ;
-    len -= BLE_L2CAP_SIG_HDR_SZ;
+    ble_l2cap_sig_update_req_write(payload_buf, BLE_L2CAP_SIG_UPDATE_REQ_SZ,
+                                   req);
 
-    if (len < BLE_L2CAP_SIG_UPDATE_RSP_SZ) {
-        return BLE_HS_EMSGSIZE;
+    rc = ble_l2cap_sig_tx(conn_handle, txom);
+    if (rc != 0) {
+        return rc;
     }
 
-    htole16(u8ptr, cmd->result);
-
     return 0;
 }
 
-int
-ble_l2cap_sig_update_req_tx(uint16_t conn_handle, uint8_t id,
-                            struct ble_l2cap_sig_update_req *req)
+static void
+ble_l2cap_sig_update_rsp_swap(struct ble_l2cap_sig_update_rsp *dst,
+                              struct ble_l2cap_sig_update_rsp *src)
 {
-    struct ble_l2cap_sig_hdr hdr;
-    struct os_mbuf *txom;
-    void *v;
-    int rc;
-
-    txom = ble_hs_misc_pkthdr();
-    if (txom == NULL) {
-        rc = BLE_HS_ENOMEM;
-        goto done;
-    }
-
-    v = os_mbuf_extend(txom,
-                       BLE_L2CAP_SIG_HDR_SZ + BLE_L2CAP_SIG_UPDATE_REQ_SZ);
-    if (v == NULL) {
-        rc = BLE_HS_ENOMEM;
-        goto done;
-    }
-
-    hdr.op = BLE_L2CAP_SIG_OP_UPDATE_REQ;
-    hdr.identifier = id;
-    hdr.length = BLE_L2CAP_SIG_UPDATE_REQ_SZ;
-
-    rc = ble_l2cap_sig_update_req_write(
-        v, BLE_L2CAP_SIG_HDR_SZ + BLE_L2CAP_SIG_UPDATE_REQ_SZ, &hdr, req);
-    assert(rc == 0);
+    dst->result = TOFROMLE16(src->result);
+}
 
-    rc = ble_l2cap_sig_tx(conn_handle, txom);
-    txom = NULL;
+void
+ble_l2cap_sig_update_rsp_parse(void *payload, int len,
+                               struct ble_l2cap_sig_update_rsp *dst)
+{
+    BLE_HS_DBG_ASSERT(len >= BLE_L2CAP_SIG_UPDATE_RSP_SZ);
+    ble_l2cap_sig_update_rsp_swap(dst, payload);
+}
 
-done:
-    os_mbuf_free_chain(txom);
-    return rc;
+void
+ble_l2cap_sig_update_rsp_write(void *payload, int len,
+                               struct ble_l2cap_sig_update_rsp *src)
+{
+    BLE_HS_DBG_ASSERT(len >= BLE_L2CAP_SIG_UPDATE_RSP_SZ);
+    ble_l2cap_sig_update_rsp_swap(payload, src);
 }
 
 int
 ble_l2cap_sig_update_rsp_tx(uint16_t conn_handle, uint8_t id, uint16_t result)
 {
     struct ble_l2cap_sig_update_rsp rsp;
-    struct ble_l2cap_sig_hdr hdr;
     struct os_mbuf *txom;
-    void *v;
+    void *payload_buf;
     int rc;
 
-    txom = ble_hs_misc_pkthdr();
-    if (txom == NULL) {
-        rc = BLE_HS_ENOMEM;
-        goto err;
-    }
-
-    v = os_mbuf_extend(txom,
-                       BLE_L2CAP_SIG_HDR_SZ + BLE_L2CAP_SIG_UPDATE_RSP_SZ);
-    if (v == NULL) {
-        rc = BLE_HS_ENOMEM;
-        goto err;
+    rc = ble_l2cap_sig_init_cmd(BLE_L2CAP_SIG_OP_UPDATE_RSP, id,
+                                BLE_L2CAP_SIG_UPDATE_RSP_SZ, &txom,
+                                &payload_buf);
+    if (rc != 0) {
+        return rc;
     }
 
-    hdr.op = BLE_L2CAP_SIG_OP_UPDATE_RSP;
-    hdr.identifier = id;
-    hdr.length = BLE_L2CAP_SIG_UPDATE_RSP_SZ;
     rsp.result = result;
-
-    rc = ble_l2cap_sig_update_rsp_write(
-        v, BLE_L2CAP_SIG_HDR_SZ + BLE_L2CAP_SIG_UPDATE_RSP_SZ, &hdr, &rsp);
-    assert(rc == 0);
+    ble_l2cap_sig_update_rsp_write(payload_buf, BLE_L2CAP_SIG_UPDATE_RSP_SZ,
+                                   &rsp);
 
     rc = ble_l2cap_sig_tx(conn_handle, txom);
-    return rc;
+    if (rc != 0) {
+        return rc;
+    }
 
-err:
-    os_mbuf_free_chain(txom);
-    return rc;
+    return 0;
 }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2fef21d6/net/nimble/host/src/ble_l2cap_sm.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_l2cap_sm.c b/net/nimble/host/src/ble_l2cap_sm.c
index 8c2cf6e..3c8b0f6 100644
--- a/net/nimble/host/src/ble_l2cap_sm.c
+++ b/net/nimble/host/src/ble_l2cap_sm.c
@@ -19,7 +19,6 @@
 
 #include <string.h>
 #include <errno.h>
-#include <assert.h>
 #include "console/console.h"
 #include "nimble/ble.h"
 #include "nimble/nimble_opt.h"
@@ -216,7 +215,7 @@ ble_l2cap_sm_gen_pair_rand(uint8_t *pair_rand)
 #endif
 
     /* XXX: Generate random value rather than zeros. */
-    memset(pair_rand, 0, sizeof ble_l2cap_sm_dbg_next_pair_rand);
+    memset(pair_rand, 0, 16);
 }
 
 static uint16_t
@@ -253,9 +252,9 @@ ble_l2cap_sm_proc_kick(struct ble_fsm_proc *proc)
     ble_l2cap_sm_kick_fn *kick_cb;
     int rc;
 
-    assert(proc->op < BLE_L2CAP_SM_PROC_OP_CNT);
+    BLE_HS_DBG_ASSERT(proc->op < BLE_L2CAP_SM_PROC_OP_CNT);
     kick_cb = ble_l2cap_sm_kick[proc->op];
-    assert(kick_cb != NULL);
+    BLE_HS_DBG_ASSERT(kick_cb != NULL);
 
     rc = kick_cb((struct ble_l2cap_sm_proc *)proc);
     return rc;
@@ -306,7 +305,7 @@ ble_l2cap_sm_proc_free(struct ble_fsm_proc *proc)
 
     if (proc != NULL) {
         rc = os_memblock_put(&ble_l2cap_sm_proc_pool, proc);
-        assert(rc == 0);
+        BLE_HS_DBG_ASSERT_EVAL(rc == 0);
     }
 }
 
@@ -540,7 +539,6 @@ ble_l2cap_sm_confirm_prepare_args(struct ble_l2cap_sm_proc *proc,
                                   uint8_t *ia, uint8_t *ra)
 {
     struct ble_hs_conn *conn;
-    int rc;
 
     ble_hs_conn_lock();
     conn = ble_hs_conn_find(proc->fsm_proc.conn_handle);
@@ -567,15 +565,13 @@ ble_l2cap_sm_confirm_prepare_args(struct ble_l2cap_sm_proc *proc,
 
     memcpy(k, proc->phase_1_2.tk, sizeof proc->phase_1_2.tk);
 
-    rc = ble_l2cap_sm_pair_cmd_write(
+    ble_l2cap_sm_pair_cmd_write(
         preq, BLE_L2CAP_SM_HDR_SZ + BLE_L2CAP_SM_PAIR_CMD_SZ, 1,
         &proc->phase_1_2.pair_req);
-    assert(rc == 0);
 
-    rc = ble_l2cap_sm_pair_cmd_write(
+    ble_l2cap_sm_pair_cmd_write(
         pres, BLE_L2CAP_SM_HDR_SZ + BLE_L2CAP_SM_PAIR_CMD_SZ, 0,
         &proc->phase_1_2.pair_rsp);
-    assert(rc == 0);
 
     return 0;
 }
@@ -754,7 +750,7 @@ ble_l2cap_sm_lt_key_req_reply_tx(void *arg)
 
     proc = arg;
 
-    assert(proc->fsm_proc.op == BLE_L2CAP_SM_PROC_OP_LTK_TXED);
+    BLE_HS_DBG_ASSERT(proc->fsm_proc.op == BLE_L2CAP_SM_PROC_OP_LTK_TXED);
 
     cmd.conn_handle = proc->fsm_proc.conn_handle;
     memcpy(cmd.long_term_key, proc->hci.key, 16);
@@ -812,7 +808,7 @@ ble_l2cap_sm_start_encrypt_tx(void *arg)
 
     proc = arg;
 
-    assert(proc->fsm_proc.op == BLE_L2CAP_SM_PROC_OP_START_ENCRYPT_TXED);
+    BLE_HS_DBG_ASSERT(proc->fsm_proc.op == BLE_L2CAP_SM_PROC_OP_START_ENCRYPT_TXED);
 
     cmd.connection_handle = proc->fsm_proc.conn_handle;
     cmd.encrypted_diversifier = ble_l2cap_sm_gen_ediv();
@@ -858,8 +854,7 @@ ble_l2cap_sm_rx_pair_req(uint16_t conn_handle, uint8_t op, struct os_mbuf **om)
         return rc;
     }
 
-    rc = ble_l2cap_sm_pair_cmd_parse((*om)->om_data, (*om)->om_len, &req);
-    assert(rc == 0);
+    ble_l2cap_sm_pair_cmd_parse((*om)->om_data, (*om)->om_len, &req);
 
     BLE_HS_LOG(DEBUG, "rxed sm pair req; io_cap=0x%02x oob_data_flag=%d "
                       "authreq=0x%02x max_enc_key_size=%d "
@@ -906,8 +901,7 @@ ble_l2cap_sm_rx_pair_rsp(uint16_t conn_handle, uint8_t op, struct os_mbuf **om)
         return rc;
     }
 
-    rc = ble_l2cap_sm_pair_cmd_parse((*om)->om_data, (*om)->om_len, &rsp);
-    assert(rc == 0);
+    ble_l2cap_sm_pair_cmd_parse((*om)->om_data, (*om)->om_len, &rsp);
 
     BLE_HS_LOG(DEBUG, "rxed sm pair rsp; io_cap=0x%02x oob_data_flag=%d "
                       "authreq=0x%02x max_enc_key_size=%d "
@@ -945,8 +939,7 @@ ble_l2cap_sm_rx_pair_confirm(uint16_t conn_handle, uint8_t op,
         return rc;
     }
 
-    rc = ble_l2cap_sm_pair_confirm_parse((*om)->om_data, (*om)->om_len, &cmd);
-    assert(rc == 0);
+    ble_l2cap_sm_pair_confirm_parse((*om)->om_data, (*om)->om_len, &cmd);
 
     BLE_HS_LOG(DEBUG, "rxed sm confirm cmd\n");
 
@@ -980,8 +973,7 @@ ble_l2cap_sm_rx_pair_random(uint16_t conn_handle, uint8_t op,
         return rc;
     }
 
-    rc = ble_l2cap_sm_pair_random_parse((*om)->om_data, (*om)->om_len, &cmd);
-    assert(rc == 0);
+    ble_l2cap_sm_pair_random_parse((*om)->om_data, (*om)->om_len, &cmd);
 
     BLE_HS_LOG(DEBUG, "rxed sm random cmd\n");
 
@@ -1015,8 +1007,7 @@ ble_l2cap_sm_rx_pair_fail(uint16_t conn_handle, uint8_t op,
         return rc;
     }
 
-    rc = ble_l2cap_sm_pair_fail_parse((*om)->om_data, (*om)->om_len, &cmd);
-    assert(rc == 0);
+    ble_l2cap_sm_pair_fail_parse((*om)->om_data, (*om)->om_len, &cmd);
 
     BLE_HS_LOG(DEBUG, "rxed sm fail cmd; reason=%d\n", cmd.reason);
 
@@ -1069,7 +1060,7 @@ ble_l2cap_sm_rx_lt_key_req_reply_ack(struct ble_hci_ack *ack, void *arg)
 
     proc = arg;
 
-    assert(proc->fsm_proc.op == BLE_L2CAP_SM_PROC_OP_LTK_TXED);
+    BLE_HS_DBG_ASSERT(proc->fsm_proc.op == BLE_L2CAP_SM_PROC_OP_LTK_TXED);
 
     /* Extract the procedure from the state machine while we mess with it. */
     ble_fsm_lock(&ble_l2cap_sm_fsm);
@@ -1114,7 +1105,7 @@ ble_l2cap_sm_rx_start_encrypt_ack(struct ble_hci_ack *ack, void *arg)
 
     proc = arg;
 
-    assert(proc->fsm_proc.op == BLE_L2CAP_SM_PROC_OP_START_ENCRYPT_TXED);
+    BLE_HS_DBG_ASSERT(proc->fsm_proc.op == BLE_L2CAP_SM_PROC_OP_START_ENCRYPT_TXED);
 
     /* Extract the procedure from the state machine while we mess with it. */
     ble_fsm_lock(&ble_l2cap_sm_fsm);

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2fef21d6/net/nimble/host/src/ble_l2cap_sm.h
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_l2cap_sm.h b/net/nimble/host/src/ble_l2cap_sm.h
index e7b0d0b..b1328aa 100644
--- a/net/nimble/host/src/ble_l2cap_sm.h
+++ b/net/nimble/host/src/ble_l2cap_sm.h
@@ -94,28 +94,28 @@ int ble_l2cap_sm_locked_by_cur_task(void);
 
 struct ble_l2cap_chan *ble_l2cap_sm_create_chan(void);
 
-int ble_l2cap_sm_pair_cmd_parse(void *payload, int len,
-                                struct ble_l2cap_sm_pair_cmd *cmd);
-int ble_l2cap_sm_pair_cmd_write(void *payload, int len, int is_req,
-                                struct ble_l2cap_sm_pair_cmd *cmd);
+void ble_l2cap_sm_pair_cmd_parse(void *payload, int len,
+                                 struct ble_l2cap_sm_pair_cmd *cmd);
+void ble_l2cap_sm_pair_cmd_write(void *payload, int len, int is_req,
+                                 struct ble_l2cap_sm_pair_cmd *cmd);
 int ble_l2cap_sm_pair_cmd_tx(uint16_t conn_handle, int is_req,
                              struct ble_l2cap_sm_pair_cmd *cmd);
-int ble_l2cap_sm_pair_confirm_parse(void *payload, int len,
-                                    struct ble_l2cap_sm_pair_confirm *cmd);
-int ble_l2cap_sm_pair_confirm_write(void *payload, int len,
-                                    struct ble_l2cap_sm_pair_confirm *cmd);
+void ble_l2cap_sm_pair_confirm_parse(void *payload, int len,
+                                     struct ble_l2cap_sm_pair_confirm *cmd);
+void ble_l2cap_sm_pair_confirm_write(void *payload, int len,
+                                     struct ble_l2cap_sm_pair_confirm *cmd);
 int ble_l2cap_sm_pair_confirm_tx(uint16_t conn_handle,
                                  struct ble_l2cap_sm_pair_confirm *cmd);
-int ble_l2cap_sm_pair_random_parse(void *payload, int len,
-                                   struct ble_l2cap_sm_pair_random *cmd);
-int ble_l2cap_sm_pair_random_write(void *payload, int len,
-                                   struct ble_l2cap_sm_pair_random *cmd);
+void ble_l2cap_sm_pair_random_parse(void *payload, int len,
+                                    struct ble_l2cap_sm_pair_random *cmd);
+void ble_l2cap_sm_pair_random_write(void *payload, int len,
+                                    struct ble_l2cap_sm_pair_random *cmd);
 int ble_l2cap_sm_pair_random_tx(uint16_t conn_handle,
                                 struct ble_l2cap_sm_pair_random *cmd);
-int ble_l2cap_sm_pair_fail_parse(void *payload, int len,
-                                 struct ble_l2cap_sm_pair_fail *cmd);
-int ble_l2cap_sm_pair_fail_write(void *payload, int len,
-                                 struct ble_l2cap_sm_pair_fail *cmd);
+void ble_l2cap_sm_pair_fail_parse(void *payload, int len,
+                                  struct ble_l2cap_sm_pair_fail *cmd);
+void ble_l2cap_sm_pair_fail_write(void *payload, int len,
+                                  struct ble_l2cap_sm_pair_fail *cmd);
 int ble_l2cap_sm_pair_fail_tx(uint16_t conn_handle,
                               struct ble_l2cap_sm_pair_fail *cmd);
 
@@ -144,17 +144,9 @@ int ble_l2cap_sm_init(void);
 
 #define ble_l2cap_sm_create_chan() NULL
 
-#define ble_l2cap_sm_pair_cmd_parse(payload, len, cmd) BLE_HS_ENOTSUP
-#define ble_l2cap_sm_pair_cmd_write(payload, len, is_req, cmd) BLE_HS_ENOTSUP
 #define ble_l2cap_sm_pair_cmd_tx(conn_handle, is_req, cmd) BLE_HS_ENOTSUP
-#define ble_l2cap_sm_pair_confirm_parse(payload, len, cmd) BLE_HS_ENOTSUP
-#define ble_l2cap_sm_pair_confirm_write(payload, len, cmd) BLE_HS_ENOTSUP
 #define ble_l2cap_sm_pair_confirm_tx(conn_handle, cmd) BLE_HS_ENOTSUP
-#define ble_l2cap_sm_pair_random_parse(payload, len, cmd) BLE_HS_ENOTSUP
-#define ble_l2cap_sm_pair_random_write(payload, len, cmd) BLE_HS_ENOTSUP
 #define ble_l2cap_sm_pair_random_tx(conn_handle, cmd) BLE_HS_ENOTSUP
-#define ble_l2cap_sm_pair_fail_parse(payload, len, cmd) BLE_HS_ENOTSUP
-#define ble_l2cap_sm_pair_fail_write(payload, len, cmd) BLE_HS_ENOTSUP
 #define ble_l2cap_sm_pair_fail_tx(conn_handle, cmd) BLE_HS_ENOTSUP
 
 #define ble_l2cap_sm_alg_s1(k, r1, r2, out) BLE_HS_ENOTSUP

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2fef21d6/net/nimble/host/src/ble_l2cap_sm_cmd.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_l2cap_sm_cmd.c b/net/nimble/host/src/ble_l2cap_sm_cmd.c
index 71b6fd6..a83ce72 100644
--- a/net/nimble/host/src/ble_l2cap_sm_cmd.c
+++ b/net/nimble/host/src/ble_l2cap_sm_cmd.c
@@ -19,7 +19,6 @@
 
 #include <string.h>
 #include <errno.h>
-#include <assert.h>
 #include "console/console.h"
 #include "nimble/ble.h"
 #include "nimble/nimble_opt.h"
@@ -75,40 +74,32 @@ err:
     return rc;
 }
 
-int
+void
 ble_l2cap_sm_pair_cmd_parse(void *payload, int len,
                             struct ble_l2cap_sm_pair_cmd *cmd)
 {
     uint8_t *u8ptr;
 
-    if (len < BLE_L2CAP_SM_PAIR_CMD_SZ) {
-        return BLE_HS_EBADDATA;
-    }
+    BLE_HS_DBG_ASSERT(len >= BLE_L2CAP_SM_PAIR_CMD_SZ);
 
     u8ptr = payload;
-
     cmd->io_cap = u8ptr[0];
     cmd->oob_data_flag = u8ptr[1];
     cmd->authreq = u8ptr[2];
     cmd->max_enc_key_size = u8ptr[3];
     cmd->init_key_dist = u8ptr[4];
     cmd->resp_key_dist = u8ptr[5];
-
-    return 0;
 }
 
-int
+void
 ble_l2cap_sm_pair_cmd_write(void *payload, int len, int is_req,
                             struct ble_l2cap_sm_pair_cmd *cmd)
 {
     uint8_t *u8ptr;
 
-    if (len < BLE_L2CAP_SM_HDR_SZ + BLE_L2CAP_SM_PAIR_CMD_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
+    BLE_HS_DBG_ASSERT(len >= BLE_L2CAP_SM_HDR_SZ + BLE_L2CAP_SM_PAIR_CMD_SZ);
 
     u8ptr = payload;
-
     u8ptr[0] = is_req ? BLE_L2CAP_SM_OP_PAIR_REQ : BLE_L2CAP_SM_OP_PAIR_RSP;
     u8ptr[1] = cmd->io_cap;
     u8ptr[2] = cmd->oob_data_flag;
@@ -116,8 +107,6 @@ ble_l2cap_sm_pair_cmd_write(void *payload, int len, int is_req,
     u8ptr[4] = cmd->max_enc_key_size;
     u8ptr[5] = cmd->init_key_dist;
     u8ptr[6] = cmd->resp_key_dist;
-
-    return 0;
 }
 
 int
@@ -133,8 +122,7 @@ ble_l2cap_sm_pair_cmd_tx(uint16_t conn_handle, int is_req,
         goto done;
     }
 
-    rc = ble_l2cap_sm_pair_cmd_write(txom->om_data, txom->om_len, is_req, cmd);
-    assert(rc == 0);
+    ble_l2cap_sm_pair_cmd_write(txom->om_data, txom->om_len, is_req, cmd);
 
     rc = ble_l2cap_sm_tx(conn_handle, txom);
     txom = NULL;
@@ -144,35 +132,27 @@ done:
     return rc;
 }
 
-int
+void
 ble_l2cap_sm_pair_confirm_parse(void *payload, int len,
                                 struct ble_l2cap_sm_pair_confirm *cmd)
 {
-    if (len < BLE_L2CAP_SM_PAIR_CONFIRM_SZ) {
-        return BLE_HS_EBADDATA;
-    }
-
+    BLE_HS_DBG_ASSERT(len >= BLE_L2CAP_SM_PAIR_CONFIRM_SZ);
     memcpy(cmd->value, payload, sizeof cmd->value);
-
-    return 0;
 }
 
-int
+void
 ble_l2cap_sm_pair_confirm_write(void *payload, int len,
                                 struct ble_l2cap_sm_pair_confirm *cmd)
 {
     uint8_t *u8ptr;
 
-    if (len < BLE_L2CAP_SM_HDR_SZ + BLE_L2CAP_SM_PAIR_CONFIRM_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
+    BLE_HS_DBG_ASSERT(len >=
+                      BLE_L2CAP_SM_HDR_SZ + BLE_L2CAP_SM_PAIR_CONFIRM_SZ);
 
     u8ptr = payload;
 
     u8ptr[0] = BLE_L2CAP_SM_OP_PAIR_CONFIRM;
     memcpy(u8ptr + BLE_L2CAP_SM_HDR_SZ, cmd->value, sizeof cmd->value);
-
-    return 0;
 }
 
 int
@@ -188,8 +168,7 @@ ble_l2cap_sm_pair_confirm_tx(uint16_t conn_handle,
         goto done;
     }
 
-    rc = ble_l2cap_sm_pair_confirm_write(txom->om_data, txom->om_len, cmd);
-    assert(rc == 0);
+    ble_l2cap_sm_pair_confirm_write(txom->om_data, txom->om_len, cmd);
 
     rc = ble_l2cap_sm_tx(conn_handle, txom);
     txom = NULL;
@@ -199,35 +178,27 @@ done:
     return rc;
 }
 
-int
+void
 ble_l2cap_sm_pair_random_parse(void *payload, int len,
                                struct ble_l2cap_sm_pair_random *cmd)
 {
-    if (len < BLE_L2CAP_SM_PAIR_RANDOM_SZ) {
-        return BLE_HS_EBADDATA;
-    }
-
+    BLE_HS_DBG_ASSERT(len >= BLE_L2CAP_SM_PAIR_RANDOM_SZ);
     memcpy(cmd->value, payload, sizeof cmd->value);
-
-    return 0;
 }
 
-int
+void
 ble_l2cap_sm_pair_random_write(void *payload, int len,
                                struct ble_l2cap_sm_pair_random *cmd)
 {
     uint8_t *u8ptr;
 
-    if (len < BLE_L2CAP_SM_HDR_SZ + BLE_L2CAP_SM_PAIR_RANDOM_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
+    BLE_HS_DBG_ASSERT(len >=
+                      BLE_L2CAP_SM_HDR_SZ + BLE_L2CAP_SM_PAIR_RANDOM_SZ);
 
     u8ptr = payload;
 
     u8ptr[0] = BLE_L2CAP_SM_OP_PAIR_RANDOM;
     memcpy(u8ptr + BLE_L2CAP_SM_HDR_SZ, cmd->value, sizeof cmd->value);
-
-    return 0;
 }
 
 int
@@ -243,8 +214,7 @@ ble_l2cap_sm_pair_random_tx(uint16_t conn_handle,
         goto done;
     }
 
-    rc = ble_l2cap_sm_pair_random_write(txom->om_data, txom->om_len, cmd);
-    assert(rc == 0);
+    ble_l2cap_sm_pair_random_write(txom->om_data, txom->om_len, cmd);
 
     rc = ble_l2cap_sm_tx(conn_handle, txom);
     txom = NULL;
@@ -254,39 +224,30 @@ done:
     return rc;
 }
 
-int
+void
 ble_l2cap_sm_pair_fail_parse(void *payload, int len,
                              struct ble_l2cap_sm_pair_fail *cmd)
 {
     uint8_t *u8ptr;
 
-    if (len < BLE_L2CAP_SM_PAIR_FAIL_SZ) {
-        return BLE_HS_EBADDATA;
-    }
+    BLE_HS_DBG_ASSERT(len >= BLE_L2CAP_SM_PAIR_FAIL_SZ);
 
     u8ptr = payload;
-
     cmd->reason = u8ptr[0];
-
-    return 0;
 }
 
-int
+void
 ble_l2cap_sm_pair_fail_write(void *payload, int len,
                              struct ble_l2cap_sm_pair_fail *cmd)
 {
     uint8_t *u8ptr;
 
-    if (len < BLE_L2CAP_SM_HDR_SZ + BLE_L2CAP_SM_PAIR_FAIL_SZ) {
-        return BLE_HS_EMSGSIZE;
-    }
+    BLE_HS_DBG_ASSERT(len >= BLE_L2CAP_SM_HDR_SZ + BLE_L2CAP_SM_PAIR_FAIL_SZ);
 
     u8ptr = payload;
 
     u8ptr[0] = BLE_L2CAP_SM_OP_PAIR_FAIL;
     u8ptr[1] = cmd->reason;
-
-    return 0;
 }
 
 int
@@ -302,8 +263,7 @@ ble_l2cap_sm_pair_fail_tx(uint16_t conn_handle,
         goto done;
     }
 
-    rc = ble_l2cap_sm_pair_fail_write(txom->om_data, txom->om_len, cmd);
-    assert(rc == 0);
+    ble_l2cap_sm_pair_fail_write(txom->om_data, txom->om_len, cmd);
 
     rc = ble_l2cap_sm_tx(conn_handle, txom);
     txom = NULL;

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2fef21d6/net/nimble/host/src/ble_uuid.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_uuid.c b/net/nimble/host/src/ble_uuid.c
index ead34da..ec01528 100644
--- a/net/nimble/host/src/ble_uuid.c
+++ b/net/nimble/host/src/ble_uuid.c
@@ -17,7 +17,6 @@
  * under the License.
  */
 
-#include <assert.h>
 #include <inttypes.h>
 #include <string.h>
 #include <errno.h>
@@ -122,7 +121,7 @@ ble_uuid_extract(struct os_mbuf *om, int off, void *uuid128)
     switch (remlen) {
     case 2:
         rc = os_mbuf_copydata(om, off, 2, &uuid16);
-        assert(rc == 0);
+        BLE_HS_DBG_ASSERT_EVAL(rc == 0);
 
         uuid16 = le16toh(&uuid16);
         rc = ble_uuid_16_to_128(uuid16, uuid128);
@@ -133,7 +132,7 @@ ble_uuid_extract(struct os_mbuf *om, int off, void *uuid128)
 
     case 16:
         rc = os_mbuf_copydata(om, off, 16, uuid128);
-        assert(rc == 0);
+        BLE_HS_DBG_ASSERT_EVAL(rc == 0);
         return 0;
 
     default:

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2fef21d6/net/nimble/host/src/host_dbg.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/host_dbg.c b/net/nimble/host/src/host_dbg.c
index 8bec9ad..a6794fb 100644
--- a/net/nimble/host/src/host_dbg.c
+++ b/net/nimble/host/src/host_dbg.c
@@ -355,6 +355,10 @@ host_hci_dbg_cmd_status_disp(uint8_t *evdata, uint8_t len)
 void
 host_hci_dbg_event_disp(uint8_t *evbuf)
 {
+#if LOG_LEVEL > LOG_LEVEL_DEBUG
+    return;
+#endif
+
     uint8_t *evdata;
     uint8_t evcode;
     uint8_t len;

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2fef21d6/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 47ef3ea..a329684 100644
--- a/net/nimble/host/src/host_hci.c
+++ b/net/nimble/host/src/host_hci.c
@@ -17,7 +17,6 @@
  * under the License.
  */
 #include <stdint.h>
-#include <assert.h>
 #include <string.h>
 #include <errno.h>
 #include <stdio.h>
@@ -141,7 +140,7 @@ host_hci_timer_set(void)
 
     rc = os_callout_reset(&host_hci_timer.cf_c,
                           HOST_HCI_TIMEOUT * OS_TICKS_PER_SEC / 1000);
-    assert(rc == 0);
+    BLE_HS_DBG_ASSERT_EVAL(rc == 0);
 }
 
 static void
@@ -155,7 +154,7 @@ host_hci_timer_exp(void *arg)
 {
     struct ble_hci_ack ack;
 
-    assert(host_hci_outstanding_opcode != 0);
+    BLE_HS_DBG_ASSERT(host_hci_outstanding_opcode != 0);
 
     ack.bha_opcode = host_hci_outstanding_opcode;
     ack.bha_status = BLE_HS_ETIMEOUT;
@@ -629,11 +628,11 @@ host_hci_os_event_proc(struct os_event *ev)
 
     /* Free the command buffer */
     err = os_memblock_put(&g_hci_cmd_pool, ev->ev_arg);
-    assert(err == OS_OK);
+    BLE_HS_DBG_ASSERT_EVAL(err == OS_OK);
 
     /* Free the event */
     err = os_memblock_put(&g_hci_os_event_pool, ev);
-    assert(err == OS_OK);
+    BLE_HS_DBG_ASSERT_EVAL(err == OS_OK);
 
     return rc;
 }
@@ -645,13 +644,13 @@ ble_hci_transport_ctlr_event_send(uint8_t *hci_ev)
     os_error_t err;
     struct os_event *ev;
 
-    assert(hci_ev != NULL);
+    BLE_HS_DBG_ASSERT(hci_ev != NULL);
 
     /* Get an event structure off the queue */
     ev = (struct os_event *)os_memblock_get(&g_hci_os_event_pool);
     if (!ev) {
         err = os_memblock_put(&g_hci_cmd_pool, hci_ev);
-        assert(err == OS_OK);
+        BLE_HS_DBG_ASSERT_EVAL(err == OS_OK);
         return -1;
     }
 
@@ -735,8 +734,8 @@ host_hci_data_rx(struct os_mbuf *om)
     os_mbuf_free_chain(om);
 
     if (rc == 0) {
-        assert(rx_cb != NULL);
-        assert(rx_buf != NULL);
+        BLE_HS_DBG_ASSERT(rx_cb != NULL);
+        BLE_HS_DBG_ASSERT(rx_buf != NULL);
         rc = rx_cb(handle, &rx_buf);
         os_mbuf_free_chain(rx_buf);
     } else if (rc == BLE_HS_EAGAIN) {
@@ -750,9 +749,9 @@ host_hci_data_rx(struct os_mbuf *om)
 uint16_t
 host_hci_handle_pb_bc_join(uint16_t handle, uint8_t pb, uint8_t bc)
 {
-    assert(handle <= 0x0fff);
-    assert(pb <= 0x03);
-    assert(bc <= 0x03);
+    BLE_HS_DBG_ASSERT(handle <= 0x0fff);
+    BLE_HS_DBG_ASSERT(pb <= 0x03);
+    BLE_HS_DBG_ASSERT(bc <= 0x03);
 
     return (handle  << 0)   |
            (pb      << 12)  |

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2fef21d6/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 52c26b5..a4a4b81 100644
--- a/net/nimble/host/src/host_hci_cmd.c
+++ b/net/nimble/host/src/host_hci_cmd.c
@@ -51,7 +51,7 @@ host_hci_cmd_send(uint8_t ogf, uint8_t ocf, uint8_t len, void *cmddata)
     uint16_t opcode;
 
     /* Don't allow multiple commands "in flight." */
-    assert(host_hci_outstanding_opcode == 0);
+    BLE_HS_DBG_ASSERT(host_hci_outstanding_opcode == 0);
 
     rc = -1;
     cmd = os_memblock_get(&g_hci_cmd_pool);
@@ -120,7 +120,7 @@ host_hci_cmd_le_set_adv_params(struct hci_adv_params *adv)
     uint16_t itvl;
     uint8_t cmd[BLE_HCI_SET_ADV_PARAM_LEN];
 
-    assert(adv != NULL);
+    BLE_HS_DBG_ASSERT(adv != NULL);
 
     /* Make sure parameters are valid */
     rc = -1;

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2fef21d6/net/nimble/host/src/test/ble_att_clt_test.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/test/ble_att_clt_test.c b/net/nimble/host/src/test/ble_att_clt_test.c
index 3d393dc..54ddb27 100644
--- a/net/nimble/host/src/test/ble_att_clt_test.c
+++ b/net/nimble/host/src/test/ble_att_clt_test.c
@@ -42,7 +42,6 @@ ble_att_clt_test_misc_verify_tx_write(uint16_t handle_id, void *value,
 {
     struct ble_att_write_req req;
     struct os_mbuf *om;
-    int rc;
 
     TEST_ASSERT_FATAL(ble_hs_test_util_prev_tx != NULL);
 
@@ -51,11 +50,10 @@ ble_att_clt_test_misc_verify_tx_write(uint16_t handle_id, void *value,
     TEST_ASSERT_FATAL(om != NULL);
 
     if (is_req) {
-        rc = ble_att_write_req_parse(om->om_data, om->om_len, &req);
+        ble_att_write_req_parse(om->om_data, om->om_len, &req);
     } else {
-        rc = ble_att_write_cmd_parse(om->om_data, om->om_len, &req);
+        ble_att_write_cmd_parse(om->om_data, om->om_len, &req);
     }
-    TEST_ASSERT_FATAL(rc == 0);
 
     TEST_ASSERT(req.bawq_handle == handle_id);
     TEST_ASSERT(om->om_len == BLE_ATT_WRITE_REQ_BASE_SZ + value_len);
@@ -128,8 +126,7 @@ TEST_CASE(ble_att_clt_test_rx_find_info)
     /* Receive response with attribute mapping. */
     off = 0;
     rsp.bafp_format = BLE_ATT_FIND_INFO_RSP_FORMAT_128BIT;
-    rc = ble_att_find_info_rsp_write(buf + off, sizeof buf - off, &rsp);
-    TEST_ASSERT(rc == 0);
+    ble_att_find_info_rsp_write(buf + off, sizeof buf - off, &rsp);
     off += BLE_ATT_FIND_INFO_RSP_BASE_SZ;
 
     htole16(buf + off, 1);
@@ -144,8 +141,7 @@ TEST_CASE(ble_att_clt_test_rx_find_info)
     /* Receive response with attribute mapping. */
     off = 0;
     rsp.bafp_format = BLE_ATT_FIND_INFO_RSP_FORMAT_16BIT;
-    rc = ble_att_find_info_rsp_write(buf + off, sizeof buf - off, &rsp);
-    TEST_ASSERT(rc == 0);
+    ble_att_find_info_rsp_write(buf + off, sizeof buf - off, &rsp);
     off += BLE_ATT_FIND_INFO_RSP_BASE_SZ;
 
     htole16(buf + off, 2);
@@ -160,8 +156,7 @@ TEST_CASE(ble_att_clt_test_rx_find_info)
     /* Receive response with attribute mappings. */
     off = 0;
     rsp.bafp_format = BLE_ATT_FIND_INFO_RSP_FORMAT_16BIT;
-    rc = ble_att_find_info_rsp_write(buf + off, sizeof buf - off, &rsp);
-    TEST_ASSERT(rc == 0);
+    ble_att_find_info_rsp_write(buf + off, sizeof buf - off, &rsp);
     off += BLE_ATT_FIND_INFO_RSP_BASE_SZ;
 
     htole16(buf + off, 3);
@@ -233,8 +228,7 @@ ble_att_clt_test_misc_prep_good(uint16_t handle, uint16_t offset,
     TEST_ASSERT_FATAL(om != NULL);
     TEST_ASSERT(om->om_len == BLE_ATT_PREP_WRITE_CMD_BASE_SZ + attr_data_len);
 
-    rc = ble_att_prep_write_req_parse(om->om_data, om->om_len, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_prep_write_req_parse(om->om_data, om->om_len, &req);
     TEST_ASSERT(req.bapc_handle == handle);
     TEST_ASSERT(req.bapc_offset == offset);
     for (i = 0; i < attr_data_len; i++) {
@@ -266,8 +260,7 @@ ble_att_clt_test_misc_exec_good(uint8_t flags)
     TEST_ASSERT_FATAL(om != NULL);
     TEST_ASSERT(om->om_len == BLE_ATT_EXEC_WRITE_REQ_SZ);
 
-    rc = ble_att_exec_write_req_parse(om->om_data, om->om_len, &req);
-    TEST_ASSERT(rc == 0);
+    ble_att_exec_write_req_parse(om->om_data, om->om_len, &req);
     TEST_ASSERT(req.baeq_flags == flags);
 }
 
@@ -407,8 +400,7 @@ TEST_CASE(ble_att_clt_test_tx_read_mult)
     TEST_ASSERT_FATAL(om != NULL);
     TEST_ASSERT(om->om_len == BLE_ATT_READ_MULT_REQ_BASE_SZ + 4);
 
-    rc = ble_att_read_mult_req_parse(om->om_data, om->om_len);
-    TEST_ASSERT(rc == 0);
+    ble_att_read_mult_req_parse(om->om_data, om->om_len);
     TEST_ASSERT(le16toh(om->om_data + BLE_ATT_READ_MULT_REQ_BASE_SZ) == 1);
     TEST_ASSERT(le16toh(om->om_data + BLE_ATT_READ_MULT_REQ_BASE_SZ + 2) == 2);
 
@@ -427,8 +419,7 @@ TEST_CASE(ble_att_clt_test_rx_read_mult)
     ble_att_clt_test_misc_init(&conn, &chan);
 
     /*** Basic success. */
-    rc = ble_att_read_mult_rsp_write(buf, sizeof buf);
-    TEST_ASSERT(rc == 0);
+    ble_att_read_mult_rsp_write(buf, sizeof buf);
     htole16(buf + BLE_ATT_READ_MULT_RSP_BASE_SZ + 0, 12);
 
     rc = ble_hs_test_util_l2cap_rx_payload_flat(
@@ -493,8 +484,7 @@ TEST_CASE(ble_att_clt_test_rx_prep_write)
     /*** Basic success. */
     rsp.bapc_handle = 0x1234;
     rsp.bapc_offset = 0;
-    rc = ble_att_prep_write_rsp_write(buf, sizeof buf, &rsp);
-    TEST_ASSERT(rc == 0);
+    ble_att_prep_write_rsp_write(buf, sizeof buf, &rsp);
     memset(buf + BLE_ATT_PREP_WRITE_CMD_BASE_SZ, 1, 5);
     rc = ble_hs_test_util_l2cap_rx_payload_flat(
         conn, chan, buf, BLE_ATT_PREP_WRITE_CMD_BASE_SZ + 5);
@@ -503,8 +493,7 @@ TEST_CASE(ble_att_clt_test_rx_prep_write)
     /*** 0-length write. */
     rsp.bapc_handle = 0x1234;
     rsp.bapc_offset = 0;
-    rc = ble_att_prep_write_rsp_write(buf, sizeof buf, &rsp);
-    TEST_ASSERT(rc == 0);
+    ble_att_prep_write_rsp_write(buf, sizeof buf, &rsp);
     rc = ble_hs_test_util_l2cap_rx_payload_flat(
         conn, chan, buf, BLE_ATT_PREP_WRITE_CMD_BASE_SZ);
     TEST_ASSERT(rc == 0);