mirror of
https://git.kernel.org/pub/scm/bluetooth/bluez.git
synced 2024-11-14 07:44:36 +08:00
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:
parent
71d19c6c84
commit
eaff473cd2
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user