nimble/att: Use new helpers for sending MTU exchange 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/55b8a5c2 Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/55b8a5c2 Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/55b8a5c2 Branch: refs/heads/master Commit: 55b8a5c20766f93996cd04d8ba06f8b77787932d Parents: b50707b Author: Szymon Janc <[email protected]> Authored: Fri Mar 24 15:27:26 2017 +0100 Committer: Szymon Janc <[email protected]> Committed: Mon Apr 10 11:31:30 2017 +0200 ---------------------------------------------------------------------- net/nimble/host/src/ble_att_clt.c | 16 +++++++++------- net/nimble/host/src/ble_att_priv.h | 3 +-- net/nimble/host/src/ble_gattc.c | 15 +++++---------- net/nimble/host/test/src/ble_att_clt_test.c | 4 +--- 4 files changed, 16 insertions(+), 22 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/55b8a5c2/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 8c92893..7ea7980 100644 --- a/net/nimble/host/src/ble_att_clt.c +++ b/net/nimble/host/src/ble_att_clt.c @@ -116,14 +116,15 @@ ble_att_clt_rx_error(uint16_t conn_handle, struct os_mbuf **rxom) *****************************************************************************/ int -ble_att_clt_tx_mtu(uint16_t conn_handle, const struct ble_att_mtu_cmd *req) +ble_att_clt_tx_mtu(uint16_t conn_handle, uint16_t mtu) { + struct ble_att_mtu_cmd *req; struct ble_l2cap_chan *chan; struct ble_hs_conn *conn; struct os_mbuf *txom; int rc; - if (req->bamc_mtu < BLE_ATT_MTU_DFLT) { + if (mtu < BLE_ATT_MTU_DFLT) { return BLE_HS_EINVAL; } @@ -143,13 +144,14 @@ ble_att_clt_tx_mtu(uint16_t conn_handle, const struct ble_att_mtu_cmd *req) return rc; } - rc = ble_att_clt_init_req(BLE_ATT_MTU_CMD_SZ, &txom); - if (rc != 0) { - return rc; + req = ble_att_cmd_get(BLE_ATT_OP_MTU_REQ, sizeof(*req), &txom); + if (req == NULL) { + return BLE_HS_ENOMEM; } - ble_att_mtu_req_write(txom->om_data, txom->om_len, req); - rc = ble_att_clt_tx_req(conn_handle, txom); + req->bamc_mtu = htole16(mtu); + + rc = ble_att_tx(conn_handle, txom); if (rc != 0) { return rc; } http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/55b8a5c2/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 918ca9b..4e37bb7 100644 --- a/net/nimble/host/src/ble_att_priv.h +++ b/net/nimble/host/src/ble_att_priv.h @@ -250,8 +250,7 @@ struct ble_att_read_group_type_adata { }; int ble_att_clt_rx_error(uint16_t conn_handle, struct os_mbuf **rxom); -int ble_att_clt_tx_mtu(uint16_t conn_handle, - const struct ble_att_mtu_cmd *req); +int ble_att_clt_tx_mtu(uint16_t conn_handle, uint16_t mtu); int ble_att_clt_rx_mtu(uint16_t conn_handle, struct os_mbuf **rxom); int ble_att_clt_tx_read(uint16_t conn_handle, const struct ble_att_read_req *req); http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/55b8a5c2/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 917e21a..d50368f 100644 --- a/net/nimble/host/src/ble_gattc.c +++ b/net/nimble/host/src/ble_gattc.c @@ -1267,28 +1267,23 @@ ble_gattc_mtu_err(struct ble_gattc_proc *proc, int status, uint16_t att_handle) static int ble_gattc_mtu_tx(struct ble_gattc_proc *proc) { - struct ble_att_mtu_cmd req; struct ble_l2cap_chan *chan; struct ble_hs_conn *conn; + uint16_t mtu; int rc; ble_hs_lock(); rc = ble_att_conn_chan_find(proc->conn_handle, &conn, &chan); if (rc == 0) { - req.bamc_mtu = chan->my_mtu; + mtu = chan->my_mtu; } ble_hs_unlock(); - if (rc != 0) { - return rc; - } - - rc = ble_att_clt_tx_mtu(proc->conn_handle, &req); - if (rc != 0) { - return rc; + if (rc == 0) { + rc = ble_att_clt_tx_mtu(proc->conn_handle, mtu); } - return 0; + return rc; } /** http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/55b8a5c2/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 3728557..c452128 100644 --- a/net/nimble/host/test/src/ble_att_clt_test.c +++ b/net/nimble/host/test/src/ble_att_clt_test.c @@ -278,11 +278,9 @@ ble_att_clt_test_misc_prep_bad(uint16_t handle, uint16_t offset, static void ble_att_clt_test_misc_tx_mtu(uint16_t conn_handle, uint16_t mtu, int status) { - struct ble_att_mtu_cmd req; int rc; - req.bamc_mtu = mtu; - rc = ble_att_clt_tx_mtu(conn_handle, &req); + rc = ble_att_clt_tx_mtu(conn_handle, mtu); TEST_ASSERT(rc == status); if (rc == 0) {
