nimble/att: Use new helpers for sending Read By Group Type 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/1c08e62b Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/1c08e62b Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/1c08e62b Branch: refs/heads/master Commit: 1c08e62b42bed9fe0ba83d564548b388c55ebc45 Parents: 3f4cac3 Author: Szymon Janc <[email protected]> Authored: Fri Mar 24 15:31:52 2017 +0100 Committer: Szymon Janc <[email protected]> Committed: Mon Apr 10 11:31:31 2017 +0200 ---------------------------------------------------------------------- net/nimble/host/src/ble_att_clt.c | 40 +++++++++-------------------- 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 | 7 +++-- 4 files changed, 19 insertions(+), 35 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/1c08e62b/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 96a04e2..c35ad89 100644 --- a/net/nimble/host/src/ble_att_clt.c +++ b/net/nimble/host/src/ble_att_clt.c @@ -707,50 +707,34 @@ ble_att_clt_rx_read_mult(uint16_t conn_handle, struct os_mbuf **rxom) int ble_att_clt_tx_read_group_type(uint16_t conn_handle, - const struct ble_att_read_group_type_req *req, + uint16_t start_handle, uint16_t end_handle, const ble_uuid_t *uuid) { #if !NIMBLE_BLE_ATT_CLT_READ_GROUP_TYPE return BLE_HS_ENOTSUP; #endif + struct ble_att_read_group_type_req *req; struct os_mbuf *txom; - int rc; - - txom = NULL; - - if (req->bagq_start_handle == 0 || - req->bagq_start_handle > req->bagq_end_handle) { - - rc = BLE_HS_EINVAL; - goto err; - } - rc = ble_att_clt_init_req(BLE_ATT_READ_GROUP_TYPE_REQ_BASE_SZ, &txom); - if (rc != 0) { - goto err; + if (start_handle == 0 || start_handle > end_handle) { + return BLE_HS_EINVAL; } - ble_att_read_group_type_req_write(txom->om_data, txom->om_len, req); - rc = ble_uuid_to_mbuf(uuid, txom); - if (rc != 0) { - goto err; + req = ble_att_cmd_get(BLE_ATT_OP_READ_GROUP_TYPE_REQ, + sizeof(*req) + ble_uuid_length(uuid), &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->bagq_start_handle = htole16(start_handle); + req->bagq_end_handle = htole16(end_handle); + ble_uuid_flat(uuid, req->uuid); BLE_ATT_LOG_CMD(1, "read group type req", conn_handle, ble_att_read_group_type_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/1c08e62b/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 be7fda3..d1c7d33 100644 --- a/net/nimble/host/src/ble_att_cmd_priv.h +++ b/net/nimble/host/src/ble_att_cmd_priv.h @@ -222,6 +222,7 @@ struct ble_att_read_mult_req { struct ble_att_read_group_type_req { uint16_t bagq_start_handle; uint16_t bagq_end_handle; + uint8_t uuid[0]; } __attribute__((packed)); /** http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/1c08e62b/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 19f84a4..08185bc 100644 --- a/net/nimble/host/src/ble_att_priv.h +++ b/net/nimble/host/src/ble_att_priv.h @@ -263,9 +263,9 @@ int ble_att_clt_rx_read_mult(uint16_t conn_handle, struct os_mbuf **rxom); int ble_att_clt_tx_read_type(uint16_t conn_handle, uint16_t start_handle, uint16_t end_handle, const ble_uuid_t *uuid); int ble_att_clt_rx_read_type(uint16_t conn_handle, struct os_mbuf **rxom); -int ble_att_clt_tx_read_group_type( - uint16_t conn_handle, const struct ble_att_read_group_type_req *req, - const ble_uuid_t *uuid128); +int ble_att_clt_tx_read_group_type(uint16_t conn_handle, + uint16_t start_handle, uint16_t end_handle, + const ble_uuid_t *uuid128); int ble_att_clt_rx_read_group_type(uint16_t conn_handle, struct os_mbuf **rxom); int ble_att_clt_tx_find_info(uint16_t conn_handle, http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/1c08e62b/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 2e04e54..84491dc 100644 --- a/net/nimble/host/src/ble_gattc.c +++ b/net/nimble/host/src/ble_gattc.c @@ -1385,15 +1385,14 @@ ble_gattc_disc_all_svcs_tmo(struct ble_gattc_proc *proc) static int ble_gattc_disc_all_svcs_tx(struct ble_gattc_proc *proc) { - struct ble_att_read_group_type_req req; ble_uuid16_t uuid = BLE_UUID16_INIT(BLE_ATT_UUID_PRIMARY_SERVICE); int rc; ble_gattc_dbg_assert_proc_not_inserted(proc); - req.bagq_start_handle = proc->disc_all_svcs.prev_handle + 1; - req.bagq_end_handle = 0xffff; - rc = ble_att_clt_tx_read_group_type(proc->conn_handle, &req, &uuid.u); + rc = ble_att_clt_tx_read_group_type(proc->conn_handle, + proc->disc_all_svcs.prev_handle + 1, + 0xffff, &uuid.u); if (rc != 0) { return rc; }
