Bluetooth: Audio: Shell: Split audio_ad_data_add into two
The call to audio_ad_data_add will now either call connectable_ad_data_add for connectable advertising, or unconnectable_ad_data_add for unconnectbale advertising. Most service UUIDs etc. does not make sense to advertise if not connectable. This also adds the BAP broadcast advertising data to unconnectable. Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
This commit is contained in:
parent
f0b104346a
commit
d115bafd40
1 changed files with 80 additions and 7 deletions
|
@ -2133,8 +2133,8 @@ static int cmd_audio(const struct shell *sh, size_t argc, char **argv)
|
||||||
SHELL_CMD_ARG_REGISTER(audio, &audio_cmds, "Bluetooth audio shell commands",
|
SHELL_CMD_ARG_REGISTER(audio, &audio_cmds, "Bluetooth audio shell commands",
|
||||||
cmd_audio, 1, 1);
|
cmd_audio, 1, 1);
|
||||||
|
|
||||||
ssize_t audio_ad_data_add(struct bt_data *data_array, const size_t data_array_size,
|
static ssize_t connectable_ad_data_add(struct bt_data *data_array,
|
||||||
const bool discoverable, const bool connectable)
|
size_t data_array_size)
|
||||||
{
|
{
|
||||||
static const uint8_t ad_ext_uuid16[] = {
|
static const uint8_t ad_ext_uuid16[] = {
|
||||||
IF_ENABLED(CONFIG_BT_MICP_MIC_DEV, (BT_UUID_16_ENCODE(BT_UUID_MICS_VAL),))
|
IF_ENABLED(CONFIG_BT_MICP_MIC_DEV, (BT_UUID_16_ENCODE(BT_UUID_MICS_VAL),))
|
||||||
|
@ -2148,10 +2148,6 @@ ssize_t audio_ad_data_add(struct bt_data *data_array, const size_t data_array_si
|
||||||
};
|
};
|
||||||
size_t ad_len = 0;
|
size_t ad_len = 0;
|
||||||
|
|
||||||
if (!discoverable) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (IS_ENABLED(CONFIG_BT_ASCS)) {
|
if (IS_ENABLED(CONFIG_BT_ASCS)) {
|
||||||
static uint8_t ad_bap_announcement[8] = {
|
static uint8_t ad_bap_announcement[8] = {
|
||||||
BT_UUID_16_ENCODE(BT_UUID_ASCS_VAL),
|
BT_UUID_16_ENCODE(BT_UUID_ASCS_VAL),
|
||||||
|
@ -2196,7 +2192,7 @@ ssize_t audio_ad_data_add(struct bt_data *data_array, const size_t data_array_si
|
||||||
|
|
||||||
data_array[ad_len].type = BT_DATA_UUID16_SOME;
|
data_array[ad_len].type = BT_DATA_UUID16_SOME;
|
||||||
|
|
||||||
if (IS_ENABLED(CONFIG_BT_HAS) && IS_ENABLED(CONFIG_BT_PRIVACY) && connectable) {
|
if (IS_ENABLED(CONFIG_BT_HAS) && IS_ENABLED(CONFIG_BT_PRIVACY)) {
|
||||||
/* If the HA is in one of the GAP connectable modes and is using a
|
/* If the HA is in one of the GAP connectable modes and is using a
|
||||||
* resolvable private address, the HA shall not include the Hearing Access
|
* resolvable private address, the HA shall not include the Hearing Access
|
||||||
* Service UUID in the Service UUID AD type field of the advertising data
|
* Service UUID in the Service UUID AD type field of the advertising data
|
||||||
|
@ -2213,3 +2209,80 @@ ssize_t audio_ad_data_add(struct bt_data *data_array, const size_t data_array_si
|
||||||
|
|
||||||
return ad_len;
|
return ad_len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static ssize_t nonconnectable_ad_data_add(struct bt_data *data_array,
|
||||||
|
const size_t data_array_size)
|
||||||
|
{
|
||||||
|
static const uint8_t ad_ext_uuid16[] = {
|
||||||
|
IF_ENABLED(CONFIG_BT_PACS, (BT_UUID_16_ENCODE(BT_UUID_PACS_VAL),))
|
||||||
|
IF_ENABLED(CONFIG_BT_CAP_ACCEPTOR, (BT_UUID_16_ENCODE(BT_UUID_CAS_VAL),))
|
||||||
|
};
|
||||||
|
size_t ad_len = 0;
|
||||||
|
|
||||||
|
if (IS_ENABLED(CONFIG_BT_CAP_ACCEPTOR)) {
|
||||||
|
static const uint8_t ad_cap_announcement[3] = {
|
||||||
|
BT_UUID_16_ENCODE(BT_UUID_CAS_VAL),
|
||||||
|
BT_AUDIO_UNICAST_ANNOUNCEMENT_TARGETED,
|
||||||
|
};
|
||||||
|
|
||||||
|
__ASSERT(data_array_size > ad_len, "No space for AD_CAP_ANNOUNCEMENT");
|
||||||
|
data_array[ad_len].type = BT_DATA_SVC_DATA16;
|
||||||
|
data_array[ad_len].data_len = ARRAY_SIZE(ad_cap_announcement);
|
||||||
|
data_array[ad_len].data = &ad_cap_announcement[0];
|
||||||
|
ad_len++;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(CONFIG_BT_AUDIO_BROADCAST_SOURCE)
|
||||||
|
if (default_source) {
|
||||||
|
static uint8_t ad_bap_broadcast_announcement[5] = {
|
||||||
|
BT_UUID_16_ENCODE(BT_UUID_BROADCAST_AUDIO_VAL),
|
||||||
|
};
|
||||||
|
uint32_t broadcast_id;
|
||||||
|
int err;
|
||||||
|
|
||||||
|
err = bt_audio_broadcast_source_get_id(default_source,
|
||||||
|
&broadcast_id);
|
||||||
|
if (err != 0) {
|
||||||
|
printk("Unable to get broadcast ID: %d\n", err);
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
ad_bap_broadcast_announcement[2] = (uint8_t)(broadcast_id >> 16);
|
||||||
|
ad_bap_broadcast_announcement[3] = (uint8_t)(broadcast_id >> 8);
|
||||||
|
ad_bap_broadcast_announcement[4] = (uint8_t)(broadcast_id >> 0);
|
||||||
|
data_array[ad_len].type = BT_DATA_SVC_DATA16;
|
||||||
|
data_array[ad_len].data_len = ARRAY_SIZE(ad_bap_broadcast_announcement);
|
||||||
|
data_array[ad_len].data = ad_bap_broadcast_announcement;
|
||||||
|
ad_len++;
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_BT_AUDIO_BROADCAST_SOURCE */
|
||||||
|
|
||||||
|
if (ARRAY_SIZE(ad_ext_uuid16) > 0) {
|
||||||
|
if (data_array_size <= ad_len) {
|
||||||
|
shell_warn(ctx_shell, "No space for AD_UUID16");
|
||||||
|
return ad_len;
|
||||||
|
}
|
||||||
|
|
||||||
|
data_array[ad_len].type = BT_DATA_UUID16_SOME;
|
||||||
|
data_array[ad_len].data_len = ARRAY_SIZE(ad_ext_uuid16);
|
||||||
|
data_array[ad_len].data = &ad_ext_uuid16[0];
|
||||||
|
ad_len++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ad_len;
|
||||||
|
}
|
||||||
|
|
||||||
|
ssize_t audio_ad_data_add(struct bt_data *data_array, const size_t data_array_size,
|
||||||
|
const bool discoverable, const bool connectable)
|
||||||
|
{
|
||||||
|
if (!discoverable) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (connectable) {
|
||||||
|
return connectable_ad_data_add(data_array, data_array_size);
|
||||||
|
} else {
|
||||||
|
return nonconnectable_ad_data_add(data_array, data_array_size);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue