nRF Connect SDK API 3.3.99
Loading...
Searching...
No Matches
broadcast_source.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2023 Nordic Semiconductor ASA
3 *
4 * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
5 */
6
15#ifndef _BROADCAST_SOURCE_H_
16#define _BROADCAST_SOURCE_H_
17
18#include <zephyr/bluetooth/audio/cap.h>
19#include <zephyr/bluetooth/audio/bap_lc3_preset.h>
20#include "bt_le_audio_tx.h"
21
22#if CONFIG_BT_AUDIO_BROADCAST_CONFIGURABLE
23#define BT_BAP_LC3_BROADCAST_PRESET_NRF_AUDIO \
24 BT_BAP_LC3_PRESET_CONFIGURABLE( \
25 BT_AUDIO_LOCATION_FRONT_LEFT | BT_AUDIO_LOCATION_FRONT_RIGHT, \
26 BT_AUDIO_CONTEXT_TYPE_MEDIA, CONFIG_BT_AUDIO_BITRATE_BROADCAST_SRC)
27
28#elif CONFIG_BT_BAP_BROADCAST_16_2_1
29#define BT_BAP_LC3_BROADCAST_PRESET_NRF_AUDIO \
30 BT_BAP_LC3_BROADCAST_PRESET_16_2_1(BT_AUDIO_LOCATION_FRONT_LEFT | \
31 BT_AUDIO_LOCATION_FRONT_RIGHT, \
32 BT_AUDIO_CONTEXT_TYPE_MEDIA)
33
34#elif CONFIG_BT_BAP_BROADCAST_16_2_2
35#define BT_BAP_LC3_BROADCAST_PRESET_NRF_AUDIO \
36 BT_BAP_LC3_BROADCAST_PRESET_16_2_2(BT_AUDIO_LOCATION_FRONT_LEFT | \
37 BT_AUDIO_LOCATION_FRONT_RIGHT, \
38 BT_AUDIO_CONTEXT_TYPE_MEDIA)
39
40#elif CONFIG_BT_BAP_BROADCAST_24_2_1
41#define BT_BAP_LC3_BROADCAST_PRESET_NRF_AUDIO \
42 BT_BAP_LC3_BROADCAST_PRESET_24_2_1(BT_AUDIO_LOCATION_FRONT_LEFT | \
43 BT_AUDIO_LOCATION_FRONT_RIGHT, \
44 BT_AUDIO_CONTEXT_TYPE_MEDIA)
45
46#elif CONFIG_BT_BAP_BROADCAST_24_2_2
47#define BT_BAP_LC3_BROADCAST_PRESET_NRF_AUDIO \
48 BT_BAP_LC3_BROADCAST_PRESET_24_2_2(BT_AUDIO_LOCATION_FRONT_LEFT | \
49 BT_AUDIO_LOCATION_FRONT_RIGHT, \
50 BT_AUDIO_CONTEXT_TYPE_MEDIA)
51
52#elif CONFIG_BT_BAP_BROADCAST_48_2_1
53#define BT_BAP_LC3_BROADCAST_PRESET_NRF_AUDIO \
54 BT_BAP_LC3_BROADCAST_PRESET_48_2_1(BT_AUDIO_LOCATION_FRONT_LEFT | \
55 BT_AUDIO_LOCATION_FRONT_RIGHT, \
56 BT_AUDIO_CONTEXT_TYPE_MEDIA)
57#elif CONFIG_BT_BAP_BROADCAST_48_2_2
58#define BT_BAP_LC3_BROADCAST_PRESET_NRF_AUDIO \
59 BT_BAP_LC3_BROADCAST_PRESET_48_2_2(BT_AUDIO_LOCATION_FRONT_LEFT | \
60 BT_AUDIO_LOCATION_FRONT_RIGHT, \
61 BT_AUDIO_CONTEXT_TYPE_MEDIA)
62
63#elif CONFIG_BT_BAP_BROADCAST_48_4_1
64#define BT_BAP_LC3_BROADCAST_PRESET_NRF_AUDIO \
65 BT_BAP_LC3_BROADCAST_PRESET_48_4_1(BT_AUDIO_LOCATION_FRONT_LEFT | \
66 BT_AUDIO_LOCATION_FRONT_RIGHT, \
67 BT_AUDIO_CONTEXT_TYPE_MEDIA)
68
69#elif CONFIG_BT_BAP_BROADCAST_48_4_2
70#define BT_BAP_LC3_BROADCAST_PRESET_NRF_AUDIO \
71 BT_BAP_LC3_BROADCAST_PRESET_48_4_2(BT_AUDIO_LOCATION_FRONT_LEFT | \
72 BT_AUDIO_LOCATION_FRONT_RIGHT, \
73 BT_AUDIO_CONTEXT_TYPE_MEDIA)
74
75#elif CONFIG_BT_BAP_BROADCAST_48_6_1
76#define BT_BAP_LC3_BROADCAST_PRESET_NRF_AUDIO \
77 BT_BAP_LC3_BROADCAST_PRESET_48_6_1(BT_AUDIO_LOCATION_FRONT_LEFT | \
78 BT_AUDIO_LOCATION_FRONT_RIGHT, \
79 BT_AUDIO_CONTEXT_TYPE_MEDIA)
80
81#elif CONFIG_BT_BAP_BROADCAST_48_6_2
82#define BT_BAP_LC3_BROADCAST_PRESET_NRF_AUDIO \
83 BT_BAP_LC3_BROADCAST_PRESET_48_6_2(BT_AUDIO_LOCATION_FRONT_LEFT | \
84 BT_AUDIO_LOCATION_FRONT_RIGHT, \
85 BT_AUDIO_CONTEXT_TYPE_MEDIA)
86#else
87#error Unsupported LC3 codec preset for broadcast
88#endif /* CONFIG_BT_AUDIO_BROADCAST_CONFIGURABLE */
89
90/* Size of the Public Broadcast Announcement header, 2-octet Service UUID followed by
91 * an octet for the features and an octet for the length of the meta data field.
92 */
93#define BROADCAST_SOURCE_PBA_HEADER_SIZE (BT_UUID_SIZE_16 + (sizeof(uint8_t) * 2))
94
95#define BROADCAST_SOURCE_ADV_NAME_MAX (32)
96#define BROADCAST_SOURCE_ADV_ID_START (BT_UUID_SIZE_16)
97
99 enum bt_audio_location *location;
100 uint8_t num_bises;
101 enum bt_audio_context context;
102 struct bt_bap_lc3_preset group_lc3_preset;
104};
105
109 uint8_t packing;
111 uint8_t broadcast_code[BT_ISO_BROADCAST_CODE_SIZE];
113 char adv_name[CONFIG_BT_DEVICE_NAME_MAX + 1];
115 uint32_t broadcast_id;
116};
117
122 /* Broadcast Audio Streaming UUIDs. */
123 struct net_buf_simple *uuid_buf;
124
125 /* Broadcast Audio Streaming Endpoint advertising data. */
126 uint8_t brdcst_id_buf[BT_UUID_SIZE_16 + BT_AUDIO_BROADCAST_ID_SIZE];
127
128 /* Buffer for Appearance. */
129 uint8_t brdcst_appearance_buf[(sizeof(uint8_t) * 2)];
130
131 /* Broadcast name, must be between 4 and 32 UTF-8 encoded characters in length. */
133
134#if (CONFIG_AURACAST)
135 /* Number of free metadata items */
136 uint8_t pba_metadata_vacant_cnt;
137
138 /* Public Broadcast Announcement buffer. */
139 uint8_t *pba_buf;
140#endif /* (CONFIG_AURACAST) */
141};
142
147 /* Buffer for periodic advertising data */
148 struct net_buf_simple *base_buf;
149};
150
166int broadcast_source_ext_adv_populate(uint8_t big_index, bool fixed_id, uint32_t broadcast_id,
167 struct broadcast_source_ext_adv_data *ext_adv_data,
168 struct bt_data *ext_adv_buf, size_t ext_adv_buf_vacant);
169
182 struct broadcast_source_per_adv_data *per_adv_data,
183 struct bt_data *per_adv_buf, size_t per_adv_buf_vacant);
184
194bool broadcast_source_is_streaming(uint8_t big_index);
195
205int broadcast_source_start(uint8_t big_index, struct bt_le_ext_adv *ext_adv);
206
214int broadcast_source_stop(uint8_t big_index);
215
228int broadcast_source_id_get(uint8_t big_index, uint32_t *broadcast_id);
229
239int broadcast_source_send(struct net_buf const *const audio_frame, uint8_t big_index,
240 uint8_t subgroup_index);
241
249int broadcast_source_disable(uint8_t big_index);
250
261
271int broadcast_source_enable(struct broadcast_source_big const *const broadcast_param,
272 uint8_t big_index);
273
279#endif /* _BROADCAST_SOURCE_H_ */
int broadcast_source_enable(struct broadcast_source_big const *const broadcast_param, uint8_t big_index)
Enable the LE Audio broadcast (BIS) source.
int broadcast_source_per_adv_populate(uint8_t big_index, struct broadcast_source_per_adv_data *per_adv_data, struct bt_data *per_adv_buf, size_t per_adv_buf_vacant)
Populate the periodic advertising data buffer.
int broadcast_source_id_get(uint8_t big_index, uint32_t *broadcast_id)
Get the broadcast ID for the given Broadcast Isochronous Group (BIG).
int broadcast_source_disable(uint8_t big_index)
Disable the LE Audio broadcast (BIS) source.
int broadcast_source_start(uint8_t big_index, struct bt_le_ext_adv *ext_adv)
Start the Bluetooth LE Audio broadcast (BIS) source.
bool broadcast_source_is_streaming(uint8_t big_index)
Check if the broadcast source is streaming.
#define BROADCAST_SOURCE_ADV_NAME_MAX
Definition broadcast_source.h:95
int broadcast_source_ext_adv_populate(uint8_t big_index, bool fixed_id, uint32_t broadcast_id, struct broadcast_source_ext_adv_data *ext_adv_data, struct bt_data *ext_adv_buf, size_t ext_adv_buf_vacant)
Populate the extended advertising data buffer.
int broadcast_source_send(struct net_buf const *const audio_frame, uint8_t big_index, uint8_t subgroup_index)
Broadcast the Bluetooth LE Audio data.
int broadcast_source_stop(uint8_t big_index)
Stop the Bluetooth LE Audio broadcast (BIS) source.
void broadcast_source_default_create(struct broadcast_source_big *broadcast_param)
Create a set up for a default broadcaster.
uint8_t packing
Definition broadcast_source.h:109
bool fixed_id
Definition broadcast_source.h:114
char broadcast_name[(32)+1]
Definition broadcast_source.h:112
bool encryption
Definition broadcast_source.h:110
uint8_t num_subgroups
Definition broadcast_source.h:108
uint32_t broadcast_id
Definition broadcast_source.h:115
uint8_t broadcast_code[BT_ISO_BROADCAST_CODE_SIZE]
Definition broadcast_source.h:111
struct subgroup_config * subgroups
Definition broadcast_source.h:107
char adv_name[CONFIG_BT_DEVICE_NAME_MAX+1]
Definition broadcast_source.h:113
Definition broadcast_source.h:106
uint8_t brdcst_appearance_buf[(sizeof(uint8_t) *2)]
Definition broadcast_source.h:129
uint8_t brdcst_name_buf[(32)]
Definition broadcast_source.h:132
uint8_t brdcst_id_buf[BT_UUID_SIZE_16+BT_AUDIO_BROADCAST_ID_SIZE]
Definition broadcast_source.h:126
struct net_buf_simple * uuid_buf
Definition broadcast_source.h:123
Advertising data for broadcast source.
Definition broadcast_source.h:121
struct net_buf_simple * base_buf
Definition broadcast_source.h:148
Periodic advertising data for broadcast source.
Definition broadcast_source.h:146
enum bt_audio_context context
Definition broadcast_source.h:101
enum bt_audio_location * location
Definition broadcast_source.h:99
uint8_t num_bises
Definition broadcast_source.h:100
struct bt_bap_lc3_preset group_lc3_preset
Definition broadcast_source.h:102
char * preset_name
Definition broadcast_source.h:103
Definition broadcast_source.h:98