From bb98c7e2b96d1cde2ac571213aabe283939d7117 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Kopy=C5=9Bci=C5=84ski?= Date: Fri, 1 Mar 2024 09:40:42 +0100 Subject: [PATCH] host: refactor BLE Audio This patch refactors BLE Audio library to conform to new directory tree introduced in a9795706bea035d84d1577680e0814ceedc9dc58. LE Audio related files present in host/include, host/src and host/services were moved to corelated folders in host/audio. Experimental system config BLE_AUDIO enabling LE Audio feature was introduced. Naming convention for BLE Audio functions, structures and files was unified - replaced `bcst` shorthand with `broadcast`. For example, ble_audio_pub_bcst_announcement_feat was renamed to ble_audio_pub_broadcast_announcement_feat. Contents of host/include/ble_audio_common.h was incorporated into host/audio/include/audio/ble_audio.h. Apps and Auracast service were adjusted to new config and include paths. BLE_MAX_BIG and BLE_MAX_BIS renamed to BLE_ISO_MAX_BIGS and BLE_ISO_MAX_BISES, respectevaly. --- .github/test_build_apps_syscfg.yml | 1 + apps/auracast/pkg.yml | 2 +- apps/auracast/src/main.c | 4 +- apps/auracast/syscfg.yml | 6 +- apps/btshell/src/btshell.h | 2 +- apps/btshell/src/cmd_iso.c | 6 +- apps/btshell/src/cmd_leaudio.c | 4 +- apps/btshell/src/main.c | 40 +-- apps/leaudio_broadcaster/pkg.yml | 1 + apps/leaudio_broadcaster/src/main.c | 8 +- apps/leaudio_broadcaster/syscfg.yml | 5 +- .../include/audio/ble_audio.h} | 291 +++++++++++++++-- .../audio}/ble_audio_broadcast_source.h | 2 +- .../host/audio/include/host/audio/ble_audio.h | 293 ------------------ .../services/auracast/ble_svc_auracast.h | 4 +- .../{ => audio}/services/auracast/pkg.yml | 3 +- .../services/auracast/src/ble_svc_auracast.c | 2 +- nimble/host/audio/src/ble_audio.c | 25 +- .../src/ble_audio_broadcast_source.c | 6 +- nimble/host/audio/src/ble_audio_priv.h | 2 +- .../audio/targets/btshell_native/syscfg.yml | 4 +- .../src/testcases/ble_audio_base_parse_test.c | 2 +- .../ble_audio_listener_register_test.c | 2 +- nimble/host/include/host/ble_iso.h | 2 +- nimble/host/pkg.yml | 3 + nimble/host/src/ble_hs.c | 4 +- nimble/host/src/ble_iso.c | 12 +- nimble/host/syscfg.yml | 33 +- .../examples/linux/include/syscfg/syscfg.h | 8 +- .../linux_blemesh/include/syscfg/syscfg.h | 8 +- .../examples/nuttx/include/syscfg/syscfg.h | 8 +- porting/nimble/include/syscfg/syscfg.h | 8 +- porting/npl/riot/include/syscfg/syscfg.h | 8 +- .../syscfg.yml | 4 +- 34 files changed, 393 insertions(+), 420 deletions(-) rename nimble/host/{include/host/ble_audio_common.h => audio/include/audio/ble_audio.h} (58%) rename nimble/host/{include/host => audio/include/audio}/ble_audio_broadcast_source.h (99%) delete mode 100644 nimble/host/audio/include/host/audio/ble_audio.h rename nimble/host/{ => audio}/services/auracast/include/services/auracast/ble_svc_auracast.h (98%) rename nimble/host/{ => audio}/services/auracast/pkg.yml (93%) rename nimble/host/{ => audio}/services/auracast/src/ble_svc_auracast.c (98%) rename nimble/host/{ => audio}/src/ble_audio_broadcast_source.c (99%) diff --git a/.github/test_build_apps_syscfg.yml b/.github/test_build_apps_syscfg.yml index faafa8a3cb..aabcc2979d 100644 --- a/.github/test_build_apps_syscfg.yml +++ b/.github/test_build_apps_syscfg.yml @@ -27,6 +27,7 @@ syscfg.vals: BLE_PERIODIC_ADV_SYNC_BIGINFO_REPORTS: 1 BLE_ISO: 1 BLE_ISO_TEST: 1 + BLE_AUDIO: 1 BLE_ISO_BROADCAST_SOURCE: 1 BLE_HCI_VS: 1 BLE_POWER_CONTROL: 1 diff --git a/apps/auracast/pkg.yml b/apps/auracast/pkg.yml index 54eb3be599..fa33aa31f5 100644 --- a/apps/auracast/pkg.yml +++ b/apps/auracast/pkg.yml @@ -30,10 +30,10 @@ pkg.deps: - nimble/host/util - nimble/host/services/gap - nimble/host/store/config + - nimble/host/audio/services/auracast - "@apache-mynewt-core/kernel/os" - "@apache-mynewt-core/sys/console" - "@apache-mynewt-core/sys/log" - "@apache-mynewt-core/sys/stats" - "@apache-mynewt-core/sys/sysinit" - "@apache-mynewt-core/sys/id" - - "@apache-mynewt-nimble/nimble/host/services/auracast" diff --git a/apps/auracast/src/main.c b/apps/auracast/src/main.c index 3e7349ec89..977d643cd0 100644 --- a/apps/auracast/src/main.c +++ b/apps/auracast/src/main.c @@ -51,7 +51,7 @@ static os_membuf_t bis_mem[ static struct os_mempool bis_pool; static os_membuf_t codec_spec_mem[ - OS_MEMPOOL_SIZE(MYNEWT_VAL(BLE_MAX_BIS) * 2, 19) + OS_MEMPOOL_SIZE(MYNEWT_VAL(BLE_ISO_MAX_BISES) * 2, 19) ]; static struct os_mempool codec_spec_pool; @@ -156,7 +156,7 @@ auracast_init() assert(rc == 0); rc = os_mempool_init(&codec_spec_pool, - MYNEWT_VAL(BLE_MAX_BIS) * 2, 19, + MYNEWT_VAL(BLE_ISO_MAX_BISES) * 2, 19, codec_spec_mem, "codec_spec_pool"); assert(rc == 0); } diff --git a/apps/auracast/syscfg.yml b/apps/auracast/syscfg.yml index e67af5a00c..f22b92d0b9 100644 --- a/apps/auracast/syscfg.yml +++ b/apps/auracast/syscfg.yml @@ -56,7 +56,7 @@ syscfg.vals: BLE_VERSION: 54 BLE_ISO: 1 BLE_ISO_BROADCAST_SOURCE: 1 - BLE_MAX_BIG: 1 - BLE_MAX_BIS: 2 + BLE_ISO_MAX_BIGS: 1 + BLE_ISO_MAX_BISES: 2 - BLE_PHY_NRF52_HEADERMASK_WORKAROUND: 1 \ No newline at end of file + BLE_AUDIO: 1 diff --git a/apps/btshell/src/btshell.h b/apps/btshell/src/btshell.h index c457fd7f9f..c2a2eb3e29 100644 --- a/apps/btshell/src/btshell.h +++ b/apps/btshell/src/btshell.h @@ -29,7 +29,7 @@ #include "host/ble_gatt.h" #include "host/ble_gap.h" #if (MYNEWT_VAL(BLE_ISO_BROADCAST_SOURCE)) -#include "host/ble_audio_broadcast_source.h" +#include "audio/ble_audio_broadcast_source.h" #endif #ifdef __cplusplus diff --git a/apps/btshell/src/cmd_iso.c b/apps/btshell/src/cmd_iso.c index 8d0ef343d8..284f02111e 100644 --- a/apps/btshell/src/cmd_iso.c +++ b/apps/btshell/src/cmd_iso.c @@ -34,7 +34,7 @@ static struct iso_rx_stats { uint64_t valid_cnt; uint64_t error_cnt; uint64_t lost_cnt; -} rx_stats_pool[MYNEWT_VAL(BLE_MAX_BIS)]; +} rx_stats_pool[MYNEWT_VAL(BLE_ISO_MAX_BISES)]; static void iso_rx_stats_update(uint16_t conn_handle, const struct ble_iso_rx_data_info *info, @@ -305,9 +305,9 @@ const struct shell_cmd_help cmd_iso_big_sync_create_help = { int cmd_iso_big_sync_create(int argc, char **argv) { - struct ble_iso_bis_params bis_params[MYNEWT_VAL(BLE_MAX_BIS)]; + struct ble_iso_bis_params bis_params[MYNEWT_VAL(BLE_ISO_MAX_BISES)]; struct ble_iso_big_sync_create_params params = { 0 }; - uint8_t bis_idxs[MYNEWT_VAL(BLE_MAX_BIS)]; + uint8_t bis_idxs[MYNEWT_VAL(BLE_ISO_MAX_BISES)]; uint8_t big_handle; int rc; diff --git a/apps/btshell/src/cmd_leaudio.c b/apps/btshell/src/cmd_leaudio.c index fc4fcd17a2..2f31246cf8 100644 --- a/apps/btshell/src/cmd_leaudio.c +++ b/apps/btshell/src/cmd_leaudio.c @@ -17,13 +17,13 @@ * under the License. */ -#include "host/ble_audio_broadcast_source.h" #include "cmd_leaudio.h" #include "btshell.h" #include "console/console.h" #include "errno.h" -#if (MYNEWT_VAL(BLE_ISO_BROADCAST_SOURCE)) +#if (MYNEWT_VAL(BLE_AUDIO)) +#include "audio/ble_audio_broadcast_source.h" int cmd_leaudio_base_add(int argc, char **argv) { diff --git a/apps/btshell/src/main.c b/apps/btshell/src/main.c index 6424bf6b86..0ba90ff131 100644 --- a/apps/btshell/src/main.c +++ b/apps/btshell/src/main.c @@ -41,8 +41,10 @@ #include "host/ble_gatt.h" #include "host/ble_store.h" #include "host/ble_sm.h" -#include "host/ble_audio_common.h" -#include "host/ble_audio_broadcast_source.h" +#if MYNEWT_VAL(BLE_AUDIO) +#include "audio/ble_audio_broadcast_source.h" +#include "audio/ble_audio.h" +#endif #include "host/util/util.h" /* Mandatory services. */ @@ -132,35 +134,35 @@ struct ble_sm_sc_oob_data oob_data_remote; #if MYNEWT_VAL(BLE_ISO_BROADCAST_SOURCE) static struct {struct ble_audio_base *base; uint8_t adv_instance;} -btshell_base_list[MYNEWT_VAL(BLE_MAX_BIG)]; +btshell_base_list[MYNEWT_VAL(BLE_ISO_MAX_BIGS)]; static os_membuf_t btshell_base_mem[ - OS_MEMPOOL_SIZE(MYNEWT_VAL(BLE_MAX_BIG), + OS_MEMPOOL_SIZE(MYNEWT_VAL(BLE_ISO_MAX_BIGS), sizeof(struct ble_audio_base)) ]; static struct os_mempool btshell_base_pool; static os_membuf_t btshell_big_params_mem[ - OS_MEMPOOL_SIZE(MYNEWT_VAL(BLE_MAX_BIG), + OS_MEMPOOL_SIZE(MYNEWT_VAL(BLE_ISO_MAX_BIGS), sizeof(struct ble_iso_big_params)) ]; static struct os_mempool btshell_big_params_pool; /** Mempool size: in worst case every BIS is in separate subgroup */ static os_membuf_t btshell_big_sub_mem[ - OS_MEMPOOL_SIZE(MYNEWT_VAL(BLE_MAX_BIS), + OS_MEMPOOL_SIZE(MYNEWT_VAL(BLE_ISO_MAX_BISES), sizeof(struct ble_audio_big_subgroup)) ]; static struct os_mempool btshell_big_sub_pool; static os_membuf_t btshell_bis_mem[ - OS_MEMPOOL_SIZE(MYNEWT_VAL(BLE_MAX_BIS), + OS_MEMPOOL_SIZE(MYNEWT_VAL(BLE_ISO_MAX_BISES), sizeof(struct ble_audio_bis)) ]; static struct os_mempool btshell_bis_pool; static os_membuf_t btshell_metadata_mem[ - OS_MEMPOOL_SIZE(MYNEWT_VAL(BLE_MAX_BIS), + OS_MEMPOOL_SIZE(MYNEWT_VAL(BLE_ISO_MAX_BISES), MYNEWT_VAL(BLE_EXT_ADV_MAX_SIZE) - 27) ]; static struct os_mempool btshell_metadata_pool; @@ -171,12 +173,12 @@ static struct os_mempool btshell_metadata_pool; * has one. This is inefficient but possible and should not cause error if * used that way */ static os_membuf_t btshell_codec_spec_mem[ - OS_MEMPOOL_SIZE(MYNEWT_VAL(BLE_MAX_BIS) * 2, 9) + OS_MEMPOOL_SIZE(MYNEWT_VAL(BLE_ISO_MAX_BISES) * 2, 9) ]; static struct os_mempool btshell_codec_spec_pool; static os_membuf_t btshell_big_params_mem[ - OS_MEMPOOL_SIZE(MYNEWT_VAL(BLE_MAX_BIG), sizeof(struct ble_iso_big_params)) + OS_MEMPOOL_SIZE(MYNEWT_VAL(BLE_ISO_MAX_BIGS), sizeof(struct ble_iso_big_params)) ]; static struct os_mempool btshell_big_params_pool; #endif @@ -2767,7 +2769,7 @@ static int btshell_base_find_free(void) { int i; - for (i = 0; i < MYNEWT_VAL(BLE_MAX_BIG); i++) { + for (i = 0; i < MYNEWT_VAL(BLE_ISO_MAX_BIGS); i++) { if (btshell_base_list[i].base == NULL) { return i; } @@ -2780,7 +2782,7 @@ static struct ble_audio_base * btshell_base_find(uint8_t adv_instance) { int i; - for (i = 0; i < MYNEWT_VAL(BLE_MAX_BIG); i++) { + for (i = 0; i < MYNEWT_VAL(BLE_ISO_MAX_BIGS); i++) { if (btshell_base_list[i].adv_instance == adv_instance) { return btshell_base_list[i].base; } @@ -3082,38 +3084,38 @@ mynewt_main(int argc, char **argv) assert(rc == 0); #endif #if (MYNEWT_VAL(BLE_ISO_BROADCAST_SOURCE)) - rc = os_mempool_init(&btshell_base_pool, MYNEWT_VAL(BLE_MAX_BIG), + rc = os_mempool_init(&btshell_base_pool, MYNEWT_VAL(BLE_ISO_MAX_BIGS), sizeof(struct ble_audio_base), btshell_base_mem, "btshell_base_pool"); assert(rc == 0); - rc = os_mempool_init(&btshell_big_params_pool, MYNEWT_VAL(BLE_MAX_BIG), + rc = os_mempool_init(&btshell_big_params_pool, MYNEWT_VAL(BLE_ISO_MAX_BIGS), sizeof(struct ble_iso_big_params), btshell_big_params_mem, "btshell_big_params_pool"); assert(rc == 0); - rc = os_mempool_init(&btshell_big_sub_pool, MYNEWT_VAL(BLE_MAX_BIS), + rc = os_mempool_init(&btshell_big_sub_pool, MYNEWT_VAL(BLE_ISO_MAX_BISES), sizeof(struct ble_audio_big_subgroup), btshell_big_sub_mem, "btshell_big_sub_pool"); assert(rc == 0); - rc = os_mempool_init(&btshell_bis_pool, MYNEWT_VAL(BLE_MAX_BIS), + rc = os_mempool_init(&btshell_bis_pool, MYNEWT_VAL(BLE_ISO_MAX_BISES), sizeof(struct ble_audio_bis), btshell_bis_mem, "btshell_bis_pool"); assert(rc == 0); - rc = os_mempool_init(&btshell_metadata_pool, MYNEWT_VAL(BLE_MAX_BIS), + rc = os_mempool_init(&btshell_metadata_pool, MYNEWT_VAL(BLE_ISO_MAX_BISES), MYNEWT_VAL(BLE_EXT_ADV_MAX_SIZE) - 27, btshell_metadata_mem, "btshell_metadata_pool"); assert(rc == 0); rc = os_mempool_init(&btshell_codec_spec_pool, - MYNEWT_VAL(BLE_MAX_BIS) * 2, 19, + MYNEWT_VAL(BLE_ISO_MAX_BISES) * 2, 19, btshell_codec_spec_mem, "btshell_codec_spec_pool"); assert(rc == 0); rc = os_mempool_init(&btshell_big_params_pool, - MYNEWT_VAL(BLE_MAX_BIG), + MYNEWT_VAL(BLE_ISO_MAX_BIGS), sizeof(struct ble_iso_big_params), btshell_big_params_mem, "btshell_big_params_pool"); assert(rc == 0); diff --git a/apps/leaudio_broadcaster/pkg.yml b/apps/leaudio_broadcaster/pkg.yml index 0955da906b..95439284c7 100644 --- a/apps/leaudio_broadcaster/pkg.yml +++ b/apps/leaudio_broadcaster/pkg.yml @@ -30,6 +30,7 @@ pkg.deps: - nimble/host/util - nimble/host/services/gap - nimble/host/store/config + - nimble/host/audio - "@apache-mynewt-core/kernel/os" - "@apache-mynewt-core/sys/console" - "@apache-mynewt-core/sys/log" diff --git a/apps/leaudio_broadcaster/src/main.c b/apps/leaudio_broadcaster/src/main.c index a4e7bf98ea..52033250e1 100644 --- a/apps/leaudio_broadcaster/src/main.c +++ b/apps/leaudio_broadcaster/src/main.c @@ -24,8 +24,8 @@ #include "host/ble_hs.h" #include "host/util/util.h" -#include "host/ble_audio_broadcast_source.h" -#include "host/ble_audio_common.h" +#include "audio/ble_audio_broadcast_source.h" +#include "audio/ble_audio.h" #include "host/ble_iso.h" #include "hal/hal_gpio.h" @@ -53,7 +53,7 @@ static os_membuf_t bis_mem[ static struct os_mempool bis_pool; static os_membuf_t codec_spec_mem[ - OS_MEMPOOL_SIZE(MYNEWT_VAL(BLE_MAX_BIS) * 2, 19) + OS_MEMPOOL_SIZE(MYNEWT_VAL(BLE_ISO_MAX_BISES) * 2, 19) ]; static struct os_mempool codec_spec_pool; @@ -182,7 +182,7 @@ broadcaster_init() assert(rc == 0); rc = os_mempool_init(&codec_spec_pool, - MYNEWT_VAL(BLE_MAX_BIS) * 2, 19, + MYNEWT_VAL(BLE_ISO_MAX_BISES) * 2, 19, codec_spec_mem, "codec_spec_pool"); assert(rc == 0); } diff --git a/apps/leaudio_broadcaster/syscfg.yml b/apps/leaudio_broadcaster/syscfg.yml index bed16f05d2..cffb828ed3 100644 --- a/apps/leaudio_broadcaster/syscfg.yml +++ b/apps/leaudio_broadcaster/syscfg.yml @@ -52,10 +52,11 @@ syscfg.vals: MSYS_1_BLOCK_COUNT: 32 BLE_VERSION: 54 + BLE_AUDIO: 1 BLE_ISO: 1 BLE_ISO_BROADCAST_SOURCE: 1 - BLE_MAX_BIG: 1 - BLE_MAX_BIS: 2 + BLE_ISO_MAX_BIGS: 1 + BLE_ISO_MAX_BISES: 2 syscfg.vals.BSP_NRF5340: MCU_MPU_ENABLE: 1 diff --git a/nimble/host/include/host/ble_audio_common.h b/nimble/host/audio/include/audio/ble_audio.h similarity index 58% rename from nimble/host/include/host/ble_audio_common.h rename to nimble/host/audio/include/audio/ble_audio.h index 05780c0797..c1ce1dc9c8 100644 --- a/nimble/host/include/host/ble_audio_common.h +++ b/nimble/host/audio/include/audio/ble_audio.h @@ -17,26 +17,16 @@ * under the License. */ -#ifndef H_BLE_AUDIO_COMMON_ -#define H_BLE_AUDIO_COMMON_ +#ifndef H_BLE_AUDIO_ +#define H_BLE_AUDIO_ -/** - * @file ble_audio_common.h - * - * @brief Bluetooth Low Energy Audio Common API - * - * @defgroup bt_le_audio_common Bluetooth LE Audio Common - * @ingroup bt_host - * @{ - */ - -#include "stdint.h" -#include "os/queue.h" +#include +#include /** * @cond * Helper macros for BLE_AUDIO_BUILD_CODEC_CONFIG - * @{ + * @private @{ */ #define FIELD_LEN_2(_len, _type, _field) _len, _type, _field, #define FIELD_LEN_5(_len, _type, _field) _len, _type, _field, \ @@ -276,6 +266,271 @@ struct ble_audio_codec_id { uint16_t vendor_specific; }; +/** @brief Public Broadcast Announcement features bits */ +enum ble_audio_pub_broadcast_announcement_feat { + /** Broadcast Stream Encryption */ + BLE_AUDIO_PUB_BROADCAST_ANNOUNCEMENT_FEAT_ENCRYPTION = 1 << 0, + + /** Standard Quality Public Broadcast Audio */ + BLE_AUDIO_PUB_BROADCAST_ANNOUNCEMENT_FEAT_SQ = 1 << 1, + + /** High Quality Public Broadcast Audio */ + BLE_AUDIO_PUB_BROADCAST_ANNOUNCEMENT_FEAT_HQ = 1 << 2, +}; + +/** @brief Public Broadcast Announcement structure */ +struct ble_audio_pub_broadcast_announcement { + /** Public Broadcast Announcement features bitfield */ + enum ble_audio_pub_broadcast_announcement_feat features; + + /** Metadata length */ + uint8_t metadata_len; + + /** Metadata */ + const uint8_t *metadata; +}; + +struct ble_audio_broadcast_name { + /** Broadcast Name length */ + uint8_t name_len; + + /** Broadcast Name */ + const char *name; +}; + +/** + * @defgroup ble_audio_events Bluetooth Low Energy Audio Events + * @{ + */ + +/** BLE Audio event: Broadcast Announcement */ +#define BLE_AUDIO_EVENT_BROADCAST_ANNOUNCEMENT 0 + +/** @} */ + +/** @brief Broadcast Announcement */ +struct ble_audio_event_broadcast_announcement { + /** Extended advertising report */ + const struct ble_gap_ext_disc_desc *ext_disc; + + /** Broadcast ID */ + uint32_t broadcast_id; + + /** Additional service data included in Broadcast Audio Announcement */ + const uint8_t *svc_data; + + /** Additional service data length */ + uint16_t svc_data_len; + + /** Optional Public Broadcast Announcement data */ + struct ble_audio_pub_broadcast_announcement *pub_announcement_data; + + /** Optional Broadcast Name */ + struct ble_audio_broadcast_name *name; +}; + +/** + * Represents a BLE Audio related event. When such an event occurs, the host + * notifies the application by passing an instance of this structure to an + * application-specified callback. + */ +struct ble_audio_event { + /** + * Indicates the type of BLE Audio event that occurred. This is one of the + * BLE_AUDIO_EVENT codes. + */ + uint8_t type; + + /** + * A discriminated union containing additional details concerning the event. + * The 'type' field indicates which member of the union is valid. + */ + union { + /** + * @ref BLE_AUDIO_EVENT_BROADCAST_ANNOUNCEMENT + * + * Represents a received Broadcast Announcement. + */ + struct ble_audio_event_broadcast_announcement broadcast_announcement; + }; +}; + +/** Callback function type for handling BLE Audio events. */ +typedef int ble_audio_event_fn(struct ble_audio_event *event, void *arg); + +/** + * Event listener structure + * + * This should be used as an opaque structure and not modified manually. + */ +struct ble_audio_event_listener { + /** The function to call when a BLE Audio event occurs. */ + ble_audio_event_fn *fn; + + /** An optional argument to pass to the event handler function. */ + void *arg; + + /** Singly-linked list entry. */ + SLIST_ENTRY(ble_audio_event_listener) next; +}; + +/** + * Registers listener for BLE Audio events + * + * On success listener structure will be initialized automatically and does not + * need to be initialized prior to calling this function. To change callback + * and/or argument unregister listener first and register it again. + * + * @param[in] listener Listener structure + * @param[in] event_mask Optional event mask + * @param[in] fn Callback function + * @param[in] arg Optional callback argument + * + * @return 0 on success + * BLE_HS_EINVAL if no callback is specified + * BLE_HS_EALREADY if listener is already registered + */ +int ble_audio_event_listener_register(struct ble_audio_event_listener *listener, + ble_audio_event_fn *fn, void *arg); + +/** + * Unregisters listener for BLE Audio events + * + * @param[in] listener Listener structure + * + * @return 0 on success + * BLE_HS_ENOENT if listener was not registered + */ +int ble_audio_event_listener_unregister(struct ble_audio_event_listener *listener); + +/** + * BASE iterator + * + * The iterator structure used by @ref ble_audio_base_subgroup_iter and + * @ble_audio_base_bis_iter functions to iterate the BASE Level 2 and 3 elements + * (Subgroups and BISes). + * This should be used as an opaque structure and not modified manually. + * + * Example: + * @code{.c} + * struct ble_audio_base_iter subgroup_iter; + * struct ble_audio_base_iter bis_iter; + * struct ble_audio_base_group group; + * struct ble_audio_base_subgroup subgroup; + * struct ble_audio_base_bis bis; + * + * rc = ble_audio_base_parse(data, data_size, &group, &subgroup_iter); + * if (rc == 0) { + * for (uint8_t i = 0; i < group->num_subgroups; i++) { + * rc = ble_audio_base_subgroup_iter(&subgroup_iter, &subgroup, &bis_iter); + * if (rc == 0) { + * for (uint8_t j = 0; j < subgroup->num_bis; j++) { + * rc = ble_audio_base_bis_iter(&bis_iter, &bis); + * if (rc == 0) { + * foo(&group, &subgroup, &bis); + * } + * } + * } + * } + * } + * @endcode + */ +struct ble_audio_base_iter { + /** Data pointer */ + const uint8_t *data; + + /** Base length */ + uint8_t buf_len; + + /** Original BASE pointer */ + const uint8_t *buf; + + /** Remaining number of elements */ + uint8_t num_elements; +}; + +/** @brief Broadcast Audio Source Endpoint Group structure */ +struct ble_audio_base_group { + /** Presentation Delay */ + uint32_t presentation_delay; + + /** Number of subgroups */ + uint8_t num_subgroups; +}; + +/** + * Parse the BASE received from Basic Audio Announcement data. + * + * @param[in] data Pointer to the BASE data buffer to parse. + * @param[in] data_len Length of the BASE data buffer. + * @param[out] group Group object. + * @param[out] subgroup_iter Subgroup iterator object. + * + * @return 0 on success; nonzero on failure. + */ +int ble_audio_base_parse(const uint8_t *data, uint8_t data_len, + struct ble_audio_base_group *group, + struct ble_audio_base_iter *subgroup_iter); + +/** @brief Broadcast Audio Source Endpoint Subgroup structure */ +struct ble_audio_base_subgroup { + /** Codec information for the subgroup */ + struct ble_audio_codec_id codec_id; + + /** Length of the Codec Specific Configuration for the subgroup */ + uint8_t codec_spec_config_len; + + /** Codec Specific Configuration for the subgroup */ + const uint8_t *codec_spec_config; + + /** Length of the Metadata for the subgroup */ + uint8_t metadata_len; + + /** Series of LTV structures containing Metadata */ + const uint8_t *metadata; + + /** Number of BISes in the subgroup */ + uint8_t num_bis; +}; + +/** + * @brief Basic Audio Announcement Subgroup information + * + * @param[in] subgroup_iter Subgroup iterator object. + * @param[out] subgroup Subgroup object. + * @param[out] bis_iter BIS iterator object. + * + * @return 0 on success; + * A non-zero value on failure. + */ +int ble_audio_base_subgroup_iter(struct ble_audio_base_iter *subgroup_iter, + struct ble_audio_base_subgroup *subgroup, + struct ble_audio_base_iter *bis_iter); + +/** @brief Broadcast Audio Source Endpoint BIS structure */ +struct ble_audio_base_bis { + /** BIS_index value for the BIS */ + uint8_t index; + + /** Length of the Codec Specific Configuration for the BIS */ + uint8_t codec_spec_config_len; + + /** Codec Specific Configuration for the BIS */ + const uint8_t *codec_spec_config; +}; + +/** + * @brief Basic Audio Announcement Subgroup information + * + * @param[in] bis_iter BIS iterator object. + * @param[out] bis BIS object. + * + * @return 0 on success; + * A non-zero value on failure. + */ +int ble_audio_base_bis_iter(struct ble_audio_base_iter *bis_iter, + struct ble_audio_base_bis *bis); + /** Broadcast Isochronous Streams (BIS) */ struct ble_audio_bis { /** Pointer to next BIS in subgroup */ @@ -333,8 +588,4 @@ struct ble_audio_base { STAILQ_HEAD(, ble_audio_big_subgroup) subs; }; -/** - * @} - */ - -#endif /* H_BLE_AUDIO_COMMON_ */ +#endif /* H_BLE_AUDIO_ */ diff --git a/nimble/host/include/host/ble_audio_broadcast_source.h b/nimble/host/audio/include/audio/ble_audio_broadcast_source.h similarity index 99% rename from nimble/host/include/host/ble_audio_broadcast_source.h rename to nimble/host/audio/include/audio/ble_audio_broadcast_source.h index 605aa5b207..839449cbe3 100644 --- a/nimble/host/include/host/ble_audio_broadcast_source.h +++ b/nimble/host/audio/include/audio/ble_audio_broadcast_source.h @@ -33,7 +33,7 @@ #include #include "host/ble_gap.h" #include "host/ble_iso.h" -#include "host/ble_audio_common.h" +#include "ble_audio.h" /** Parameters used for creating BASE configuration. */ struct ble_broadcast_create_params { diff --git a/nimble/host/audio/include/host/audio/ble_audio.h b/nimble/host/audio/include/host/audio/ble_audio.h deleted file mode 100644 index 7d4200bb03..0000000000 --- a/nimble/host/audio/include/host/audio/ble_audio.h +++ /dev/null @@ -1,293 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -#ifndef H_BLE_AUDIO_ -#define H_BLE_AUDIO_ - -#include -#include - -#include "host/ble_audio_common.h" - -/** @brief Public Broadcast Announcement features bits */ -enum ble_audio_pub_bcst_announcement_feat { - /** Broadcast Stream Encryption */ - BLE_AUDIO_PUB_BCST_ANNOUNCEMENT_FEAT_ENCRYPTION = 1 << 0, - - /** Standard Quality Public Broadcast Audio */ - BLE_AUDIO_PUB_BCST_ANNOUNCEMENT_FEAT_SQ = 1 << 1, - - /** High Quality Public Broadcast Audio */ - BLE_AUDIO_PUB_BCST_ANNOUNCEMENT_FEAT_HQ = 1 << 2, -}; - -/** @brief Public Broadcast Announcement structure */ -struct ble_audio_pub_bcst_announcement { - /** Public Broadcast Announcement features bitfield */ - enum ble_audio_pub_bcst_announcement_feat features; - - /** Metadata length */ - uint8_t metadata_len; - - /** Metadata */ - const uint8_t *metadata; -}; - -struct ble_audio_bcst_name { - /** Broadcast Name length */ - uint8_t name_len; - - /** Broadcast Name */ - const char *name; -}; - -/** - * @defgroup ble_audio_events Bluetooth Low Energy Audio Events - * @{ - */ - -/** BLE Audio event: Broadcast Announcement */ -#define BLE_AUDIO_EVENT_BCST_ANNOUNCEMENT 0 - -/** @} */ - -/** @brief Broadcast Announcement */ -struct ble_audio_event_bcst_announcement { - /** Extended advertising report */ - const struct ble_gap_ext_disc_desc *ext_disc; - - /** Broadcast ID */ - uint32_t broadcast_id; - - /** Additional service data included in Broadcast Audio Announcement */ - const uint8_t *svc_data; - - /** Additional service data length */ - uint16_t svc_data_len; - - /** Optional Public Broadcast Announcement data */ - struct ble_audio_pub_bcst_announcement *pub_announcement_data; - - /** Optional Broadcast Name */ - struct ble_audio_bcst_name *name; -}; - -/** - * Represents a BLE Audio related event. When such an event occurs, the host - * notifies the application by passing an instance of this structure to an - * application-specified callback. - */ -struct ble_audio_event { - /** - * Indicates the type of BLE Audio event that occurred. This is one of the - * BLE_AUDIO_EVENT codes. - */ - uint8_t type; - - /** - * A discriminated union containing additional details concerning the event. - * The 'type' field indicates which member of the union is valid. - */ - union { - /** - * @ref BLE_AUDIO_EVENT_BCST_ANNOUNCEMENT - * - * Represents a received Broadcast Announcement. - */ - struct ble_audio_event_bcst_announcement bcst_announcement; - }; -}; - -/** Callback function type for handling BLE Audio events. */ -typedef int ble_audio_event_fn(struct ble_audio_event *event, void *arg); - -/** - * Event listener structure - * - * This should be used as an opaque structure and not modified manually. - */ -struct ble_audio_event_listener { - /** The function to call when a BLE Audio event occurs. */ - ble_audio_event_fn *fn; - - /** An optional argument to pass to the event handler function. */ - void *arg; - - /** Singly-linked list entry. */ - SLIST_ENTRY(ble_audio_event_listener) next; -}; - -/** - * Registers listener for BLE Audio events - * - * On success listener structure will be initialized automatically and does not - * need to be initialized prior to calling this function. To change callback - * and/or argument unregister listener first and register it again. - * - * @param[in] listener Listener structure - * @param[in] event_mask Optional event mask - * @param[in] fn Callback function - * @param[in] arg Optional callback argument - * - * @return 0 on success - * BLE_HS_EINVAL if no callback is specified - * BLE_HS_EALREADY if listener is already registered - */ -int ble_audio_event_listener_register(struct ble_audio_event_listener *listener, - ble_audio_event_fn *fn, void *arg); - -/** - * Unregisters listener for BLE Audio events - * - * @param[in] listener Listener structure - * - * @return 0 on success - * BLE_HS_ENOENT if listener was not registered - */ -int ble_audio_event_listener_unregister(struct ble_audio_event_listener *listener); - -/** - * BASE iterator - * - * The iterator structure used by @ref ble_audio_base_subgroup_iter and - * @ble_audio_base_bis_iter functions to iterate the BASE Level 2 and 3 elements - * (Subgroups and BISes). - * This should be used as an opaque structure and not modified manually. - * - * Example: - * @code{.c} - * struct ble_audio_base_iter subgroup_iter; - * struct ble_audio_base_iter bis_iter; - * struct ble_audio_base_group group; - * struct ble_audio_base_subgroup subgroup; - * struct ble_audio_base_bis bis; - * - * rc = ble_audio_base_parse(data, data_size, &group, &subgroup_iter); - * if (rc == 0) { - * for (uint8_t i = 0; i < group->num_subgroups; i++) { - * rc = ble_audio_base_subgroup_iter(&subgroup_iter, &subgroup, &bis_iter); - * if (rc == 0) { - * for (uint8_t j = 0; j < subgroup->num_bis; j++) { - * rc = ble_audio_base_bis_iter(&bis_iter, &bis); - * if (rc == 0) { - * foo(&group, &subgroup, &bis); - * } - * } - * } - * } - * } - * @endcode - */ -struct ble_audio_base_iter { - /** Data pointer */ - const uint8_t *data; - - /** Base length */ - uint8_t buf_len; - - /** Original BASE pointer */ - const uint8_t *buf; - - /** Remaining number of elements */ - uint8_t num_elements; -}; - -/** @brief Broadcast Audio Source Endpoint Group structure */ -struct ble_audio_base_group { - /** Presentation Delay */ - uint32_t presentation_delay; - - /** Number of subgroups */ - uint8_t num_subgroups; -}; - -/** - * Parse the BASE received from Basic Audio Announcement data. - * - * @param[in] data Pointer to the BASE data buffer to parse. - * @param[in] data_len Length of the BASE data buffer. - * @param[out] group Group object. - * @param[out] subgroup_iter Subgroup iterator object. - * - * @return 0 on success; nonzero on failure. - */ -int ble_audio_base_parse(const uint8_t *data, uint8_t data_len, - struct ble_audio_base_group *group, - struct ble_audio_base_iter *subgroup_iter); - -/** @brief Broadcast Audio Source Endpoint Subgroup structure */ -struct ble_audio_base_subgroup { - /** Codec information for the subgroup */ - struct ble_audio_codec_id codec_id; - - /** Length of the Codec Specific Configuration for the subgroup */ - uint8_t codec_spec_config_len; - - /** Codec Specific Configuration for the subgroup */ - const uint8_t *codec_spec_config; - - /** Length of the Metadata for the subgroup */ - uint8_t metadata_len; - - /** Series of LTV structures containing Metadata */ - const uint8_t *metadata; - - /** Number of BISes in the subgroup */ - uint8_t num_bis; -}; - -/** - * @brief Basic Audio Announcement Subgroup information - * - * @param[in] subgroup_iter Subgroup iterator object. - * @param[out] subgroup Subgroup object. - * @param[out] bis_iter BIS iterator object. - * - * @return 0 on success; - * A non-zero value on failure. - */ -int ble_audio_base_subgroup_iter(struct ble_audio_base_iter *subgroup_iter, - struct ble_audio_base_subgroup *subgroup, - struct ble_audio_base_iter *bis_iter); - -/** @brief Broadcast Audio Source Endpoint BIS structure */ -struct ble_audio_base_bis { - /** BIS_index value for the BIS */ - uint8_t index; - - /** Length of the Codec Specific Configuration for the BIS */ - uint8_t codec_spec_config_len; - - /** Codec Specific Configuration for the BIS */ - const uint8_t *codec_spec_config; -}; - -/** - * @brief Basic Audio Announcement Subgroup information - * - * @param[in] bis_iter BIS iterator object. - * @param[out] bis BIS object. - * - * @return 0 on success; - * A non-zero value on failure. - */ -int ble_audio_base_bis_iter(struct ble_audio_base_iter *bis_iter, - struct ble_audio_base_bis *bis); - -#endif /* H_BLE_AUDIO_ */ diff --git a/nimble/host/services/auracast/include/services/auracast/ble_svc_auracast.h b/nimble/host/audio/services/auracast/include/services/auracast/ble_svc_auracast.h similarity index 98% rename from nimble/host/services/auracast/include/services/auracast/ble_svc_auracast.h rename to nimble/host/audio/services/auracast/include/services/auracast/ble_svc_auracast.h index 560adb8b19..900b6fddaa 100644 --- a/nimble/host/services/auracast/include/services/auracast/ble_svc_auracast.h +++ b/nimble/host/audio/services/auracast/include/services/auracast/ble_svc_auracast.h @@ -19,8 +19,8 @@ #include #include "host/ble_gap.h" -#include "host/ble_audio_common.h" -#include "host/ble_audio_broadcast_source.h" +#include "audio/ble_audio.h" +#include "audio/ble_audio_broadcast_source.h" struct ble_svc_auracast_create_params { /** Broadcast Audio Source Endpoint */ diff --git a/nimble/host/services/auracast/pkg.yml b/nimble/host/audio/services/auracast/pkg.yml similarity index 93% rename from nimble/host/services/auracast/pkg.yml rename to nimble/host/audio/services/auracast/pkg.yml index a4d0013f93..a2533b29da 100644 --- a/nimble/host/services/auracast/pkg.yml +++ b/nimble/host/audio/services/auracast/pkg.yml @@ -16,7 +16,7 @@ # under the License. # -pkg.name: nimble/host/services/auracast +pkg.name: nimble/host/audio/services/auracast pkg.description: Implements Auracast service pkg.author: "Apache Mynewt " pkg.homepage: "http://mynewt.apache.org/" @@ -28,3 +28,4 @@ pkg.keywords: pkg.deps: - nimble/host + - nimble/host/audio diff --git a/nimble/host/services/auracast/src/ble_svc_auracast.c b/nimble/host/audio/services/auracast/src/ble_svc_auracast.c similarity index 98% rename from nimble/host/services/auracast/src/ble_svc_auracast.c rename to nimble/host/audio/services/auracast/src/ble_svc_auracast.c index 7bd9112dfc..b323e64bf0 100644 --- a/nimble/host/services/auracast/src/ble_svc_auracast.c +++ b/nimble/host/audio/services/auracast/src/ble_svc_auracast.c @@ -21,7 +21,7 @@ #include "host/ble_gap.h" #include "host/ble_hs.h" -#include "host/ble_audio_broadcast_source.h" +#include "audio/ble_audio_broadcast_source.h" #include "services/auracast/ble_svc_auracast.h" int diff --git a/nimble/host/audio/src/ble_audio.c b/nimble/host/audio/src/ble_audio.c index 61c42e4ff8..f7597aaf72 100644 --- a/nimble/host/audio/src/ble_audio.c +++ b/nimble/host/audio/src/ble_audio.c @@ -21,7 +21,7 @@ #include #include "host/ble_hs.h" -#include "host/audio/ble_audio.h" +#include "audio/ble_audio.h" #include "ble_audio_priv.h" @@ -29,24 +29,23 @@ static struct ble_gap_event_listener ble_audio_gap_event_listener; static SLIST_HEAD(, ble_audio_event_listener) ble_audio_event_listener_list = SLIST_HEAD_INITIALIZER(ble_audio_event_listener_list); -struct ble_audio_adv_parse_bcst_announcement_data { +struct ble_audio_adv_parse_broadcast_announcement_data { struct ble_audio_event event; - struct ble_audio_pub_bcst_announcement pub; - struct ble_audio_bcst_name name; + struct ble_audio_pub_broadcast_announcement pub; + struct ble_audio_broadcast_name name; bool success; }; static int -ble_audio_adv_parse_bcst_announcement(const struct ble_hs_adv_field *field, - void *user_data) +ble_audio_adv_parse_broadcast_announcement(const struct ble_hs_adv_field *field, void *user_data) { - struct ble_audio_adv_parse_bcst_announcement_data *data = user_data; - struct ble_audio_event_bcst_announcement *event; + struct ble_audio_adv_parse_broadcast_announcement_data *data = user_data; + struct ble_audio_event_broadcast_announcement *event; const uint8_t value_len = field->length - sizeof(field->length); ble_uuid16_t uuid16 = BLE_UUID16_INIT(0); uint8_t offset = 0; - event = &data->event.bcst_announcement; + event = &data->event.broadcast_announcement; data->success = false; @@ -139,15 +138,15 @@ ble_audio_gap_event(struct ble_gap_event *gap_event, void *arg) { switch (gap_event->type) { case BLE_GAP_EVENT_EXT_DISC: { - struct ble_audio_adv_parse_bcst_announcement_data data = { 0 }; + struct ble_audio_adv_parse_broadcast_announcement_data data = { 0 }; int rc; rc = ble_hs_adv_parse(gap_event->ext_disc.data, gap_event->ext_disc.length_data, - ble_audio_adv_parse_bcst_announcement, &data); + ble_audio_adv_parse_broadcast_announcement, &data); if (rc == 0 && data.success) { - data.event.type = BLE_AUDIO_EVENT_BCST_ANNOUNCEMENT; - data.event.bcst_announcement.ext_disc = &gap_event->ext_disc; + data.event.type = BLE_AUDIO_EVENT_BROADCAST_ANNOUNCEMENT; + data.event.broadcast_announcement.ext_disc = &gap_event->ext_disc; (void)ble_audio_event_listener_call(&data.event); } diff --git a/nimble/host/src/ble_audio_broadcast_source.c b/nimble/host/audio/src/ble_audio_broadcast_source.c similarity index 99% rename from nimble/host/src/ble_audio_broadcast_source.c rename to nimble/host/audio/src/ble_audio_broadcast_source.c index 2891658182..d243a5f197 100644 --- a/nimble/host/src/ble_audio_broadcast_source.c +++ b/nimble/host/audio/src/ble_audio_broadcast_source.c @@ -18,7 +18,7 @@ */ #include "host/ble_uuid.h" -#include "host/ble_audio_broadcast_source.h" +#include "audio/ble_audio_broadcast_source.h" #include "os/util.h" @@ -35,7 +35,7 @@ struct ble_audio_broadcast { static SLIST_HEAD(, ble_audio_broadcast) ble_audio_broadcasts; static struct os_mempool ble_audio_broadcast_pool; static os_membuf_t ble_audio_broadcast_mem[ - OS_MEMPOOL_SIZE(MYNEWT_VAL(BLE_MAX_BIG), + OS_MEMPOOL_SIZE(MYNEWT_VAL(BLE_ISO_MAX_BIGS), sizeof(struct ble_audio_broadcast))]; static bool @@ -483,7 +483,7 @@ ble_audio_broadcast_init(void) SLIST_INIT(&ble_audio_broadcasts); rc = os_mempool_init(&ble_audio_broadcast_pool, - MYNEWT_VAL(BLE_MAX_BIG), + MYNEWT_VAL(BLE_ISO_MAX_BIGS), sizeof(struct ble_audio_broadcast), ble_audio_broadcast_mem, "ble_audio_broadcast_pool"); SYSINIT_PANIC_ASSERT(rc == 0); diff --git a/nimble/host/audio/src/ble_audio_priv.h b/nimble/host/audio/src/ble_audio_priv.h index bedbdaf058..10f0109ddc 100644 --- a/nimble/host/audio/src/ble_audio_priv.h +++ b/nimble/host/audio/src/ble_audio_priv.h @@ -20,7 +20,7 @@ #ifndef H_BLE_AUDIO_PRIV_ #define H_BLE_AUDIO_PRIV_ -#include "host/audio/ble_audio.h" +#include "audio/ble_audio.h" int ble_audio_event_listener_call(struct ble_audio_event *event); diff --git a/nimble/host/audio/targets/btshell_native/syscfg.yml b/nimble/host/audio/targets/btshell_native/syscfg.yml index d631ea7987..e9db007074 100644 --- a/nimble/host/audio/targets/btshell_native/syscfg.yml +++ b/nimble/host/audio/targets/btshell_native/syscfg.yml @@ -61,8 +61,8 @@ syscfg.vals: BLE_VERSION: 54 BLE_ISO_BROADCAST_SINK: 1 BLE_ISO_BROADCAST_SOURCE: 1 - BLE_MAX_BIG: 1 - BLE_MAX_BIS: 2 + BLE_ISO_MAX_BIGS: 1 + BLE_ISO_MAX_BISES: 2 CONSOLE_UART: 1 CONSOLE_UART_BAUD: 1000000 diff --git a/nimble/host/audio/test/src/testcases/ble_audio_base_parse_test.c b/nimble/host/audio/test/src/testcases/ble_audio_base_parse_test.c index 2398d62dd2..3231b8539b 100644 --- a/nimble/host/audio/test/src/testcases/ble_audio_base_parse_test.c +++ b/nimble/host/audio/test/src/testcases/ble_audio_base_parse_test.c @@ -20,7 +20,7 @@ #include "testutil/testutil.h" #include "host/ble_hs.h" -#include "host/audio/ble_audio.h" +#include "audio/ble_audio.h" /** * BAP_v1.0.1 Table 3.16 diff --git a/nimble/host/audio/test/src/testcases/ble_audio_listener_register_test.c b/nimble/host/audio/test/src/testcases/ble_audio_listener_register_test.c index f55b51a3c3..363632ecba 100644 --- a/nimble/host/audio/test/src/testcases/ble_audio_listener_register_test.c +++ b/nimble/host/audio/test/src/testcases/ble_audio_listener_register_test.c @@ -20,7 +20,7 @@ #include "testutil/testutil.h" #include "host/ble_hs.h" -#include "host/audio/ble_audio.h" +#include "audio/ble_audio.h" static struct ble_audio_event_listener event_listener; diff --git a/nimble/host/include/host/ble_iso.h b/nimble/host/include/host/ble_iso.h index cdd3df881d..1bae3366d4 100644 --- a/nimble/host/include/host/ble_iso.h +++ b/nimble/host/include/host/ble_iso.h @@ -109,7 +109,7 @@ struct ble_iso_big_desc { uint8_t num_bis; /** The connection handles of all the BIS in the BIG. */ - uint16_t conn_handle[MYNEWT_VAL(BLE_MAX_BIS)]; + uint16_t conn_handle[MYNEWT_VAL(BLE_ISO_MAX_BISES)]; }; /** @brief Received ISO Data status possible values */ diff --git a/nimble/host/pkg.yml b/nimble/host/pkg.yml index cab496caed..b4df8f8712 100644 --- a/nimble/host/pkg.yml +++ b/nimble/host/pkg.yml @@ -32,6 +32,9 @@ pkg.deps: - nimble - nimble/transport +pkg.deps.BLE_AUDIO: + - nimble/host/audio + pkg.deps.BLE_SM_LEGACY: - "@apache-mynewt-core/crypto/tinycrypt" diff --git a/nimble/host/src/ble_hs.c b/nimble/host/src/ble_hs.c index d084c041a1..147837d9f3 100644 --- a/nimble/host/src/ble_hs.c +++ b/nimble/host/src/ble_hs.c @@ -24,7 +24,9 @@ #include "syscfg/syscfg.h" #include "stats/stats.h" #include "host/ble_hs.h" -#include "host/ble_audio_broadcast_source.h" +#if MYNEWT_VAL(BLE_ISO_BROADCAST_SOURCE) +#include "audio/ble_audio_broadcast_source.h" +#endif #include "ble_hs_priv.h" #include "ble_iso_priv.h" #include "nimble/nimble_npl.h" diff --git a/nimble/host/src/ble_iso.c b/nimble/host/src/ble_iso.c index 90bd613d05..503cdd0d03 100644 --- a/nimble/host/src/ble_iso.c +++ b/nimble/host/src/ble_iso.c @@ -87,10 +87,10 @@ static SLIST_HEAD(, ble_iso_big) ble_iso_bigs; static SLIST_HEAD(, ble_iso_conn) ble_iso_conns; static struct os_mempool ble_iso_big_pool; static os_membuf_t ble_iso_big_mem[ - OS_MEMPOOL_SIZE(MYNEWT_VAL(BLE_MAX_BIG), sizeof (struct ble_iso_big))]; + OS_MEMPOOL_SIZE(MYNEWT_VAL(BLE_ISO_MAX_BIGS), sizeof (struct ble_iso_big))]; static struct os_mempool ble_iso_bis_pool; static os_membuf_t ble_iso_bis_mem[ - OS_MEMPOOL_SIZE(MYNEWT_VAL(BLE_MAX_BIS), sizeof (struct ble_iso_bis))]; + OS_MEMPOOL_SIZE(MYNEWT_VAL(BLE_ISO_MAX_BISES), sizeof (struct ble_iso_bis))]; static void ble_iso_conn_append(struct ble_iso_conn *conn) @@ -234,7 +234,7 @@ ble_iso_create_big(const struct ble_iso_create_big_params *create_params, struct ble_iso_big *big; cp.adv_handle = create_params->adv_handle; - if (create_params->bis_cnt > MYNEWT_VAL(BLE_MAX_BIS)) { + if (create_params->bis_cnt > MYNEWT_VAL(BLE_ISO_MAX_BISES)) { return BLE_HS_EINVAL; } @@ -498,7 +498,7 @@ ble_iso_big_sync_create(const struct ble_iso_big_sync_create_params *param, uint8_t *big_handle) { struct ble_hci_le_big_create_sync_cp *cp; - uint8_t buf[sizeof(*cp) + MYNEWT_VAL(BLE_MAX_BIS)]; + uint8_t buf[sizeof(*cp) + MYNEWT_VAL(BLE_ISO_MAX_BISES)]; struct ble_iso_big *big; int rc; @@ -922,13 +922,13 @@ ble_iso_init(void) SLIST_INIT(&ble_iso_bigs); rc = os_mempool_init(&ble_iso_big_pool, - MYNEWT_VAL(BLE_MAX_BIG), + MYNEWT_VAL(BLE_ISO_MAX_BIGS), sizeof (struct ble_iso_big), ble_iso_big_mem, "ble_iso_big_pool"); SYSINIT_PANIC_ASSERT(rc == 0); rc = os_mempool_init(&ble_iso_bis_pool, - MYNEWT_VAL(BLE_MAX_BIS), + MYNEWT_VAL(BLE_ISO_MAX_BISES), sizeof (struct ble_iso_bis), ble_iso_bis_mem, "ble_iso_bis_pool"); SYSINIT_PANIC_ASSERT(rc == 0); diff --git a/nimble/host/syscfg.yml b/nimble/host/syscfg.yml index faaaa0052d..2848b648d1 100644 --- a/nimble/host/syscfg.yml +++ b/nimble/host/syscfg.yml @@ -440,6 +440,11 @@ syscfg.defs: that have been enabled in the stack, such as GATT support. value: 0 + BLE_AUDIO: + description: 'This option enables Bluetooth LE Audio support' + value: 0 + experimental: 1 + # Flow control settings. BLE_HS_FLOW_CTRL: description: > @@ -493,20 +498,6 @@ syscfg.defs: supported by host. value: 0 - BLE_MAX_BIG: - desciptrion: > - Number of available BIGs - value: 'MYNEWT_VAL_BLE_MULTI_ADV_INSTANCES' - restrictions: - - 'BLE_ISO_BROADCAST_SOURCE if 0' - - BLE_MAX_BIS: - description: > - Number of supported BISes - value: 4 - restrictions: - - 'BLE_ISO_BROADCAST_SOURCE if 0' - ### Log settings. BLE_HS_LOG_MOD: @@ -523,6 +514,20 @@ syscfg.defs: description: 'Minimum level for the BLE EATT log.' value: 1 + BLE_ISO_MAX_BIGS: + desciptrion: > + Number of available BIGs + value: 'MYNEWT_VAL_BLE_MULTI_ADV_INSTANCES' + restrictions: + - 'BLE_ISO_BROADCAST_SOURCE if 0' + + BLE_ISO_MAX_BISES: + description: > + Number of supported BISes + value: 4 + restrictions: + - 'BLE_ISO_BROADCAST_SOURCE if 0' + syscfg.logs: BLE_HS_LOG: module: MYNEWT_VAL(BLE_HS_LOG_MOD) diff --git a/porting/examples/linux/include/syscfg/syscfg.h b/porting/examples/linux/include/syscfg/syscfg.h index 86da373817..6571329582 100644 --- a/porting/examples/linux/include/syscfg/syscfg.h +++ b/porting/examples/linux/include/syscfg/syscfg.h @@ -803,12 +803,12 @@ #define MYNEWT_VAL_BLE_L2CAP_SIG_MAX_PROCS (1) #endif -#ifndef MYNEWT_VAL_BLE_MAX_BIG -#define MYNEWT_VAL_BLE_MAX_BIG (MYNEWT_VAL_BLE_MULTI_ADV_INSTANCES) +#ifndef MYNEWT_VAL_BLE_ISO_MAX_BIGS +#define MYNEWT_VAL_BLE_ISO_MAX_BIGS (MYNEWT_VAL_BLE_MULTI_ADV_INSTANCES) #endif -#ifndef MYNEWT_VAL_BLE_MAX_BIS -#define MYNEWT_VAL_BLE_MAX_BIS (4) +#ifndef MYNEWT_VAL_BLE_ISO_MAX_BISES +#define MYNEWT_VAL_BLE_ISO_MAX_BISES (4) #endif #ifndef MYNEWT_VAL_BLE_MESH diff --git a/porting/examples/linux_blemesh/include/syscfg/syscfg.h b/porting/examples/linux_blemesh/include/syscfg/syscfg.h index c44af9c58d..8321199654 100644 --- a/porting/examples/linux_blemesh/include/syscfg/syscfg.h +++ b/porting/examples/linux_blemesh/include/syscfg/syscfg.h @@ -804,12 +804,12 @@ #define MYNEWT_VAL_BLE_L2CAP_SIG_MAX_PROCS (1) #endif -#ifndef MYNEWT_VAL_BLE_MAX_BIG -#define MYNEWT_VAL_BLE_MAX_BIG (MYNEWT_VAL_BLE_MULTI_ADV_INSTANCES) +#ifndef MYNEWT_VAL_BLE_ISO_MAX_BIGS +#define MYNEWT_VAL_BLE_ISO_MAX_BIGS (MYNEWT_VAL_BLE_MULTI_ADV_INSTANCES) #endif -#ifndef MYNEWT_VAL_BLE_MAX_BIS -#define MYNEWT_VAL_BLE_MAX_BIS (4) +#ifndef MYNEWT_VAL_BLE_ISO_MAX_BISES +#define MYNEWT_VAL_BLE_ISO_MAX_BISES (4) #endif /* Overridden by @apache-mynewt-nimble/porting/targets/linux_blemesh (defined by @apache-mynewt-nimble/nimble/host) */ diff --git a/porting/examples/nuttx/include/syscfg/syscfg.h b/porting/examples/nuttx/include/syscfg/syscfg.h index d087c57451..af7f7992cb 100644 --- a/porting/examples/nuttx/include/syscfg/syscfg.h +++ b/porting/examples/nuttx/include/syscfg/syscfg.h @@ -803,12 +803,12 @@ #define MYNEWT_VAL_BLE_L2CAP_SIG_MAX_PROCS (1) #endif -#ifndef MYNEWT_VAL_BLE_MAX_BIG -#define MYNEWT_VAL_BLE_MAX_BIG (MYNEWT_VAL_BLE_MULTI_ADV_INSTANCES) +#ifndef MYNEWT_VAL_BLE_ISO_MAX_BIGS +#define MYNEWT_VAL_BLE_ISO_MAX_BIGS (MYNEWT_VAL_BLE_MULTI_ADV_INSTANCES) #endif -#ifndef MYNEWT_VAL_BLE_MAX_BIS -#define MYNEWT_VAL_BLE_MAX_BIS (4) +#ifndef MYNEWT_VAL_BLE_ISO_MAX_BISES +#define MYNEWT_VAL_BLE_ISO_MAX_BISES (4) #endif #ifndef MYNEWT_VAL_BLE_MESH diff --git a/porting/nimble/include/syscfg/syscfg.h b/porting/nimble/include/syscfg/syscfg.h index 4910e54e68..c62bb02c50 100644 --- a/porting/nimble/include/syscfg/syscfg.h +++ b/porting/nimble/include/syscfg/syscfg.h @@ -802,12 +802,12 @@ #define MYNEWT_VAL_BLE_L2CAP_SIG_MAX_PROCS (1) #endif -#ifndef MYNEWT_VAL_BLE_MAX_BIG -#define MYNEWT_VAL_BLE_MAX_BIG (MYNEWT_VAL_BLE_MULTI_ADV_INSTANCES) +#ifndef MYNEWT_VAL_BLE_ISO_MAX_BIGS +#define MYNEWT_VAL_BLE_ISO_MAX_BIGS (MYNEWT_VAL_BLE_MULTI_ADV_INSTANCES) #endif -#ifndef MYNEWT_VAL_BLE_MAX_BIS -#define MYNEWT_VAL_BLE_MAX_BIS (4) +#ifndef MYNEWT_VAL_BLE_ISO_MAX_BISES +#define MYNEWT_VAL_BLE_ISO_MAX_BISES (4) #endif #ifndef MYNEWT_VAL_BLE_MESH diff --git a/porting/npl/riot/include/syscfg/syscfg.h b/porting/npl/riot/include/syscfg/syscfg.h index b70ba2b992..27047feb56 100644 --- a/porting/npl/riot/include/syscfg/syscfg.h +++ b/porting/npl/riot/include/syscfg/syscfg.h @@ -1719,12 +1719,12 @@ #define MYNEWT_VAL_BLE_L2CAP_SIG_MAX_PROCS (1) #endif -#ifndef MYNEWT_VAL_BLE_MAX_BIG -#define MYNEWT_VAL_BLE_MAX_BIG (MYNEWT_VAL_BLE_MULTI_ADV_INSTANCES) +#ifndef MYNEWT_VAL_BLE_ISO_MAX_BIGS +#define MYNEWT_VAL_BLE_ISO_MAX_BIGS (MYNEWT_VAL_BLE_MULTI_ADV_INSTANCES) #endif -#ifndef MYNEWT_VAL_BLE_MAX_BIS -#define MYNEWT_VAL_BLE_MAX_BIS (4) +#ifndef MYNEWT_VAL_BLE_ISO_MAX_BISES +#define MYNEWT_VAL_BLE_ISO_MAX_BISES (4) #endif #ifndef MYNEWT_VAL_BLE_MESH diff --git a/targets/nordic_pca10095_net-blehci_broadcaster/syscfg.yml b/targets/nordic_pca10095_net-blehci_broadcaster/syscfg.yml index d3255ff1c6..b86d58872c 100644 --- a/targets/nordic_pca10095_net-blehci_broadcaster/syscfg.yml +++ b/targets/nordic_pca10095_net-blehci_broadcaster/syscfg.yml @@ -43,5 +43,5 @@ syscfg.vals: BLE_VERSION: 54 BLE_ISO: 1 BLE_ISO_BROADCAST_SOURCE: 1 - BLE_MAX_BIG: 1 - BLE_MAX_BIS: 2 + BLE_ISO_MAX_BIGS: 1 + BLE_ISO_MAX_BISES: 2