shared/bap: Use enabling state for bcast sink streams

This updates the stream state transition from CONFIG to ENABLING,
on enable for Broadcast Sink streams. This is done to differentiate
between streams discovered in the BASE after short-lived PA sync
and streams that have been selected and enabled by the user.
This commit is contained in:
Iulia Tanasescu 2024-10-25 15:21:36 +03:00 committed by Luiz Augusto von Dentz
parent 71d19c6c84
commit eaff473cd2
3 changed files with 14 additions and 8 deletions

View File

@ -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;
}
}

View File

@ -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;
}

View File

@ -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);