mirror of
https://github.com/espressif/esp-nimble.git
synced 2026-06-05 21:04:49 +00:00
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.
This commit is contained in:
committed by
Krzysztof Kopyściński
parent
409aac4866
commit
a04a6d2ce6
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
BLE_AUDIO: 1
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
+21
-19
@@ -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);
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
+271
-20
@@ -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 <stdint.h>
|
||||
#include <sys/queue.h>
|
||||
|
||||
/**
|
||||
* @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_ */
|
||||
+1
-1
@@ -33,7 +33,7 @@
|
||||
#include <stdint.h>
|
||||
#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 {
|
||||
@@ -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 <stdint.h>
|
||||
#include <sys/queue.h>
|
||||
|
||||
#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_ */
|
||||
+2
-2
@@ -19,8 +19,8 @@
|
||||
|
||||
#include <stdint.h>
|
||||
#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 */
|
||||
@@ -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 <dev@mynewt.apache.org>"
|
||||
pkg.homepage: "http://mynewt.apache.org/"
|
||||
@@ -28,3 +28,4 @@ pkg.keywords:
|
||||
|
||||
pkg.deps:
|
||||
- nimble/host
|
||||
- nimble/host/audio
|
||||
+1
-1
@@ -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
|
||||
@@ -21,7 +21,7 @@
|
||||
#include <stddef.h>
|
||||
|
||||
#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);
|
||||
}
|
||||
|
||||
+3
-3
@@ -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);
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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);
|
||||
|
||||
+19
-14
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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) */
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user