@@ -118,16 +118,16 @@ struct transport {
struct io *timer_io;
};
-static const uint8_t base_lc3_16_2_1[] = {
+static const uint8_t base_lc3_48_4_1[] = {
0x28, 0x00, 0x00, /* Presentation Delay */
0x01, /* Number of Subgroups */
0x01, /* Number of BIS */
0x06, 0x00, 0x00, 0x00, 0x00, /* Code ID = LC3 (0x06) */
0x10, /* Codec Specific Configuration */
- 0x02, 0x01, 0x03, /* 16 KHZ */
+ 0x02, 0x01, 0x08, /* 48 KHZ */
0x02, 0x02, 0x01, /* 10 ms */
- 0x05, 0x03, 0x01, 0x00, 0x00, 0x00, /* Front Left */
- 0x03, 0x04, 0x28, 0x00, /* Frame Length 40 bytes */
+ 0x05, 0x03, 0x03, 0x00, 0x00, 0x00, /* Front Left, Front Right */
+ 0x03, 0x04, 0x78, 0x00, /* Frame Length 120 bytes */
0x04, /* Metadata */
0x03, 0x02, 0x02, 0x00, /* Audio Context: Convertional */
0x01, /* BIS */
@@ -2999,7 +2999,45 @@ static void endpoint_config(const char *input, void *user_data)
endpoint_set_config(cfg);
}
+static void config_endpoint_iso_stream(const char *input, void *user_data)
+{
+ struct endpoint_config *cfg = user_data;
+ char *endptr = NULL;
+ int value;
+
+ value = strtol(input, &endptr, 0);
+
+ if (!endptr || *endptr != '\0' || value > UINT8_MAX) {
+ bt_shell_printf("Invalid argument: %s\n", input);
+ return bt_shell_noninteractive_quit(EXIT_FAILURE);
+ }
+
+ bcast_qos.bcast.bis = value;
+
+ endpoint_set_config(cfg);
+}
+
+static void config_endpoint_iso_group(const char *input, void *user_data)
+{
+ struct endpoint_config *cfg = user_data;
+ char *endptr = NULL;
+ int value;
+
+ value = strtol(input, &endptr, 0);
+
+ if (!endptr || *endptr != '\0' || value > UINT8_MAX) {
+ bt_shell_printf("Invalid argument: %s\n", input);
+ return bt_shell_noninteractive_quit(EXIT_FAILURE);
+ }
+
+ bcast_qos.bcast.big = value;
+
+ bt_shell_prompt_input(cfg->ep->path, "BIS (value):",
+ config_endpoint_iso_stream, cfg);
+}
+
static struct endpoint *endpoint_new(const struct capabilities *cap);
+static void endpoint_init_defaults(struct endpoint *ep);
static void cmd_config_endpoint(int argc, char *argv[])
{
@@ -3033,6 +3071,7 @@ static void cmd_config_endpoint(int argc, char *argv[])
if (cap) {
broadcast = true;
cfg->ep = endpoint_new(cap);
+ endpoint_init_defaults(cfg->ep);
cfg->ep->preset = find_presets_name(uuid, argv[3]);
if (!cfg->ep->preset)
bt_shell_printf("Preset not found\n");
@@ -3057,8 +3096,8 @@ static void cmd_config_endpoint(int argc, char *argv[])
iov_append(&cfg->ep->bcode, bcast_qos.bcast.bcode,
sizeof(bcast_qos.bcast.bcode));
/* Copy capabilities for broadcast*/
- iov_append(&cfg->caps, base_lc3_16_2_1,
- sizeof(base_lc3_16_2_1));
+ iov_append(&cfg->caps, base_lc3_48_4_1,
+ sizeof(base_lc3_48_4_1));
} else {
/* Copy capabilities */
iov_append(&cfg->caps, preset->data.iov_base,
@@ -3068,7 +3107,11 @@ static void cmd_config_endpoint(int argc, char *argv[])
/* Set QoS parameters */
cfg->qos = &preset->qos;
- endpoint_set_config(cfg);
+ if (cfg->ep->broadcast)
+ bt_shell_prompt_input(cfg->ep->path, "BIG (value):",
+ config_endpoint_iso_group, cfg);
+ else
+ endpoint_set_config(cfg);
return;
}