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

[17/50] incubator-mynewt-core git commit: nimble/att: Use new helpers for sending Prepare Write Request

nimble/att: Use new helpers for sending Prepare Write Request

This constructs response directly on mbuf reducing number of memcopies.


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

Branch: refs/heads/master
Commit: d290cd7eb79540f1d9f14623861894e0dbd8ee9e
Parents: a9549fd
Author: Szymon Janc <sz...@codecoup.pl>
Authored: Fri Mar 24 15:34:39 2017 +0100
Committer: Szymon Janc <sz...@codecoup.pl>
Committed: Mon Apr 10 11:31:31 2017 +0200

----------------------------------------------------------------------
 net/nimble/host/src/ble_att_clt.c           | 29 ++++++++++--------------
 net/nimble/host/src/ble_att_cmd_priv.h      |  1 +
 net/nimble/host/src/ble_att_priv.h          |  5 ++--
 net/nimble/host/src/ble_gattc.c             | 15 ++++--------
 net/nimble/host/test/src/ble_att_clt_test.c |  9 ++------
 5 files changed, 22 insertions(+), 37 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/d290cd7e/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 114abea..141e6e7 100644
--- a/net/nimble/host/src/ble_att_clt.c
+++ b/net/nimble/host/src/ble_att_clt.c
@@ -872,52 +872,47 @@ ble_att_clt_rx_write(uint16_t conn_handle, struct os_mbuf **rxom)
  *****************************************************************************/
 
 int
-ble_att_clt_tx_prep_write(uint16_t conn_handle,
-                          const struct ble_att_prep_write_cmd *req,
-                          struct os_mbuf *txom)
+ble_att_clt_tx_prep_write(uint16_t conn_handle, uint16_t handle,
+                          uint16_t offset, struct os_mbuf *txom)
 {
 #if !NIMBLE_BLE_ATT_CLT_PREP_WRITE
     return BLE_HS_ENOTSUP;
 #endif
 
+    struct ble_att_prep_write_cmd *req;
+    struct os_mbuf *txom2;
     int rc;
 
-    if (req->bapc_handle == 0) {
+    if (handle == 0) {
         rc = BLE_HS_EINVAL;
         goto err;
     }
 
-    if (req->bapc_offset + OS_MBUF_PKTLEN(txom) > BLE_ATT_ATTR_MAX_LEN) {
+    if (offset + OS_MBUF_PKTLEN(txom) > BLE_ATT_ATTR_MAX_LEN) {
         rc = BLE_HS_EINVAL;
         goto err;
     }
 
     if (OS_MBUF_PKTLEN(txom) >
         ble_att_mtu(conn_handle) - BLE_ATT_PREP_WRITE_CMD_BASE_SZ) {
-
         rc = BLE_HS_EINVAL;
         goto err;
     }
 
-    txom = os_mbuf_prepend_pullup(txom, BLE_ATT_PREP_WRITE_CMD_BASE_SZ);
-    if (txom == NULL) {
+    req = ble_att_cmd_get(BLE_ATT_OP_PREP_WRITE_REQ, sizeof(*req), &txom2);
+    if (req == NULL) {
         rc = BLE_HS_ENOMEM;
         goto err;
     }
 
-    ble_att_prep_write_req_write(txom->om_data, BLE_ATT_PREP_WRITE_CMD_BASE_SZ,
-                                 req);
-
-    rc = ble_att_clt_tx_req(conn_handle, txom);
-    txom = NULL;
-    if (rc != 0) {
-        goto err;
-    }
+    req->bapc_handle = htole16(handle);
+    req->bapc_offset = htole16(offset);
+    os_mbuf_concat(txom2, txom);
 
     BLE_ATT_LOG_CMD(1, "prep write req", conn_handle,
                     ble_att_prep_write_cmd_log, req);
 
-    return 0;
+    return ble_att_tx(conn_handle, txom2);
 
 err:
     os_mbuf_free_chain(txom);

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/d290cd7e/net/nimble/host/src/ble_att_cmd_priv.h
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_att_cmd_priv.h b/net/nimble/host/src/ble_att_cmd_priv.h
index 491dc99..3e03cca 100644
--- a/net/nimble/host/src/ble_att_cmd_priv.h
+++ b/net/nimble/host/src/ble_att_cmd_priv.h
@@ -269,6 +269,7 @@ struct ble_att_write_req {
 struct ble_att_prep_write_cmd {
     uint16_t bapc_handle;
     uint16_t bapc_offset;
+    uint16_t bapc_value[0];
 } __attribute__((packed));
 
 /**

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/d290cd7e/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 b7def41..dd14be7 100644
--- a/net/nimble/host/src/ble_att_priv.h
+++ b/net/nimble/host/src/ble_att_priv.h
@@ -280,9 +280,8 @@ int ble_att_clt_tx_write_req(uint16_t conn_handle, uint16_t handle,
                              struct os_mbuf *txom);
 int ble_att_clt_tx_write_cmd(uint16_t conn_handle, uint16_t handle,
                              struct os_mbuf *txom);
-int ble_att_clt_tx_prep_write(uint16_t conn_handle,
-                              const struct ble_att_prep_write_cmd *req,
-                              struct os_mbuf *txom);
+int ble_att_clt_tx_prep_write(uint16_t conn_handle, uint16_t handle,
+                              uint16_t offset, struct os_mbuf *txom);
 int ble_att_clt_rx_prep_write(uint16_t conn_handle, struct os_mbuf **rxom);
 int ble_att_clt_tx_exec_write(uint16_t conn_handle,
                               const struct ble_att_exec_write_req *req);

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/d290cd7e/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 7e57433..fede8d1 100644
--- a/net/nimble/host/src/ble_gattc.c
+++ b/net/nimble/host/src/ble_gattc.c
@@ -3816,7 +3816,6 @@ ble_gattc_write_long_tmo(struct ble_gattc_proc *proc)
 static int
 ble_gattc_write_long_tx(struct ble_gattc_proc *proc)
 {
-    struct ble_att_prep_write_cmd prep_req;
     struct ble_att_exec_write_req exec_req;
     struct os_mbuf *om;
     int write_len;
@@ -3859,10 +3858,9 @@ ble_gattc_write_long_tx(struct ble_gattc_proc *proc)
         goto done;
     }
 
-    prep_req.bapc_handle = proc->write_long.attr.handle;
-    prep_req.bapc_offset = proc->write_long.attr.offset;
-
-    rc = ble_att_clt_tx_prep_write(proc->conn_handle, &prep_req, om);
+    rc = ble_att_clt_tx_prep_write(proc->conn_handle,
+                                   proc->write_long.attr.handle,
+                                   proc->write_long.attr.offset, om);
     om = NULL;
     if (rc != 0) {
         goto done;
@@ -4130,7 +4128,6 @@ ble_gattc_write_reliable_tmo(struct ble_gattc_proc *proc)
 static int
 ble_gattc_write_reliable_tx(struct ble_gattc_proc *proc)
 {
-    struct ble_att_prep_write_cmd prep_req;
     struct ble_att_exec_write_req exec_req;
     struct ble_gatt_attr *attr;
     struct os_mbuf *om;
@@ -4175,10 +4172,8 @@ ble_gattc_write_reliable_tx(struct ble_gattc_proc *proc)
         goto done;
     }
 
-    prep_req.bapc_handle = attr->handle;
-    prep_req.bapc_offset = attr->offset;
-
-    rc = ble_att_clt_tx_prep_write(proc->conn_handle, &prep_req, om);
+    rc = ble_att_clt_tx_prep_write(proc->conn_handle, attr->handle,
+                                   attr->offset, om);
     om = NULL;
     if (rc != 0) {
         goto done;

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/d290cd7e/net/nimble/host/test/src/ble_att_clt_test.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/test/src/ble_att_clt_test.c b/net/nimble/host/test/src/ble_att_clt_test.c
index 97a1a44..e3ba5ce 100644
--- a/net/nimble/host/test/src/ble_att_clt_test.c
+++ b/net/nimble/host/test/src/ble_att_clt_test.c
@@ -199,10 +199,8 @@ ble_att_clt_test_misc_prep_good(uint16_t handle, uint16_t offset,
 
     conn_handle = ble_att_clt_test_misc_init();
 
-    req.bapc_handle = handle;
-    req.bapc_offset = offset;
     om = ble_hs_test_util_om_from_flat(attr_data, attr_data_len);
-    rc = ble_att_clt_tx_prep_write(conn_handle, &req, om);
+    rc = ble_att_clt_tx_prep_write(conn_handle, handle, offset, om);
     TEST_ASSERT(rc == 0);
 
     ble_hs_test_util_tx_all();
@@ -247,7 +245,6 @@ ble_att_clt_test_misc_prep_bad(uint16_t handle, uint16_t offset,
                                uint8_t *attr_data, uint16_t attr_data_len,
                                int status)
 {
-    struct ble_att_prep_write_cmd req;
     struct os_mbuf *om;
     uint16_t conn_handle;
     int rc;
@@ -256,9 +253,7 @@ ble_att_clt_test_misc_prep_bad(uint16_t handle, uint16_t offset,
 
     om = ble_hs_test_util_om_from_flat(attr_data, attr_data_len);
 
-    req.bapc_handle = handle;
-    req.bapc_offset = offset;
-    rc = ble_att_clt_tx_prep_write(conn_handle, &req, om);
+    rc = ble_att_clt_tx_prep_write(conn_handle, handle, offset, om);
     TEST_ASSERT(rc == status);
 }