@@ -1020,7 +1020,6 @@ static void iso_bcast_confirm_cb(GIOChannel *io, GError *err, void *user_data)
free(req);
if (bt_bap_stream_set_io(setup->stream, fd)) {
- bt_bap_stream_start(setup->stream, NULL, NULL);
g_io_channel_set_close_on_unref(io, FALSE);
return;
}
@@ -2676,13 +2675,19 @@ static void bap_state_bcast_sink(struct bt_bap_stream *stream,
case BT_BAP_STREAM_STATE_CONFIG:
if (!setup)
break;
- if (old_state ==
- BT_BAP_STREAM_STATE_CONFIG)
- setup_create_io(data, setup, stream, defer);
if (old_state ==
BT_BAP_STREAM_STATE_STREAMING)
setup_io_close(setup, NULL);
break;
+ case BT_BAP_STREAM_STATE_ENABLING:
+ /* For a Broadcast Sink, the ENABLING state suggests that
+ * the upper layer process requires the stream to start
+ * receiving audio. This state is used to differentiate
+ * between all configured streams and the ones that have
+ * been enabled by the upper layer. Create stream io.
+ */
+ setup_create_io(data, setup, stream, defer);
+ break;
}
}
@@ -2210,7 +2210,7 @@ static unsigned int bap_bcast_sink_enable(struct bt_bap_stream *stream,
bt_bap_stream_func_t func,
void *user_data)
{
- stream_set_state(stream, BT_BAP_STREAM_STATE_CONFIG);
+ stream_set_state(stream, BT_BAP_STREAM_STATE_ENABLING);
return 1;
}
@@ -6419,14 +6419,15 @@ static void bsnk_state_str(struct bt_bap_stream *stream, uint8_t old_state,
/* Enable stream */
bt_bap_stream_enable(stream, true, NULL, NULL, NULL);
- } else if (old_state == BT_BAP_STREAM_STATE_CONFIG) {
- /* Start stream */
- bt_bap_stream_start(stream, NULL, NULL);
} else {
/* Other state transitions are invalid */
tester_test_failed();
}
+ break;
+ case BT_BAP_STREAM_STATE_ENABLING:
+ /* Start stream */
+ bt_bap_stream_start(stream, NULL, NULL);
break;
case BT_BAP_STREAM_STATE_STREAMING:
queue_foreach(data->streams, stream_count_streaming, &num);