nimble/att: Use new helpers for sending Notification 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/504e0e13 Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/504e0e13 Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/504e0e13 Branch: refs/heads/master Commit: 504e0e132f3462275c7aef8fd1a4cc6b3b819e16 Parents: d74cc3e Author: Szymon Janc <[email protected]> Authored: Fri Mar 24 15:35:09 2017 +0100 Committer: Szymon Janc <[email protected]> Committed: Mon Apr 10 11:31:31 2017 +0200 ---------------------------------------------------------------------- net/nimble/host/src/ble_att_clt.c | 21 +++++++++------------ net/nimble/host/src/ble_att_priv.h | 3 +-- net/nimble/host/src/ble_gattc.c | 4 +--- 3 files changed, 11 insertions(+), 17 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/504e0e13/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 52c83c0..d8d5d1c 100644 --- a/net/nimble/host/src/ble_att_clt.c +++ b/net/nimble/host/src/ble_att_clt.c @@ -976,37 +976,34 @@ ble_att_clt_rx_exec_write(uint16_t conn_handle, struct os_mbuf **rxom) *****************************************************************************/ int -ble_att_clt_tx_notify(uint16_t conn_handle, - const struct ble_att_notify_req *req, +ble_att_clt_tx_notify(uint16_t conn_handle, uint16_t handle, struct os_mbuf *txom) { #if !NIMBLE_BLE_ATT_CLT_NOTIFY return BLE_HS_ENOTSUP; #endif + struct ble_att_notify_req *req; + struct os_mbuf *txom2; int rc; - if (req->banq_handle == 0) { + if (handle == 0) { rc = BLE_HS_EINVAL; goto err; } - txom = os_mbuf_prepend_pullup(txom, BLE_ATT_NOTIFY_REQ_BASE_SZ); - if (txom == NULL) { + req = ble_att_cmd_get(BLE_ATT_OP_NOTIFY_REQ, sizeof(*req), &txom2); + if (req == NULL) { rc = BLE_HS_ENOMEM; goto err; } - ble_att_notify_req_write(txom->om_data, BLE_ATT_NOTIFY_REQ_BASE_SZ, req); - rc = ble_att_clt_tx_req(conn_handle, txom); - txom = NULL; - if (rc != 0) { - goto err; - } + req->banq_handle = htole16(handle); + os_mbuf_concat(txom2, txom); BLE_ATT_LOG_CMD(1, "notify req", conn_handle, ble_att_notify_req_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/504e0e13/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 fbc81d9..8457767 100644 --- a/net/nimble/host/src/ble_att_priv.h +++ b/net/nimble/host/src/ble_att_priv.h @@ -286,8 +286,7 @@ 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, uint8_t flags); int ble_att_clt_rx_exec_write(uint16_t conn_handle, struct os_mbuf **rxom); int ble_att_clt_rx_write(uint16_t conn_handle, struct os_mbuf **rxom); -int ble_att_clt_tx_notify(uint16_t conn_handle, - const struct ble_att_notify_req *req, +int ble_att_clt_tx_notify(uint16_t conn_handle, uint16_t handle, struct os_mbuf *txom); int ble_att_clt_tx_indicate(uint16_t conn_handle, const struct ble_att_indicate_req *req, http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/504e0e13/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 59fbea8..85111af 100644 --- a/net/nimble/host/src/ble_gattc.c +++ b/net/nimble/host/src/ble_gattc.c @@ -4405,7 +4405,6 @@ ble_gattc_notify_custom(uint16_t conn_handle, uint16_t chr_val_handle, return BLE_HS_ENOTSUP; #endif - struct ble_att_notify_req req; int rc; STATS_INC(ble_gattc_stats, notify); @@ -4430,8 +4429,7 @@ ble_gattc_notify_custom(uint16_t conn_handle, uint16_t chr_val_handle, } } - req.banq_handle = chr_val_handle; - rc = ble_att_clt_tx_notify(conn_handle, &req, txom); + rc = ble_att_clt_tx_notify(conn_handle, chr_val_handle, txom); txom = NULL; if (rc != 0) { goto err;
