Bluetooth: Audio: Move some unicast shell commands to also support server
Some of the unicast audio shell commands were guarded by CONFIG_BT_AUDIO_UNICAST_CLIENT and only usable by the client. This moves some of the commands to a CONFIG_BT_AUDIO_UNICAST guard instead, so that they are usable for builds with just the server. Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
This commit is contained in:
parent
06fde72092
commit
34715022ef
1 changed files with 150 additions and 145 deletions
|
@ -47,8 +47,6 @@ static struct bt_audio_unicast_group *default_unicast_group;
|
||||||
static struct bt_codec *rcodecs[2][CONFIG_BT_AUDIO_UNICAST_CLIENT_PAC_COUNT];
|
static struct bt_codec *rcodecs[2][CONFIG_BT_AUDIO_UNICAST_CLIENT_PAC_COUNT];
|
||||||
static struct bt_audio_ep *snks[CONFIG_BT_AUDIO_UNICAST_CLIENT_ASE_SNK_COUNT];
|
static struct bt_audio_ep *snks[CONFIG_BT_AUDIO_UNICAST_CLIENT_ASE_SNK_COUNT];
|
||||||
static struct bt_audio_ep *srcs[CONFIG_BT_AUDIO_UNICAST_CLIENT_ASE_SRC_COUNT];
|
static struct bt_audio_ep *srcs[CONFIG_BT_AUDIO_UNICAST_CLIENT_ASE_SRC_COUNT];
|
||||||
|
|
||||||
static uint8_t stream_dir(const struct bt_audio_stream *stream);
|
|
||||||
#endif /* CONFIG_BT_AUDIO_UNICAST_CLIENT */
|
#endif /* CONFIG_BT_AUDIO_UNICAST_CLIENT */
|
||||||
#endif /* CONFIG_BT_AUDIO_UNICAST */
|
#endif /* CONFIG_BT_AUDIO_UNICAST */
|
||||||
|
|
||||||
|
@ -691,6 +689,75 @@ static struct bt_pacs_cap cap_sink = {
|
||||||
static struct bt_pacs_cap cap_source = {
|
static struct bt_pacs_cap cap_source = {
|
||||||
.codec = &lc3_codec,
|
.codec = &lc3_codec,
|
||||||
};
|
};
|
||||||
|
#if defined(CONFIG_BT_AUDIO_UNICAST)
|
||||||
|
|
||||||
|
|
||||||
|
static uint16_t strmeta(const char *name)
|
||||||
|
{
|
||||||
|
if (strcmp(name, "Unspecified") == 0) {
|
||||||
|
return BT_AUDIO_CONTEXT_TYPE_UNSPECIFIED;
|
||||||
|
} else if (strcmp(name, "Conversational") == 0) {
|
||||||
|
return BT_AUDIO_CONTEXT_TYPE_CONVERSATIONAL;
|
||||||
|
} else if (strcmp(name, "Media") == 0) {
|
||||||
|
return BT_AUDIO_CONTEXT_TYPE_MEDIA;
|
||||||
|
} else if (strcmp(name, "Game") == 0) {
|
||||||
|
return BT_AUDIO_CONTEXT_TYPE_GAME;
|
||||||
|
} else if (strcmp(name, "Instructional") == 0) {
|
||||||
|
return BT_AUDIO_CONTEXT_TYPE_INSTRUCTIONAL;
|
||||||
|
} else if (strcmp(name, "VoiceAssistants") == 0) {
|
||||||
|
return BT_AUDIO_CONTEXT_TYPE_VOICE_ASSISTANTS;
|
||||||
|
} else if (strcmp(name, "Live") == 0) {
|
||||||
|
return BT_AUDIO_CONTEXT_TYPE_LIVE;
|
||||||
|
} else if (strcmp(name, "SoundEffects") == 0) {
|
||||||
|
return BT_AUDIO_CONTEXT_TYPE_SOUND_EFFECTS;
|
||||||
|
} else if (strcmp(name, "Notifications") == 0) {
|
||||||
|
return BT_AUDIO_CONTEXT_TYPE_NOTIFICATIONS;
|
||||||
|
} else if (strcmp(name, "Ringtone") == 0) {
|
||||||
|
return BT_AUDIO_CONTEXT_TYPE_RINGTONE;
|
||||||
|
} else if (strcmp(name, "Alerts") == 0) {
|
||||||
|
return BT_AUDIO_CONTEXT_TYPE_ALERTS;
|
||||||
|
} else if (strcmp(name, "EmergencyAlarm") == 0) {
|
||||||
|
return BT_AUDIO_CONTEXT_TYPE_EMERGENCY_ALARM;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0u;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int handle_metadata_update(const char *meta_str,
|
||||||
|
struct bt_codec_data *meta_out[],
|
||||||
|
size_t *meta_count_out)
|
||||||
|
{
|
||||||
|
static struct bt_codec_data meta[CONFIG_BT_CODEC_MAX_METADATA_COUNT];
|
||||||
|
size_t meta_count;
|
||||||
|
|
||||||
|
/* We create a copy of the preset meta, as the presets cannot be modified */
|
||||||
|
meta_count = default_preset->preset.codec.meta_count;
|
||||||
|
(void)memset(meta, 0, sizeof(meta));
|
||||||
|
for (size_t i = 0U; i < meta_count; i++) {
|
||||||
|
(void)memcpy(meta[i].value,
|
||||||
|
default_preset->preset.codec.meta[i].data.data,
|
||||||
|
default_preset->preset.codec.meta[i].data.data_len);
|
||||||
|
meta[i].data.data_len = default_preset->preset.codec.meta[i].data.data_len;
|
||||||
|
meta[i].data.data = meta[i].value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (meta_str != NULL) {
|
||||||
|
uint16_t context;
|
||||||
|
|
||||||
|
context = strmeta(meta_str);
|
||||||
|
if (context == 0) {
|
||||||
|
return -ENOEXEC;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* TODO: Check the type and only overwrite the streaming context */
|
||||||
|
sys_put_le16(context, meta[0].value);
|
||||||
|
}
|
||||||
|
|
||||||
|
*meta_count_out = meta_count;
|
||||||
|
*meta_out = meta;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
#if defined(CONFIG_BT_AUDIO_UNICAST_CLIENT)
|
#if defined(CONFIG_BT_AUDIO_UNICAST_CLIENT)
|
||||||
static uint8_t stream_dir(const struct bt_audio_stream *stream)
|
static uint8_t stream_dir(const struct bt_audio_stream *stream)
|
||||||
|
@ -866,29 +933,6 @@ static int cmd_discover(const struct shell *sh, size_t argc, char *argv[])
|
||||||
return bt_audio_discover(default_conn, ¶ms);
|
return bt_audio_discover(default_conn, ¶ms);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int cmd_preset(const struct shell *sh, size_t argc, char *argv[])
|
|
||||||
{
|
|
||||||
struct named_lc3_preset *named_preset;
|
|
||||||
|
|
||||||
named_preset = default_preset;
|
|
||||||
|
|
||||||
if (argc > 1) {
|
|
||||||
named_preset = set_preset(true, argc - 1, argv + 1);
|
|
||||||
if (named_preset == NULL) {
|
|
||||||
shell_error(sh, "Unable to parse named_preset %s",
|
|
||||||
argv[1]);
|
|
||||||
return -ENOEXEC;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
shell_print(sh, "%s", named_preset->name);
|
|
||||||
|
|
||||||
print_codec(&named_preset->preset.codec);
|
|
||||||
print_qos(&named_preset->preset.qos);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int cmd_config(const struct shell *sh, size_t argc, char *argv[])
|
static int cmd_config(const struct shell *sh, size_t argc, char *argv[])
|
||||||
{
|
{
|
||||||
int32_t index, dir;
|
int32_t index, dir;
|
||||||
|
@ -964,24 +1008,6 @@ static int cmd_config(const struct shell *sh, size_t argc, char *argv[])
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int cmd_release(const struct shell *sh, size_t argc, char *argv[])
|
|
||||||
{
|
|
||||||
int err;
|
|
||||||
|
|
||||||
if (default_stream == NULL) {
|
|
||||||
shell_print(sh, "Not connected");
|
|
||||||
return -ENOEXEC;
|
|
||||||
}
|
|
||||||
|
|
||||||
err = bt_audio_stream_release(default_stream);
|
|
||||||
if (err) {
|
|
||||||
shell_error(sh, "Unable to release Channel");
|
|
||||||
return -ENOEXEC;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int cmd_qos(const struct shell *sh, size_t argc, char *argv[])
|
static int cmd_qos(const struct shell *sh, size_t argc, char *argv[])
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
|
@ -1028,73 +1054,6 @@ static int cmd_qos(const struct shell *sh, size_t argc, char *argv[])
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint16_t strmeta(const char *name)
|
|
||||||
{
|
|
||||||
if (strcmp(name, "Unspecified") == 0) {
|
|
||||||
return BT_AUDIO_CONTEXT_TYPE_UNSPECIFIED;
|
|
||||||
} else if (strcmp(name, "Conversational") == 0) {
|
|
||||||
return BT_AUDIO_CONTEXT_TYPE_CONVERSATIONAL;
|
|
||||||
} else if (strcmp(name, "Media") == 0) {
|
|
||||||
return BT_AUDIO_CONTEXT_TYPE_MEDIA;
|
|
||||||
} else if (strcmp(name, "Game") == 0) {
|
|
||||||
return BT_AUDIO_CONTEXT_TYPE_GAME;
|
|
||||||
} else if (strcmp(name, "Instructional") == 0) {
|
|
||||||
return BT_AUDIO_CONTEXT_TYPE_INSTRUCTIONAL;
|
|
||||||
} else if (strcmp(name, "VoiceAssistants") == 0) {
|
|
||||||
return BT_AUDIO_CONTEXT_TYPE_VOICE_ASSISTANTS;
|
|
||||||
} else if (strcmp(name, "Live") == 0) {
|
|
||||||
return BT_AUDIO_CONTEXT_TYPE_LIVE;
|
|
||||||
} else if (strcmp(name, "SoundEffects") == 0) {
|
|
||||||
return BT_AUDIO_CONTEXT_TYPE_SOUND_EFFECTS;
|
|
||||||
} else if (strcmp(name, "Notifications") == 0) {
|
|
||||||
return BT_AUDIO_CONTEXT_TYPE_NOTIFICATIONS;
|
|
||||||
} else if (strcmp(name, "Ringtone") == 0) {
|
|
||||||
return BT_AUDIO_CONTEXT_TYPE_RINGTONE;
|
|
||||||
} else if (strcmp(name, "Alerts") == 0) {
|
|
||||||
return BT_AUDIO_CONTEXT_TYPE_ALERTS;
|
|
||||||
} else if (strcmp(name, "EmergencyAlarm") == 0) {
|
|
||||||
return BT_AUDIO_CONTEXT_TYPE_EMERGENCY_ALARM;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0u;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int handle_metadata_update(const char *meta_str,
|
|
||||||
struct bt_codec_data *meta_out[],
|
|
||||||
size_t *meta_count_out)
|
|
||||||
{
|
|
||||||
static struct bt_codec_data meta[CONFIG_BT_CODEC_MAX_METADATA_COUNT];
|
|
||||||
size_t meta_count;
|
|
||||||
|
|
||||||
/* We create a copy of the preset meta, as the presets cannot be modified */
|
|
||||||
meta_count = default_preset->preset.codec.meta_count;
|
|
||||||
(void)memset(meta, 0, sizeof(meta));
|
|
||||||
for (size_t i = 0U; i < meta_count; i++) {
|
|
||||||
(void)memcpy(meta[i].value,
|
|
||||||
default_preset->preset.codec.meta[i].data.data,
|
|
||||||
default_preset->preset.codec.meta[i].data.data_len);
|
|
||||||
meta[i].data.data_len = default_preset->preset.codec.meta[i].data.data_len;
|
|
||||||
meta[i].data.data = meta[i].value;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (meta_str != NULL) {
|
|
||||||
uint16_t context;
|
|
||||||
|
|
||||||
context = strmeta(meta_str);
|
|
||||||
if (context == 0) {
|
|
||||||
return -ENOEXEC;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* TODO: Check the type and only overwrite the streaming context */
|
|
||||||
sys_put_le16(context, meta[0].value);
|
|
||||||
}
|
|
||||||
|
|
||||||
*meta_count_out = meta_count;
|
|
||||||
*meta_out = meta;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int cmd_enable(const struct shell *sh, size_t argc, char *argv[])
|
static int cmd_enable(const struct shell *sh, size_t argc, char *argv[])
|
||||||
{
|
{
|
||||||
struct bt_codec_data *meta;
|
struct bt_codec_data *meta;
|
||||||
|
@ -1126,6 +1085,62 @@ static int cmd_enable(const struct shell *sh, size_t argc, char *argv[])
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int cmd_stop(const struct shell *sh, size_t argc, char *argv[])
|
||||||
|
{
|
||||||
|
int err;
|
||||||
|
|
||||||
|
if (default_stream == NULL) {
|
||||||
|
shell_error(sh, "Not connected");
|
||||||
|
return -ENOEXEC;
|
||||||
|
}
|
||||||
|
|
||||||
|
err = bt_audio_stream_stop(default_stream);
|
||||||
|
if (err) {
|
||||||
|
shell_error(sh, "Unable to start Channel");
|
||||||
|
return -ENOEXEC;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int cmd_connect(const struct shell *sh, size_t argc, char *argv[])
|
||||||
|
{
|
||||||
|
int err;
|
||||||
|
|
||||||
|
err = cmd_config(sh, argc, argv);
|
||||||
|
if (err) {
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
connecting = true;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_BT_AUDIO_UNICAST_CLIENT */
|
||||||
|
|
||||||
|
static int cmd_preset(const struct shell *sh, size_t argc, char *argv[])
|
||||||
|
{
|
||||||
|
struct named_lc3_preset *named_preset;
|
||||||
|
|
||||||
|
named_preset = default_preset;
|
||||||
|
|
||||||
|
if (argc > 1) {
|
||||||
|
named_preset = set_preset(true, argc - 1, argv + 1);
|
||||||
|
if (named_preset == NULL) {
|
||||||
|
shell_error(sh, "Unable to parse named_preset %s",
|
||||||
|
argv[1]);
|
||||||
|
return -ENOEXEC;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
shell_print(sh, "%s", named_preset->name);
|
||||||
|
|
||||||
|
print_codec(&named_preset->preset.codec);
|
||||||
|
print_qos(&named_preset->preset.qos);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
#define MAX_META_DATA \
|
#define MAX_META_DATA \
|
||||||
(CONFIG_BT_CODEC_MAX_METADATA_COUNT * sizeof(struct bt_codec_data))
|
(CONFIG_BT_CODEC_MAX_METADATA_COUNT * sizeof(struct bt_codec_data))
|
||||||
|
|
||||||
|
@ -1198,24 +1213,6 @@ static int cmd_disable(const struct shell *sh, size_t argc, char *argv[])
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int cmd_stop(const struct shell *sh, size_t argc, char *argv[])
|
|
||||||
{
|
|
||||||
int err;
|
|
||||||
|
|
||||||
if (default_stream == NULL) {
|
|
||||||
shell_error(sh, "Not connected");
|
|
||||||
return -ENOEXEC;
|
|
||||||
}
|
|
||||||
|
|
||||||
err = bt_audio_stream_stop(default_stream);
|
|
||||||
if (err) {
|
|
||||||
shell_error(sh, "Unable to start Channel");
|
|
||||||
return -ENOEXEC;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int cmd_list(const struct shell *sh, size_t argc, char *argv[])
|
static int cmd_list(const struct shell *sh, size_t argc, char *argv[])
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
@ -1226,12 +1223,13 @@ static int cmd_list(const struct shell *sh, size_t argc, char *argv[])
|
||||||
struct bt_audio_stream *stream = &streams[i];
|
struct bt_audio_stream *stream = &streams[i];
|
||||||
|
|
||||||
if (stream->conn) {
|
if (stream->conn) {
|
||||||
shell_print(sh, " %s#%u: stream %p dir 0x%02x group %p",
|
shell_print(sh, " %s#%u: stream %p ep %p group %p",
|
||||||
stream == default_stream ? "*" : " ", i, stream,
|
stream == default_stream ? "*" : " ", i,
|
||||||
stream_dir(stream), stream->group);
|
stream, stream->ep, stream->group);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(CONFIG_BT_AUDIO_UNICAST_CLIENT)
|
||||||
shell_print(sh, "Sinks:");
|
shell_print(sh, "Sinks:");
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(snks); i++) {
|
for (i = 0; i < ARRAY_SIZE(snks); i++) {
|
||||||
|
@ -1251,24 +1249,29 @@ static int cmd_list(const struct shell *sh, size_t argc, char *argv[])
|
||||||
shell_print(sh, " #%u: ep %p", i, ep);
|
shell_print(sh, " #%u: ep %p", i, ep);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif /* CONFIG_BT_AUDIO_UNICAST_CLIENT */
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int cmd_connect(const struct shell *sh, size_t argc, char *argv[])
|
static int cmd_release(const struct shell *sh, size_t argc, char *argv[])
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
err = cmd_config(sh, argc, argv);
|
if (default_stream == NULL) {
|
||||||
if (err) {
|
shell_print(sh, "Not connected");
|
||||||
return err;
|
return -ENOEXEC;
|
||||||
}
|
}
|
||||||
|
|
||||||
connecting = true;
|
err = bt_audio_stream_release(default_stream);
|
||||||
|
if (err) {
|
||||||
|
shell_error(sh, "Unable to release Channel");
|
||||||
|
return -ENOEXEC;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_BT_AUDIO_UNICAST_CLIENT */
|
#endif /* CONFIG_BT_AUDIO_UNICAST */
|
||||||
|
|
||||||
#if defined(CONFIG_BT_AUDIO_BROADCAST_SINK)
|
#if defined(CONFIG_BT_AUDIO_BROADCAST_SINK)
|
||||||
static uint32_t accepted_broadcast_id;
|
static uint32_t accepted_broadcast_id;
|
||||||
|
@ -1940,10 +1943,10 @@ SHELL_STATIC_SUBCMD_SET_CREATE(audio_cmds,
|
||||||
SHELL_CMD_ARG(term_broadcast_sink, NULL, "",
|
SHELL_CMD_ARG(term_broadcast_sink, NULL, "",
|
||||||
cmd_term_broadcast_sink, 1, 0),
|
cmd_term_broadcast_sink, 1, 0),
|
||||||
#endif /* CONFIG_BT_AUDIO_BROADCAST_SINK */
|
#endif /* CONFIG_BT_AUDIO_BROADCAST_SINK */
|
||||||
|
#if defined(CONFIG_BT_AUDIO_UNICAST)
|
||||||
#if defined(CONFIG_BT_AUDIO_UNICAST_CLIENT)
|
#if defined(CONFIG_BT_AUDIO_UNICAST_CLIENT)
|
||||||
SHELL_CMD_ARG(discover, NULL, "[dir: sink, source]",
|
SHELL_CMD_ARG(discover, NULL, "[dir: sink, source]",
|
||||||
cmd_discover, 1, 1),
|
cmd_discover, 1, 1),
|
||||||
SHELL_CMD_ARG(preset, NULL, "[preset]", cmd_preset, 1, 1),
|
|
||||||
SHELL_CMD_ARG(config, NULL,
|
SHELL_CMD_ARG(config, NULL,
|
||||||
"<direction: sink, source> <index> [codec] [preset]",
|
"<direction: sink, source> <index> [codec] [preset]",
|
||||||
cmd_config, 3, 2),
|
cmd_config, 3, 2),
|
||||||
|
@ -1951,18 +1954,20 @@ SHELL_STATIC_SUBCMD_SET_CREATE(audio_cmds,
|
||||||
"[preset] [interval] [framing] [latency] [pd] [sdu] [phy]"
|
"[preset] [interval] [framing] [latency] [pd] [sdu] [phy]"
|
||||||
" [rtn]", cmd_qos, 1, 8),
|
" [rtn]", cmd_qos, 1, 8),
|
||||||
SHELL_CMD_ARG(enable, NULL, NULL, cmd_enable, 1, 1),
|
SHELL_CMD_ARG(enable, NULL, NULL, cmd_enable, 1, 1),
|
||||||
SHELL_CMD_ARG(metadata, NULL, "[context]", cmd_metadata, 1, 1),
|
|
||||||
SHELL_CMD_ARG(start, NULL, NULL, cmd_start, 1, 0),
|
|
||||||
SHELL_CMD_ARG(disable, NULL, NULL, cmd_disable, 1, 0),
|
|
||||||
SHELL_CMD_ARG(stop, NULL, NULL, cmd_stop, 1, 0),
|
SHELL_CMD_ARG(stop, NULL, NULL, cmd_stop, 1, 0),
|
||||||
SHELL_CMD_ARG(release, NULL, NULL, cmd_release, 1, 0),
|
|
||||||
SHELL_CMD_ARG(list, NULL, NULL, cmd_list, 1, 0),
|
|
||||||
SHELL_CMD_ARG(connect, NULL,
|
SHELL_CMD_ARG(connect, NULL,
|
||||||
"<direction: sink, source> <index> [codec] [preset]",
|
"<direction: sink, source> <index> [codec] [preset]",
|
||||||
cmd_connect, 3, 2),
|
cmd_connect, 3, 2),
|
||||||
#endif /* CONFIG_BT_AUDIO_UNICAST_CLIENT */
|
#endif /* CONFIG_BT_AUDIO_UNICAST_CLIENT */
|
||||||
SHELL_COND_CMD_ARG(CONFIG_BT_AUDIO_UNICAST, select_unicast, NULL,
|
SHELL_CMD_ARG(preset, NULL, "[preset]", cmd_preset, 1, 1),
|
||||||
"<stream>", cmd_select_unicast, 2, 0),
|
SHELL_CMD_ARG(metadata, NULL, "[context]", cmd_metadata, 1, 1),
|
||||||
|
SHELL_CMD_ARG(start, NULL, NULL, cmd_start, 1, 0),
|
||||||
|
SHELL_CMD_ARG(disable, NULL, NULL, cmd_disable, 1, 0),
|
||||||
|
SHELL_CMD_ARG(release, NULL, NULL, cmd_release, 1, 0),
|
||||||
|
SHELL_CMD_ARG(list, NULL, NULL, cmd_list, 1, 0),
|
||||||
|
SHELL_CMD_ARG(select_unicast, NULL, "<stream>",
|
||||||
|
cmd_select_unicast, 2, 0),
|
||||||
|
#endif /* CONFIG_BT_AUDIO_UNICAST */
|
||||||
SHELL_CMD_ARG(send, NULL, "Send to Audio Stream [data]",
|
SHELL_CMD_ARG(send, NULL, "Send to Audio Stream [data]",
|
||||||
cmd_send, 1, 1),
|
cmd_send, 1, 1),
|
||||||
#if defined(CONFIG_LIBLC3)
|
#if defined(CONFIG_LIBLC3)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue