Message ID | 20250213-ascs_bug-v3-1-d5594f0f20c6@amlogic.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | [BlueZ,bluez,v3] bap: fixed issue of muting music silent after pause and resume. | expand |
Context | Check | Description |
---|---|---|
tedd_an/pre-ci_am | success | Success |
tedd_an/BuildEll | success | Build ELL PASS |
tedd_an/BluezMake | success | Bluez Make PASS |
tedd_an/MakeCheck | success | Bluez Make Check PASS |
tedd_an/MakeDistcheck | success | Make Distcheck PASS |
tedd_an/CheckValgrind | success | Check Valgrind PASS |
tedd_an/CheckSmatch | warning | CheckSparse WARNING src/shared/bap.c:296:25: warning: array of flexible structuressrc/shared/bap.c: note: in included file:./src/shared/ascs.h:88:25: warning: array of flexible structuressrc/shared/bap.c:296:25: warning: array of flexible structuressrc/shared/bap.c: note: in included file:./src/shared/ascs.h:88:25: warning: array of flexible structuressrc/shared/bap.c:296:25: warning: array of flexible structuressrc/shared/bap.c: note: in included file:./src/shared/ascs.h:88:25: warning: array of flexible structures |
tedd_an/bluezmakeextell | success | Make External ELL PASS |
tedd_an/ScanBuild | success | Scan Build PASS |
This is automated email and please do not reply to this email! Dear submitter, Thank you for submitting the patches to the linux bluetooth mailing list. This is a CI test results with your patch series: PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=933440 ---Test result--- Test Summary: CheckPatch PENDING 0.23 seconds GitLint PENDING 0.16 seconds BuildEll PASS 20.20 seconds BluezMake PASS 1452.79 seconds MakeCheck PASS 13.57 seconds MakeDistcheck PASS 156.87 seconds CheckValgrind PASS 211.58 seconds CheckSmatch WARNING 282.02 seconds bluezmakeextell PASS 97.73 seconds IncrementalBuild PENDING 0.23 seconds ScanBuild PASS 858.21 seconds Details ############################## Test: CheckPatch - PENDING Desc: Run checkpatch.pl script Output: ############################## Test: GitLint - PENDING Desc: Run gitlint Output: ############################## Test: CheckSmatch - WARNING Desc: Run smatch tool with source Output: src/shared/bap.c:296:25: warning: array of flexible structuressrc/shared/bap.c: note: in included file:./src/shared/ascs.h:88:25: warning: array of flexible structuressrc/shared/bap.c:296:25: warning: array of flexible structuressrc/shared/bap.c: note: in included file:./src/shared/ascs.h:88:25: warning: array of flexible structuressrc/shared/bap.c:296:25: warning: array of flexible structuressrc/shared/bap.c: note: in included file:./src/shared/ascs.h:88:25: warning: array of flexible structures ############################## Test: IncrementalBuild - PENDING Desc: Incremental build with the patches in the series Output: --- Regards, Linux Bluetooth
Hi Yang, On Wed, Feb 12, 2025 at 9:58 PM Yang Li via B4 Relay <devnull+yang.li.amlogic.com@kernel.org> wrote: > > From: Yang Li <yang.li@amlogic.com> > > After the ASE state changes (streaming->releasing->idle), > the Client needs to be notified. The process as follows: > > ...(Sink ASE: ID=1, State=Streaming) > ATT Write Command Packet (ASE Control Point: Op=Release) > ATT Notification Packet (Sink ASE: ID=1, State=Releasing) > ATT Notification Packet (Sink ASE: ID=1, State=Idle) > > Signed-off-by: Yang Li <yang.li@amlogic.com> > --- > Changes in v3: > - Solve the compilation error reported by test.bot > - Link to v2: https://patch.msgid.link/20250208-ascs_bug-v2-1-b7e062d6604d@amlogic.com > --- > src/shared/bap.c | 31 ++++++++++++++++++++++--------- > 1 file changed, 22 insertions(+), 9 deletions(-) > > diff --git a/src/shared/bap.c b/src/shared/bap.c > index 167501282..079f7ede0 100644 > --- a/src/shared/bap.c > +++ b/src/shared/bap.c > @@ -930,6 +930,18 @@ static void ascs_ase_rsp_success(struct iovec *iov, uint8_t id) > BT_ASCS_REASON_NONE); > } > > +static void stream_notify_ase_state(struct bt_bap_stream *stream) > +{ > + struct bt_bap_endpoint *ep = stream->ep; > + struct bt_ascs_ase_status status; > + > + status.id = ep->id; > + status.state = ep->state; > + > + gatt_db_attribute_notify(ep->attr, (void *)&status, sizeof(status), > + bt_bap_get_att(stream->bap)); > +} > + > static void stream_notify_config(struct bt_bap_stream *stream) > { > struct bt_bap_endpoint *ep = stream->ep; > @@ -1634,7 +1646,9 @@ static bool stream_notify_state(void *data) > struct bt_bap_stream *stream = data; > struct bt_bap_endpoint *ep = stream->ep; > > - DBG(stream->bap, "stream %p", stream); > + DBG(stream->bap, "stream %p state %s", > + stream, > + bt_bap_stream_statestr(ep->state)); > > if (stream->state_id) { > timeout_remove(stream->state_id); > @@ -1643,6 +1657,7 @@ static bool stream_notify_state(void *data) > > switch (ep->state) { > case BT_ASCS_ASE_STATE_IDLE: > + stream_notify_ase_state(stream); > break; > case BT_ASCS_ASE_STATE_CONFIG: > stream_notify_config(stream); > @@ -1655,6 +1670,9 @@ static bool stream_notify_state(void *data) > case BT_ASCS_ASE_STATE_DISABLING: > stream_notify_metadata(stream); > break; > + case BT_ASCS_ASE_STATE_RELEASING: > + stream_notify_ase_state(stream); > + break; > } > > return false; > @@ -2068,17 +2086,11 @@ static unsigned int bap_ucast_metadata(struct bt_bap_stream *stream, > > static uint8_t stream_release(struct bt_bap_stream *stream, struct iovec *rsp) > { > - struct bt_bap_pac *pac; > - > DBG(stream->bap, "stream %p", stream); > > ascs_ase_rsp_success(rsp, stream->ep->id); > > - pac = stream->lpac; > - if (pac->ops && pac->ops->clear) > - pac->ops->clear(stream, pac->user_data); This part I don't really understand, why are you removing the call to clear? Or are you relying on bap_stream_clear_cfm? That is only called on detach/disconnect so I don't think we should be removing the code above since it is still possible to reconfigure after releasing. > - stream_set_state(stream, BT_BAP_STREAM_STATE_IDLE); > + stream_set_state(stream, BT_BAP_STREAM_STATE_RELEASING); > > return 0; > } > @@ -6172,7 +6184,8 @@ static bool stream_io_disconnected(struct io *io, void *user_data) > > DBG(stream->bap, "stream %p io disconnected", stream); > > - bt_bap_stream_set_io(stream, -1); > + if (stream->ep->state == BT_BAP_STREAM_STATE_RELEASING) > + stream_set_state(stream, BT_BAP_STREAM_STATE_IDLE); > > return false; > } > > --- > base-commit: 2ee08ffd4d469781dc627fa50b4a015d9ad68007 > change-id: 20250208-ascs_bug-e7c5715d3d8c > > Best regards, > -- > Yang Li <yang.li@amlogic.com> > > >
Hi Luiz > [ EXTERNAL EMAIL ] > > Hi Yang, > > On Wed, Feb 12, 2025 at 9:58 PM Yang Li via B4 Relay > <devnull+yang.li.amlogic.com@kernel.org> wrote: >> From: Yang Li <yang.li@amlogic.com> >> >> After the ASE state changes (streaming->releasing->idle), >> the Client needs to be notified. The process as follows: >> >> ...(Sink ASE: ID=1, State=Streaming) >> ATT Write Command Packet (ASE Control Point: Op=Release) >> ATT Notification Packet (Sink ASE: ID=1, State=Releasing) >> ATT Notification Packet (Sink ASE: ID=1, State=Idle) >> >> Signed-off-by: Yang Li <yang.li@amlogic.com> >> --- >> Changes in v3: >> - Solve the compilation error reported by test.bot >> - Link to v2: https://patch.msgid.link/20250208-ascs_bug-v2-1-b7e062d6604d@amlogic.com >> --- >> src/shared/bap.c | 31 ++++++++++++++++++++++--------- >> 1 file changed, 22 insertions(+), 9 deletions(-) >> >> diff --git a/src/shared/bap.c b/src/shared/bap.c >> index 167501282..079f7ede0 100644 >> --- a/src/shared/bap.c >> +++ b/src/shared/bap.c >> @@ -930,6 +930,18 @@ static void ascs_ase_rsp_success(struct iovec *iov, uint8_t id) >> BT_ASCS_REASON_NONE); >> } >> >> +static void stream_notify_ase_state(struct bt_bap_stream *stream) >> +{ >> + struct bt_bap_endpoint *ep = stream->ep; >> + struct bt_ascs_ase_status status; >> + >> + status.id = ep->id; >> + status.state = ep->state; >> + >> + gatt_db_attribute_notify(ep->attr, (void *)&status, sizeof(status), >> + bt_bap_get_att(stream->bap)); >> +} >> + >> static void stream_notify_config(struct bt_bap_stream *stream) >> { >> struct bt_bap_endpoint *ep = stream->ep; >> @@ -1634,7 +1646,9 @@ static bool stream_notify_state(void *data) >> struct bt_bap_stream *stream = data; >> struct bt_bap_endpoint *ep = stream->ep; >> >> - DBG(stream->bap, "stream %p", stream); >> + DBG(stream->bap, "stream %p state %s", >> + stream, >> + bt_bap_stream_statestr(ep->state)); >> >> if (stream->state_id) { >> timeout_remove(stream->state_id); >> @@ -1643,6 +1657,7 @@ static bool stream_notify_state(void *data) >> >> switch (ep->state) { >> case BT_ASCS_ASE_STATE_IDLE: >> + stream_notify_ase_state(stream); >> break; >> case BT_ASCS_ASE_STATE_CONFIG: >> stream_notify_config(stream); >> @@ -1655,6 +1670,9 @@ static bool stream_notify_state(void *data) >> case BT_ASCS_ASE_STATE_DISABLING: >> stream_notify_metadata(stream); >> break; >> + case BT_ASCS_ASE_STATE_RELEASING: >> + stream_notify_ase_state(stream); >> + break; >> } >> >> return false; >> @@ -2068,17 +2086,11 @@ static unsigned int bap_ucast_metadata(struct bt_bap_stream *stream, >> >> static uint8_t stream_release(struct bt_bap_stream *stream, struct iovec *rsp) >> { >> - struct bt_bap_pac *pac; >> - >> DBG(stream->bap, "stream %p", stream); >> >> ascs_ase_rsp_success(rsp, stream->ep->id); >> >> - pac = stream->lpac; >> - if (pac->ops && pac->ops->clear) >> - pac->ops->clear(stream, pac->user_data); > This part I don't really understand, why are you removing the call to > clear? Or are you relying on bap_stream_clear_cfm? That is only called > on detach/disconnect so I don't think we should be removing the code > above since it is still possible to reconfigure after releasing. I removed the code to allow the mobile phone to disconnect CIS iso and switch the ASE status to IDLE in function ofstream_io_disconnected(). If pac->ops->clear() is executed, CIS iso disconnects actively, and stream_disable() transitions the status to QoS. bluetoothd.log as below: bluetoothd[2223]: src/shared/bap.c:stream_release() stream 0x1ed5ae8 bluetoothd[2223]: profiles/audio/media.c:pac_clear() endpoint 0x1ec8780 stream 0x1ed5ae8 bluetoothd[2223]: src/shared/bap.c:stream_disable() stream 0x1ed5ae8 bluetoothd[2223]: src/shared/bap.c:bap_ucast_set_state() stream 0x1ed5ae8 dir 0x01: streaming -> qos bluetoothd[2223]: src/shared/bap.c:bap_stream_io_detach() stream 0x1ed5ae8 bluetoothd[2223]: src/shared/bap.c:stream_io_free() fd 18 bluetoothd[2223]: profiles/audio/bap.c:bap_state() stream 0x1ed5ae8: streaming(4) -> qos(2) Could you please guide me on where to switch the ASE status to IDLE? >> - stream_set_state(stream, BT_BAP_STREAM_STATE_IDLE); >> + stream_set_state(stream, BT_BAP_STREAM_STATE_RELEASING); >> >> return 0; >> } >> @@ -6172,7 +6184,8 @@ static bool stream_io_disconnected(struct io *io, void *user_data) >> >> DBG(stream->bap, "stream %p io disconnected", stream); >> >> - bt_bap_stream_set_io(stream, -1); >> + if (stream->ep->state == BT_BAP_STREAM_STATE_RELEASING) >> + stream_set_state(stream, BT_BAP_STREAM_STATE_IDLE); >> >> return false; >> } >> >> --- >> base-commit: 2ee08ffd4d469781dc627fa50b4a015d9ad68007 >> change-id: 20250208-ascs_bug-e7c5715d3d8c >> >> Best regards, >> -- >> Yang Li <yang.li@amlogic.com> >> >> >> > > -- > Luiz Augusto von Dentz
diff --git a/src/shared/bap.c b/src/shared/bap.c index 167501282..079f7ede0 100644 --- a/src/shared/bap.c +++ b/src/shared/bap.c @@ -930,6 +930,18 @@ static void ascs_ase_rsp_success(struct iovec *iov, uint8_t id) BT_ASCS_REASON_NONE); } +static void stream_notify_ase_state(struct bt_bap_stream *stream) +{ + struct bt_bap_endpoint *ep = stream->ep; + struct bt_ascs_ase_status status; + + status.id = ep->id; + status.state = ep->state; + + gatt_db_attribute_notify(ep->attr, (void *)&status, sizeof(status), + bt_bap_get_att(stream->bap)); +} + static void stream_notify_config(struct bt_bap_stream *stream) { struct bt_bap_endpoint *ep = stream->ep; @@ -1634,7 +1646,9 @@ static bool stream_notify_state(void *data) struct bt_bap_stream *stream = data; struct bt_bap_endpoint *ep = stream->ep; - DBG(stream->bap, "stream %p", stream); + DBG(stream->bap, "stream %p state %s", + stream, + bt_bap_stream_statestr(ep->state)); if (stream->state_id) { timeout_remove(stream->state_id); @@ -1643,6 +1657,7 @@ static bool stream_notify_state(void *data) switch (ep->state) { case BT_ASCS_ASE_STATE_IDLE: + stream_notify_ase_state(stream); break; case BT_ASCS_ASE_STATE_CONFIG: stream_notify_config(stream); @@ -1655,6 +1670,9 @@ static bool stream_notify_state(void *data) case BT_ASCS_ASE_STATE_DISABLING: stream_notify_metadata(stream); break; + case BT_ASCS_ASE_STATE_RELEASING: + stream_notify_ase_state(stream); + break; } return false; @@ -2068,17 +2086,11 @@ static unsigned int bap_ucast_metadata(struct bt_bap_stream *stream, static uint8_t stream_release(struct bt_bap_stream *stream, struct iovec *rsp) { - struct bt_bap_pac *pac; - DBG(stream->bap, "stream %p", stream); ascs_ase_rsp_success(rsp, stream->ep->id); - pac = stream->lpac; - if (pac->ops && pac->ops->clear) - pac->ops->clear(stream, pac->user_data); - - stream_set_state(stream, BT_BAP_STREAM_STATE_IDLE); + stream_set_state(stream, BT_BAP_STREAM_STATE_RELEASING); return 0; } @@ -6172,7 +6184,8 @@ static bool stream_io_disconnected(struct io *io, void *user_data) DBG(stream->bap, "stream %p io disconnected", stream); - bt_bap_stream_set_io(stream, -1); + if (stream->ep->state == BT_BAP_STREAM_STATE_RELEASING) + stream_set_state(stream, BT_BAP_STREAM_STATE_IDLE); return false; }