* [PATCH BlueZ bluez v3] bap: Start BIG sync after receiving BIGInfo
@ 2026-07-28 6:26 Yang Li via B4 Relay
2026-07-28 14:50 ` patchwork-bot+bluetooth
2026-07-28 16:01 ` Bastien Nocera
0 siblings, 2 replies; 5+ messages in thread
From: Yang Li via B4 Relay @ 2026-07-28 6:26 UTC (permalink / raw)
To: Linux Bluetooth; +Cc: Yang Li
From: Yang Li <yang.li@amlogic.com>
The current implementation starts BIG sync before receiving a BIGInfo
report. According to the Bluetooth Core Specification, BIG sync should
only be initiated after BIGInfo has been received.
Starting BIG sync too early may cause unexpected controller behavior.
Trigger BIG sync from the BIGInfo callback, following the same approach
used by the short PA flow.
Fixes: https://github.com/bluez/bluez/issues/2345
Signed-off-by: Yang Li <yang.li@amlogic.com>
---
Changes in v3:
- Fixed coding style warning.
- Link to v2: https://patch.msgid.link/20260727-big_sync-v2-1-053fd3bcc3be@amlogic.com
Changes in v2:
- Fixed build error.
- Link to v1: https://patch.msgid.link/20260724-big_sync-v1-1-0a35013e30ba@amlogic.com
---
profiles/audio/bap.c | 25 +++++++++++++++++++++----
1 file changed, 21 insertions(+), 4 deletions(-)
diff --git a/profiles/audio/bap.c b/profiles/audio/bap.c
index dd4b3c8ff..473e4cfc2 100644
--- a/profiles/audio/bap.c
+++ b/profiles/audio/bap.c
@@ -3650,7 +3650,8 @@ static void setup_refresh_qos(void *data, void *user_data)
setup->qos = *bt_bap_stream_get_qos(stream);
}
-static void iso_do_big_sync(GIOChannel *io, void *user_data)
+static gboolean iso_do_big_sync(GIOChannel *io, GIOCondition cond,
+ void *user_data)
{
GError *err = NULL;
struct bap_setup *setup = user_data;
@@ -3659,7 +3660,7 @@ static void iso_do_big_sync(GIOChannel *io, void *user_data)
struct bt_iso_qos qos;
struct queue *links = bt_bap_stream_io_get_links(setup->stream);
- DBG("PA Sync done");
+ DBG("BIG info received, do BIG sync");
g_io_channel_unref(data->listen_io);
g_io_channel_shutdown(data->listen_io, TRUE, NULL);
@@ -3682,6 +3683,7 @@ static void iso_do_big_sync(GIOChannel *io, void *user_data)
BT_IO_OPT_INVALID)) {
error("bt_io_set: %s", err->message);
g_error_free(err);
+ return FALSE;
}
if (!bt_io_bcast_accept(io,
@@ -3692,16 +3694,31 @@ static void iso_do_big_sync(GIOChannel *io, void *user_data)
iso_bc_addr.bc_bis, BT_IO_OPT_INVALID)) {
error("bt_io_bcast_accept: %s", err->message);
g_error_free(err);
+ return FALSE;
}
+
+ return TRUE;
+}
+
+static void long_pa_sync_confirm_cb(GIOChannel *io, void *user_data)
+{
+ struct bap_setup *setup = user_data;
+ struct bap_data *data = setup->data;
+
+ DBG("Long PA Sync done");
+
+ /* store io and add watch that will call iso_do_big_sync */
+ data->io_id = g_io_add_watch(io, G_IO_OUT, iso_do_big_sync,
+ setup);
}
static void pa_and_big_sync(struct bap_setup *setup)
{
GError *err = NULL;
struct bap_data *bap_data = setup->data;
-
DBG("Create PA sync with this source");
- bap_data->listen_io = bt_io_listen(NULL, iso_do_big_sync, setup,
+
+ bap_data->listen_io = bt_io_listen(NULL, long_pa_sync_confirm_cb, setup,
NULL, &err,
BT_IO_OPT_SOURCE_BDADDR,
btd_adapter_get_address(bap_data->adapter),
---
base-commit: 89d477bb5494eef0b24e5667be62f854da250a97
change-id: 20260724-big_sync-45c24ec09121
Best regards,
--
Yang Li <yang.li@amlogic.com>
^ permalink raw reply related [flat|nested] 5+ messages in thread* Re: [PATCH BlueZ bluez v3] bap: Start BIG sync after receiving BIGInfo
2026-07-28 6:26 [PATCH BlueZ bluez v3] bap: Start BIG sync after receiving BIGInfo Yang Li via B4 Relay
@ 2026-07-28 14:50 ` patchwork-bot+bluetooth
2026-07-28 16:01 ` Bastien Nocera
1 sibling, 0 replies; 5+ messages in thread
From: patchwork-bot+bluetooth @ 2026-07-28 14:50 UTC (permalink / raw)
To: Yang Li; +Cc: linux-bluetooth
Hello:
This patch was applied to bluetooth/bluez.git (master)
by Luiz Augusto von Dentz <luiz.von.dentz@intel.com>:
On Tue, 28 Jul 2026 14:26:42 +0800 you wrote:
> From: Yang Li <yang.li@amlogic.com>
>
> The current implementation starts BIG sync before receiving a BIGInfo
> report. According to the Bluetooth Core Specification, BIG sync should
> only be initiated after BIGInfo has been received.
>
> Starting BIG sync too early may cause unexpected controller behavior.
>
> [...]
Here is the summary with links:
- [BlueZ,bluez,v3] bap: Start BIG sync after receiving BIGInfo
https://git.kernel.org/pub/scm/bluetooth/bluez.git/?id=322c39a64323
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [PATCH BlueZ bluez v3] bap: Start BIG sync after receiving BIGInfo
2026-07-28 6:26 [PATCH BlueZ bluez v3] bap: Start BIG sync after receiving BIGInfo Yang Li via B4 Relay
2026-07-28 14:50 ` patchwork-bot+bluetooth
@ 2026-07-28 16:01 ` Bastien Nocera
2026-07-29 1:19 ` Yang Li
1 sibling, 1 reply; 5+ messages in thread
From: Bastien Nocera @ 2026-07-28 16:01 UTC (permalink / raw)
To: yang.li, Linux Bluetooth
On Tue, 2026-07-28 at 14:26 +0800, Yang Li via B4 Relay wrote:
> From: Yang Li <yang.li@amlogic.com>
>
> The current implementation starts BIG sync before receiving a BIGInfo
> report. According to the Bluetooth Core Specification, BIG sync
> should
> only be initiated after BIGInfo has been received.
>
> Starting BIG sync too early may cause unexpected controller behavior.
>
> Trigger BIG sync from the BIGInfo callback, following the same
> approach
> used by the short PA flow.
>
> Fixes: https://github.com/bluez/bluez/issues/2345
>
> Signed-off-by: Yang Li <yang.li@amlogic.com>
> ---
> Changes in v3:
> - Fixed coding style warning.
> - Link to v2:
> https://patch.msgid.link/20260727-big_sync-v2-1-053fd3bcc3be@amlogic.com
>
> Changes in v2:
> - Fixed build error.
> - Link to v1:
> https://patch.msgid.link/20260724-big_sync-v1-1-0a35013e30ba@amlogic.com
> ---
> profiles/audio/bap.c | 25 +++++++++++++++++++++----
> 1 file changed, 21 insertions(+), 4 deletions(-)
>
> diff --git a/profiles/audio/bap.c b/profiles/audio/bap.c
> index dd4b3c8ff..473e4cfc2 100644
> --- a/profiles/audio/bap.c
> +++ b/profiles/audio/bap.c
> @@ -3650,7 +3650,8 @@ static void setup_refresh_qos(void *data, void
> *user_data)
> setup->qos = *bt_bap_stream_get_qos(stream);
> }
>
> -static void iso_do_big_sync(GIOChannel *io, void *user_data)
> +static gboolean iso_do_big_sync(GIOChannel *io, GIOCondition cond,
> + void *user_data)
The return here is for:
"The function should return FALSE if the event source should be
removed."
Not success or failure.
See:
https://docs.gtk.org/glib/callback.IOFunc.html
https://docs.gtk.org/glib/func.io_add_watch.html
> {
> GError *err = NULL;
> struct bap_setup *setup = user_data;
> @@ -3659,7 +3660,7 @@ static void iso_do_big_sync(GIOChannel *io,
> void *user_data)
> struct bt_iso_qos qos;
> struct queue *links = bt_bap_stream_io_get_links(setup-
> >stream);
>
> - DBG("PA Sync done");
> + DBG("BIG info received, do BIG sync");
>
> g_io_channel_unref(data->listen_io);
> g_io_channel_shutdown(data->listen_io, TRUE, NULL);
> @@ -3682,6 +3683,7 @@ static void iso_do_big_sync(GIOChannel *io,
> void *user_data)
> BT_IO_OPT_INVALID)) {
> error("bt_io_set: %s", err->message);
> g_error_free(err);
> + return FALSE;
This is wrong, this should be TRUE or better G_SOURCE_REMOVE.
> }
>
> if (!bt_io_bcast_accept(io,
> @@ -3692,16 +3694,31 @@ static void iso_do_big_sync(GIOChannel *io,
> void *user_data)
> iso_bc_addr.bc_bis, BT_IO_OPT_INVALID)) {
> error("bt_io_bcast_accept: %s", err->message);
> g_error_free(err);
> + return FALSE;
Here too.
> }
> +
> + return TRUE;
> +}
> +
> +static void long_pa_sync_confirm_cb(GIOChannel *io, void *user_data)
> +{
> + struct bap_setup *setup = user_data;
> + struct bap_data *data = setup->data;
> +
> + DBG("Long PA Sync done");
> +
> + /* store io and add watch that will call iso_do_big_sync */
> + data->io_id = g_io_add_watch(io, G_IO_OUT, iso_do_big_sync,
> + setup);
> }
>
> static void pa_and_big_sync(struct bap_setup *setup)
> {
> GError *err = NULL;
> struct bap_data *bap_data = setup->data;
> -
> DBG("Create PA sync with this source");
> - bap_data->listen_io = bt_io_listen(NULL, iso_do_big_sync,
> setup,
> +
> + bap_data->listen_io = bt_io_listen(NULL,
> long_pa_sync_confirm_cb, setup,
> NULL, &err,
> BT_IO_OPT_SOURCE_BDADDR,
> btd_adapter_get_address(bap_data->adapter),
>
> ---
> base-commit: 89d477bb5494eef0b24e5667be62f854da250a97
> change-id: 20260724-big_sync-45c24ec09121
>
> Best regards,
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [PATCH BlueZ bluez v3] bap: Start BIG sync after receiving BIGInfo
2026-07-28 16:01 ` Bastien Nocera
@ 2026-07-29 1:19 ` Yang Li
0 siblings, 0 replies; 5+ messages in thread
From: Yang Li @ 2026-07-29 1:19 UTC (permalink / raw)
To: Bastien Nocera, Linux Bluetooth
Hi,
> [ EXTERNAL EMAIL ]
>
> On Tue, 2026-07-28 at 14:26 +0800, Yang Li via B4 Relay wrote:
>> From: Yang Li <yang.li@amlogic.com>
>>
>> The current implementation starts BIG sync before receiving a BIGInfo
>> report. According to the Bluetooth Core Specification, BIG sync
>> should
>> only be initiated after BIGInfo has been received.
>>
>> Starting BIG sync too early may cause unexpected controller behavior.
>>
>> Trigger BIG sync from the BIGInfo callback, following the same
>> approach
>> used by the short PA flow.
>>
>> Fixes: https://github.com/bluez/bluez/issues/2345
>>
>> Signed-off-by: Yang Li <yang.li@amlogic.com>
>> ---
>> Changes in v3:
>> - Fixed coding style warning.
>> - Link to v2:
>> https://patch.msgid.link/20260727-big_sync-v2-1-053fd3bcc3be@amlogic.com
>>
>> Changes in v2:
>> - Fixed build error.
>> - Link to v1:
>> https://patch.msgid.link/20260724-big_sync-v1-1-0a35013e30ba@amlogic.com
>> ---
>> profiles/audio/bap.c | 25 +++++++++++++++++++++----
>> 1 file changed, 21 insertions(+), 4 deletions(-)
>>
>> diff --git a/profiles/audio/bap.c b/profiles/audio/bap.c
>> index dd4b3c8ff..473e4cfc2 100644
>> --- a/profiles/audio/bap.c
>> +++ b/profiles/audio/bap.c
>> @@ -3650,7 +3650,8 @@ static void setup_refresh_qos(void *data, void
>> *user_data)
>> setup->qos = *bt_bap_stream_get_qos(stream);
>> }
>>
>> -static void iso_do_big_sync(GIOChannel *io, void *user_data)
>> +static gboolean iso_do_big_sync(GIOChannel *io, GIOCondition cond,
>> + void *user_data)
> The return here is for:
> "The function should return FALSE if the event source should be
> removed."
> Not success or failure.
>
> See:
> https://docs.gtk.org/glib/callback.IOFunc.html
> https://docs.gtk.org/glib/func.io_add_watch.html
Well, I got it, but this patch has been applied, I will send the new one
to fix it.
>
>> {
>> GError *err = NULL;
>> struct bap_setup *setup = user_data;
>> @@ -3659,7 +3660,7 @@ static void iso_do_big_sync(GIOChannel *io,
>> void *user_data)
>> struct bt_iso_qos qos;
>> struct queue *links = bt_bap_stream_io_get_links(setup-
>>> stream);
>> - DBG("PA Sync done");
>> + DBG("BIG info received, do BIG sync");
>>
>> g_io_channel_unref(data->listen_io);
>> g_io_channel_shutdown(data->listen_io, TRUE, NULL);
>> @@ -3682,6 +3683,7 @@ static void iso_do_big_sync(GIOChannel *io,
>> void *user_data)
>> BT_IO_OPT_INVALID)) {
>> error("bt_io_set: %s", err->message);
>> g_error_free(err);
>> + return FALSE;
> This is wrong, this should be TRUE or better G_SOURCE_REMOVE.
>
>> }
>>
>> if (!bt_io_bcast_accept(io,
>> @@ -3692,16 +3694,31 @@ static void iso_do_big_sync(GIOChannel *io,
>> void *user_data)
>> iso_bc_addr.bc_bis, BT_IO_OPT_INVALID)) {
>> error("bt_io_bcast_accept: %s", err->message);
>> g_error_free(err);
>> + return FALSE;
> Here too.
>
>> }
>> +
>> + return TRUE;
>> +}
>> +
>> +static void long_pa_sync_confirm_cb(GIOChannel *io, void *user_data)
>> +{
>> + struct bap_setup *setup = user_data;
>> + struct bap_data *data = setup->data;
>> +
>> + DBG("Long PA Sync done");
>> +
>> + /* store io and add watch that will call iso_do_big_sync */
>> + data->io_id = g_io_add_watch(io, G_IO_OUT, iso_do_big_sync,
>> + setup);
>> }
>>
>> static void pa_and_big_sync(struct bap_setup *setup)
>> {
>> GError *err = NULL;
>> struct bap_data *bap_data = setup->data;
>> -
>> DBG("Create PA sync with this source");
>> - bap_data->listen_io = bt_io_listen(NULL, iso_do_big_sync,
>> setup,
>> +
>> + bap_data->listen_io = bt_io_listen(NULL,
>> long_pa_sync_confirm_cb, setup,
>> NULL, &err,
>> BT_IO_OPT_SOURCE_BDADDR,
>> btd_adapter_get_address(bap_data->adapter),
>>
>> ---
>> base-commit: 89d477bb5494eef0b24e5667be62f854da250a97
>> change-id: 20260724-big_sync-45c24ec09121
>>
>> Best regards,
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH BlueZ bluez v3] bap: Start BIG sync after receiving BIGInfo
@ 2026-07-28 6:24 Yang Li via B4 Relay
0 siblings, 0 replies; 5+ messages in thread
From: Yang Li via B4 Relay @ 2026-07-28 6:24 UTC (permalink / raw)
To: Linux Bluetooth; +Cc: Yang Li
From: Yang Li <yang.li@amlogic.com>
The current implementation starts BIG sync before receiving a BIGInfo
report. According to the Bluetooth Core Specification, BIG sync should
only be initiated after BIGInfo has been received.
Starting BIG sync too early may cause unexpected controller behavior.
Trigger BIG sync from the BIGInfo callback, following the same approach
used by the short PA flow.
Fixes: https://github.com/bluez/bluez/issues/2345
Signed-off-by: Yang Li <yang.li@amlogic.com>
---
Changes in v3:
- Fixed coding style warning.
- Link to v2: https://patch.msgid.link/20260727-big_sync-v2-1-053fd3bcc3be@amlogic.com
Changes in v2:
- Fixed build error.
- Link to v1: https://patch.msgid.link/20260724-big_sync-v1-1-0a35013e30ba@amlogic.com
---
profiles/audio/bap.c | 25 +++++++++++++++++++++----
1 file changed, 21 insertions(+), 4 deletions(-)
diff --git a/profiles/audio/bap.c b/profiles/audio/bap.c
index dd4b3c8ff..473e4cfc2 100644
--- a/profiles/audio/bap.c
+++ b/profiles/audio/bap.c
@@ -3650,7 +3650,8 @@ static void setup_refresh_qos(void *data, void *user_data)
setup->qos = *bt_bap_stream_get_qos(stream);
}
-static void iso_do_big_sync(GIOChannel *io, void *user_data)
+static gboolean iso_do_big_sync(GIOChannel *io, GIOCondition cond,
+ void *user_data)
{
GError *err = NULL;
struct bap_setup *setup = user_data;
@@ -3659,7 +3660,7 @@ static void iso_do_big_sync(GIOChannel *io, void *user_data)
struct bt_iso_qos qos;
struct queue *links = bt_bap_stream_io_get_links(setup->stream);
- DBG("PA Sync done");
+ DBG("BIG info received, do BIG sync");
g_io_channel_unref(data->listen_io);
g_io_channel_shutdown(data->listen_io, TRUE, NULL);
@@ -3682,6 +3683,7 @@ static void iso_do_big_sync(GIOChannel *io, void *user_data)
BT_IO_OPT_INVALID)) {
error("bt_io_set: %s", err->message);
g_error_free(err);
+ return FALSE;
}
if (!bt_io_bcast_accept(io,
@@ -3692,16 +3694,31 @@ static void iso_do_big_sync(GIOChannel *io, void *user_data)
iso_bc_addr.bc_bis, BT_IO_OPT_INVALID)) {
error("bt_io_bcast_accept: %s", err->message);
g_error_free(err);
+ return FALSE;
}
+
+ return TRUE;
+}
+
+static void long_pa_sync_confirm_cb(GIOChannel *io, void *user_data)
+{
+ struct bap_setup *setup = user_data;
+ struct bap_data *data = setup->data;
+
+ DBG("Long PA Sync done");
+
+ /* store io and add watch that will call iso_do_big_sync */
+ data->io_id = g_io_add_watch(io, G_IO_OUT, iso_do_big_sync,
+ setup);
}
static void pa_and_big_sync(struct bap_setup *setup)
{
GError *err = NULL;
struct bap_data *bap_data = setup->data;
-
DBG("Create PA sync with this source");
- bap_data->listen_io = bt_io_listen(NULL, iso_do_big_sync, setup,
+
+ bap_data->listen_io = bt_io_listen(NULL, long_pa_sync_confirm_cb, setup,
NULL, &err,
BT_IO_OPT_SOURCE_BDADDR,
btd_adapter_get_address(bap_data->adapter),
---
base-commit: 89d477bb5494eef0b24e5667be62f854da250a97
change-id: 20260724-big_sync-45c24ec09121
Best regards,
--
Yang Li <yang.li@amlogic.com>
^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-07-29 1:19 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-28 6:26 [PATCH BlueZ bluez v3] bap: Start BIG sync after receiving BIGInfo Yang Li via B4 Relay
2026-07-28 14:50 ` patchwork-bot+bluetooth
2026-07-28 16:01 ` Bastien Nocera
2026-07-29 1:19 ` Yang Li
-- strict thread matches above, loose matches on Subject: below --
2026-07-28 6:24 Yang Li via B4 Relay
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox