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:03 UTC

[11/50] incubator-mynewt-core git commit: nimble/att: Use new helpers for sending Find By Type Value Request

nimble/att: Use new helpers for sending Find By Type Value Request

This constructs response directly on mbuf reducing number of memcopies.
read


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

Branch: refs/heads/master
Commit: 191acab73c9c77c157a806d8871b653f3c64cbc9
Parents: 5e82b3f
Author: Szymon Janc <sz...@codecoup.pl>
Authored: Fri Mar 24 15:33:07 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      | 48 +++++++++++------------------
 net/nimble/host/src/ble_att_cmd_priv.h |  1 +
 net/nimble/host/src/ble_att_priv.h     |  6 ++--
 net/nimble/host/src/ble_gattc.c        | 10 +++---
 4 files changed, 26 insertions(+), 39 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/191acab7/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 f72b209..0464821 100644
--- a/net/nimble/host/src/ble_att_clt.c
+++ b/net/nimble/host/src/ble_att_clt.c
@@ -333,53 +333,41 @@ done:
  * $find by type value                                                       *
  *****************************************************************************/
 
+/*
+ * TODO consider this to accept UUID instead of value, it is used only for this
+ * anyway
+ */
 int
-ble_att_clt_tx_find_type_value(uint16_t conn_handle,
-                               const struct ble_att_find_type_value_req *req,
+ble_att_clt_tx_find_type_value(uint16_t conn_handle, uint16_t start_handle,
+                               uint16_t end_handle, uint16_t attribute_type,
                                const void *attribute_value, int value_len)
 {
 #if !NIMBLE_BLE_ATT_CLT_FIND_TYPE
     return BLE_HS_ENOTSUP;
 #endif
 
+    struct ble_att_find_type_value_req *req;
     struct os_mbuf *txom;
-    int rc;
-
-    txom = NULL;
-
-    if (req->bavq_start_handle == 0 ||
-        req->bavq_start_handle > req->bavq_end_handle) {
-
-        rc = BLE_HS_EINVAL;
-        goto err;
-    }
 
-    rc = ble_att_clt_init_req(BLE_ATT_FIND_TYPE_VALUE_REQ_BASE_SZ, &txom);
-    if (rc != 0) {
-        goto err;
+    if (start_handle == 0 || start_handle > end_handle) {
+        return BLE_HS_EINVAL;
     }
 
-    ble_att_find_type_value_req_write(txom->om_data, txom->om_len, req);
-    rc = os_mbuf_append(txom, attribute_value, value_len);
-    if (rc != 0) {
-        rc = BLE_HS_ENOMEM;
-        goto err;
+    req = ble_att_cmd_get(BLE_ATT_OP_FIND_INFO_REQ, sizeof(*req) + value_len,
+                          &txom);
+    if (req == NULL) {
+        return BLE_HS_ENOMEM;
     }
 
-    rc = ble_att_clt_tx_req(conn_handle, txom);
-    txom = NULL;
-    if (rc != 0) {
-        goto err;
-    }
+    req->bavq_start_handle = htole16(start_handle);
+    req->bavq_end_handle = htole16(end_handle);
+    req->bavq_attr_type = htole16(attribute_type);
+    memcpy(req->bavq_value, attribute_value, value_len);
 
     BLE_ATT_LOG_CMD(1, "find type value req", conn_handle,
                     ble_att_find_type_value_req_log, req);
 
-    return 0;
-
-err:
-    os_mbuf_free_chain(txom);
-    return rc;
+    return ble_att_tx(conn_handle, txom);
 }
 
 static int

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/191acab7/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 d1c7d33..80fe713 100644
--- a/net/nimble/host/src/ble_att_cmd_priv.h
+++ b/net/nimble/host/src/ble_att_cmd_priv.h
@@ -105,6 +105,7 @@ struct ble_att_find_type_value_req {
     uint16_t bavq_start_handle;
     uint16_t bavq_end_handle;
     uint16_t bavq_attr_type;
+    uint16_t bavq_value[0];
 } __attribute__((packed));
 
 /**

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/191acab7/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 86a7b76..a51f7cc 100644
--- a/net/nimble/host/src/ble_att_priv.h
+++ b/net/nimble/host/src/ble_att_priv.h
@@ -271,9 +271,9 @@ int ble_att_clt_rx_read_group_type(uint16_t conn_handle,
 int ble_att_clt_tx_find_info(uint16_t conn_handle, uint16_t start_handle,
                              uint16_t end_handle);
 int ble_att_clt_rx_find_info(uint16_t conn_handle, struct os_mbuf **rxom);
-int ble_att_clt_tx_find_type_value(
-    uint16_t conn_handle, const struct ble_att_find_type_value_req *req,
-    const void *attribute_value, int value_len);
+int ble_att_clt_tx_find_type_value(uint16_t conn_handle, uint16_t start_handle,
+                                   uint16_t end_handle, uint16_t attribute_type,
+                                   const void *attribute_value, int value_len);
 int ble_att_clt_rx_find_type_value(uint16_t conn_handle,
                                    struct os_mbuf **rxom);
 int ble_att_clt_tx_write_req(uint16_t conn_handle,

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/191acab7/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 99d2e83..6aa8bb1 100644
--- a/net/nimble/host/src/ble_gattc.c
+++ b/net/nimble/host/src/ble_gattc.c
@@ -1619,18 +1619,16 @@ ble_gattc_disc_svc_uuid_tmo(struct ble_gattc_proc *proc)
 static int
 ble_gattc_disc_svc_uuid_tx(struct ble_gattc_proc *proc)
 {
-    struct ble_att_find_type_value_req req;
     uint8_t val[16];
     int rc;
 
     ble_gattc_dbg_assert_proc_not_inserted(proc);
 
-    req.bavq_start_handle = proc->disc_svc_uuid.prev_handle + 1;
-    req.bavq_end_handle = 0xffff;
-    req.bavq_attr_type = BLE_ATT_UUID_PRIMARY_SERVICE;
-
     ble_uuid_flat(&proc->disc_svc_uuid.service_uuid.u, val);
-    rc = ble_att_clt_tx_find_type_value(proc->conn_handle, &req, val,
+    rc = ble_att_clt_tx_find_type_value(proc->conn_handle,
+                                        proc->disc_svc_uuid.prev_handle + 1,
+                                        0xffff, BLE_ATT_UUID_PRIMARY_SERVICE,
+                                        val,
                                         ble_uuid_length(&proc->disc_svc_uuid.service_uuid.u));
     if (rc != 0) {
         return rc;