nimble/att: Use packed struct for receiving Find Information Response Use packed structure to map it to received mbuf instead of using dedicated parsing function. Modern compilers generate effective code in such case anyway.
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/fe97914d Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/fe97914d Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/fe97914d Branch: refs/heads/master Commit: fe97914df0e8a0c497a3f737754d8873e8399959 Parents: a31e34b Author: Szymon Janc <szymon.j...@codecoup.pl> Authored: Fri Mar 24 15:47:10 2017 +0100 Committer: Szymon Janc <szymon.j...@codecoup.pl> Committed: Mon Apr 10 11:31:32 2017 +0200 ---------------------------------------------------------------------- net/nimble/host/src/ble_att_clt.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/fe97914d/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 1d45ef0..4644b35 100644 --- a/net/nimble/host/src/ble_att_clt.c +++ b/net/nimble/host/src/ble_att_clt.c @@ -247,23 +247,29 @@ ble_att_clt_rx_find_info(uint16_t conn_handle, struct os_mbuf **om) #endif struct ble_att_find_info_idata idata; - struct ble_att_find_info_rsp rsp; + struct ble_att_find_info_rsp *rsp; int rc; - rc = ble_hs_mbuf_pullup_base(om, BLE_ATT_FIND_INFO_RSP_BASE_SZ); + /* TODO move this to common part + * Strip L2CAP ATT header from the front of the mbuf. + */ + os_mbuf_adj(*om, 1); + + rc = ble_hs_mbuf_pullup_base(om, sizeof(*rsp)); if (rc != 0) { goto done; } - ble_att_find_info_rsp_parse((*om)->om_data, (*om)->om_len, &rsp); + rsp = (struct ble_att_find_info_rsp *)(*om)->om_data; + BLE_ATT_LOG_CMD(0, "find info rsp", conn_handle, ble_att_find_info_rsp_log, - &rsp); + rsp); /* Strip the response base from the front of the mbuf. */ - os_mbuf_adj((*om), BLE_ATT_FIND_INFO_RSP_BASE_SZ); + os_mbuf_adj((*om), sizeof(*rsp)); while (OS_MBUF_PKTLEN(*om) > 0) { - rc = ble_att_clt_parse_find_info_entry(om, rsp.bafp_format, &idata); + rc = ble_att_clt_parse_find_info_entry(om, rsp->bafp_format, &idata); if (rc != 0) { goto done; }