This is an automated email from the ASF dual-hosted git repository. sjanc pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/mynewt-nimble.git
commit 6e354a94429493661c99705f917175d9c76b55ad Author: Mariusz Skamra <[email protected]> AuthorDate: Wed Apr 29 13:18:38 2026 +0200 nimble/host: Refactor ble_iso_big_conn_handles_init This refactors ble_iso_big_conn_handles_init macro into function. Few asserts have been added to catch the potential issues. The nested loop has been removed. --- nimble/host/src/ble_iso.c | 63 ++++++++++++++++++++++++++++++----------------- 1 file changed, 41 insertions(+), 22 deletions(-) diff --git a/nimble/host/src/ble_iso.c b/nimble/host/src/ble_iso.c index ab5f43393..a76c64cdf 100644 --- a/nimble/host/src/ble_iso.c +++ b/nimble/host/src/ble_iso.c @@ -34,28 +34,6 @@ #define min(a, b) ((a) < (b) ? (a) : (b)) #endif -#define ble_iso_big_conn_handles_init(_big, _handles, _num_handles) \ - do { \ - struct ble_iso_conn *conn = SLIST_FIRST(&ble_iso_conns); \ - \ - for (uint8_t i = 0; i < (_num_handles); i++) { \ - while (conn != NULL) { \ - if (conn->type == BLE_ISO_CONN_BIS) { \ - struct ble_iso_bis *bis; \ - \ - bis = CONTAINER_OF(conn, struct ble_iso_bis, conn); \ - if (bis->big == (_big)) { \ - conn->handle = le16toh((_handles)[i]); \ - conn = SLIST_NEXT(conn, next); \ - break; \ - } \ - } \ - \ - conn = SLIST_NEXT(conn, next); \ - } \ - } \ - } while (0); - enum ble_iso_conn_type { BLE_ISO_CONN_BIS, }; @@ -96,6 +74,47 @@ static struct os_mempool ble_iso_bis_pool; static os_membuf_t ble_iso_bis_mem[ OS_MEMPOOL_SIZE(MYNEWT_VAL(BLE_ISO_MAX_BISES), sizeof (struct ble_iso_bis))]; +static int +ble_iso_big_conn_handles_init(struct ble_iso_big *big, const void *data, uint8_t num_handles) +{ + const uint8_t *handles = data; + struct ble_iso_conn *conn; + struct ble_iso_bis *bis; + uint8_t num_bis; + + BLE_HS_DBG_ASSERT(big != NULL); + BLE_HS_DBG_ASSERT(handles != NULL); + BLE_HS_DBG_ASSERT(num_handles > 0); + + num_bis = 0; + + SLIST_FOREACH(conn, &ble_iso_conns, next) { + if (conn->type != BLE_ISO_CONN_BIS) { + continue; + } + + bis = CONTAINER_OF(conn, struct ble_iso_bis, conn); + if (bis->big != big) { + continue; + } + + BLE_HS_DBG_ASSERT(conn->handle == BLE_HS_CONN_HANDLE_NONE); + + conn->handle = get_le16(&handles[num_bis * sizeof(uint16_t)]); + + if (++num_bis == num_handles) { + break; + } + } + + if (num_bis != num_handles) { + BLE_HS_LOG_ERROR("Not enough handles for BIG\n"); + return BLE_HS_EINVAL; + } + + return 0; +} + static void ble_iso_conn_append(struct ble_iso_conn *conn) {
