Commit graph

10,339 commits

Author SHA1 Message Date
Vinayak Kariappa Chettimada
23005983dd Bluetooth: Controller: ISO Tx ack data flow review rework
Review rework ISO Tx ack data flow design for context-safety.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2026-02-16 11:08:16 +01:00
Vinayak Kariappa Chettimada
a4f4deef44 Bluetooth: Controller: Fix ISO Tx ack data flow for context-safety
Fix ISO Tx ack data flow design for context-safety.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2026-02-16 11:08:16 +01:00
Vinayak Kariappa Chettimada
d66dd5cde8 Bluetooth: Controller: Fix BIS to unify with CIS TX ack handling
Fix BIS to unify with CIS TX ack handling.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2026-02-16 11:08:16 +01:00
Emil Gydesen
8d904e186b Bluetooth: TBS: Client: Fix reset issue with net_buf
The net_buf was always initialized with net_buf_simple_init_with_data
which was a bit wasteful as we only need to do that once. Since `inst`
is `static`ally allocated, we can check for `.data == NULL`.

Additionally the read callbacks expect the buffer to be 0-initialized
between each usage, which wasn't the case. We can use the `buf.len`
to determine how many bytes we need to reset to `0`.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2026-02-13 12:37:31 +01:00
Herman Berget
62e12edb19 Bluetooth: Host: Use HCI VS command to set public addr on bt_enable
The current way of setting the public address using
`bt_hci_driver_api::setup` does not work well in split builds
where host and controller runs on different cores/socs/boards.
This approach requires each HCI driver and each `hci_<transport>`
application to implement the setup and pass the information on
to the next layer.

Zephyr already defines a vendor-specific command that can be used
to set the public address (`bt_hci_cp_vs_write_bd_addr`).
Use this in `bt_enable` after opening the HCI transport and before
initializing the id module. This makes the setup independent of
hci transport and only depends on a controller that implements the
Zephyr HCI VS commands.

Signed-off-by: Herman Berget <herman.berget@nordicsemi.no>
2026-02-12 14:29:44 +00:00
Alex Ciascai
cb9f5f8be0 bluetooth: tbs: fix Join opcode result for PTS conformance
Update the Join handler to return BT_TBS_RESULT_CODE_OPERATION_NOT_POSSIBLE

Signed-off-by: Alex Ciascai <ciascai.alexandru@gmail.com>
2026-02-12 14:27:07 +00:00
Evgenii Kosenko
6b1b725ed2 Bluetooth: Shell: Fix GATT UUID race condition with per-operation storage
The static global UUID variable in the GATT shell module was shared across
all concurrent discover and read-by-uuid operations, creating a potential
race condition where one operation could overwrite the UUID before another
completed. Move UUID storage into the per-operation gatt_op_context
structure to isolate UUID state for each operation. This enables safe
concurrent operations without data corruption.

Signed-off-by: Evgenii Kosenko <Evgenii.Kosenko@silabs.com>
2026-02-12 09:30:18 +01:00
Emil Gydesen
971578a123 Bluetooth: TBS: Fix issues with friendly name buffer sizes
The friendly name buffer sizes used the URI length, but since
the friendly name is specifically not an URI that did not make
sense. Added a new Kconfig option to configure the maximum
supported friendly name, which is shared between both TBS
and the TBS client, similar to the other max Kconfig options.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2026-02-11 17:47:36 -06:00
Kristoffer Skøien
c966a54549 Bluetooth: BAP: Direction fix
Bugfix, changed from source to sink in bt_bap_unicast_group_reconfig

Signed-off-by: Kristoffer Skøien <kristoffer.skoien@nordicsemi.no>
2026-02-11 16:34:13 +01:00
Emil Gydesen
4fe38bbaed Bluetooth: VOCS: Replace CHECKIF with if
The usage of CHECKIF has been replaced with a regular
if. The reason for this is that higher layer may depend
on some of the checks defined by the API, and the higher
layers cannot do that properly if the checks can be
removed via a Kconfig option.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2026-02-10 13:42:46 -06:00
Emil Gydesen
257e1eb2e3 Bluetooth: VCP: REND: Replace CHECKIF with if
The usage of CHECKIF has been replaced with a regular
if. The reason for this is that higher layer may depend
on some of the checks defined by the API, and the higher
layers cannot do that properly if the checks can be
removed via a Kconfig option.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2026-02-10 13:42:24 -06:00
Emil Gydesen
c5061b76ab Bluetooth: VCP: CTLR: Replace CHECKIF with if
The usage of CHECKIF has been replaced with a regular
if. The reason for this is that higher layer may depend
on some of the checks defined by the API, and the higher
layers cannot do that properly if the checks can be
removed via a Kconfig option.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2026-02-10 13:42:07 -06:00
Emil Gydesen
c6562e70d7 Bluetooth: TMAP: Replace CHECKIF with if
The usage of CHECKIF has been replaced with a regular
if. The reason for this is that higher layer may depend
on some of the checks defined by the API, and the higher
layers cannot do that properly if the checks can be
removed via a Kconfig option.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2026-02-10 13:41:49 -06:00
Emil Gydesen
8c29bb0b62 Bluetooth: TBS: Replace CHECKIF with if
The usage of CHECKIF has been replaced with a regular
if. The reason for this is that higher layer may depend
on some of the checks defined by the API, and the higher
layers cannot do that properly if the checks can be
removed via a Kconfig option.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2026-02-10 13:41:28 -06:00
Emil Gydesen
50d57b2cee Bluetooth: TBS: Client: Replace CHECKIF with if
The usage of CHECKIF has been replaced with a regular
if. The reason for this is that higher layer may depend
on some of the checks defined by the API, and the higher
layers cannot do that properly if the checks can be
removed via a Kconfig option.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2026-02-10 13:41:06 -06:00
Emil Gydesen
8d63fa7eea Bluetooth: PBP: Replace CHECKIF with if
The usage of CHECKIF has been replaced with a regular
if. The reason for this is that higher layer may depend
on some of the checks defined by the API, and the higher
layers cannot do that properly if the checks can be
removed via a Kconfig option.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2026-02-10 13:40:43 -06:00
Emil Gydesen
ef0726fbc0 Bluetooth: PACS: Replace CHECKIF with if
The usage of CHECKIF has been replaced with a regular
if. The reason for this is that higher layer may depend
on some of the checks defined by the API, and the higher
layers cannot do that properly if the checks can be
removed via a Kconfig option.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2026-02-10 13:40:21 -06:00
Emil Gydesen
833e3cbbae Bluetooth: MICP: MIC: Replace CHECKIF with if
The usage of CHECKIF has been replaced with a regular
if. The reason for this is that higher layer may depend
on some of the checks defined by the API, and the higher
layers cannot do that properly if the checks can be
removed via a Kconfig option.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2026-02-10 13:40:03 -06:00
Emil Gydesen
a0eeb3400a Bluetooth: MICP: CTLR: Replace CHECKIF with if
The usage of CHECKIF has been replaced with a regular
if. The reason for this is that higher layer may depend
on some of the checks defined by the API, and the higher
layers cannot do that properly if the checks can be
removed via a Kconfig option.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2026-02-10 13:39:21 -06:00
Emil Gydesen
4766ca1576 Bluetooth: MCC: Replace CHECKIF with if
The usage of CHECKIF has been replaced with a regular
if. The reason for this is that higher layer may depend
on some of the checks defined by the API, and the higher
layers cannot do that properly if the checks can be
removed via a Kconfig option.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2026-02-10 13:38:56 -06:00
Emil Gydesen
66a7da33f7 Bluetooth: HAS: Replace CHECKIF with if
The usage of CHECKIF has been replaced with a regular
if. The reason for this is that higher layer may depend
on some of the checks defined by the API, and the higher
layers cannot do that properly if the checks can be
removed via a Kconfig option.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2026-02-10 13:38:38 -06:00
Emil Gydesen
b1d8341b07 Bluetooth: HAS: Client: Replace CHECKIF with if
The usage of CHECKIF has been replaced with a regular
if. The reason for this is that higher layer may depend
on some of the checks defined by the API, and the higher
layers cannot do that properly if the checks can be
removed via a Kconfig option.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2026-02-10 13:38:08 -06:00
Emil Gydesen
29cd613a7b Bluetooth: GMAP: Replace CHECKIF with if
The usage of CHECKIF has been replaced with a regular
if. The reason for this is that higher layer may depend
on some of the checks defined by the API, and the higher
layers cannot do that properly if the checks can be
removed via a Kconfig option.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2026-02-10 13:37:44 -06:00
Emil Gydesen
48ec3217df Bluetooth: CSIP: Member: Replace CHECKIF with if
The usage of CHECKIF has been replaced with a regular
if. The reason for this is that higher layer may depend
on some of the checks defined by the API, and the higher
layers cannot do that properly if the checks can be
removed via a Kconfig option.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2026-02-10 13:37:14 -06:00
Emil Gydesen
38301cd1b0 Bluetooth: CSIP: Coordinator: Replace CHECKIF with if
The usage of CHECKIF has been replaced with a regular
if. The reason for this is that higher layer may depend
on some of the checks defined by the API, and the higher
layers cannot do that properly if the checks can be
removed via a Kconfig option.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2026-02-10 13:36:46 -06:00
Emil Gydesen
b0a78bb87c Bluetooth: Audio: Codec: Replace CHECKIF with if
The usage of CHECKIF has been replaced with a regular
if. The reason for this is that higher layer may depend
on some of the checks defined by the API, and the higher
layers cannot do that properly if the checks can be
removed via a Kconfig option.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2026-02-10 13:36:20 -06:00
Emil Gydesen
03868cc875 Bluetooth: CCP: Server: Replace CHECKIF with if
The usage of CHECKIF has been replaced with a regular
if. The reason for this is that higher layer may depend
on some of the checks defined by the API, and the higher
layers cannot do that properly if the checks can be
removed via a Kconfig option.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2026-02-10 13:35:35 -06:00
Emil Gydesen
9a80dd1bfc Bluetooth: CCP: Client: Replace CHECKIF with if
The usage of CHECKIF has been replaced with a regular
if. The reason for this is that higher layer may depend
on some of the checks defined by the API, and the higher
layers cannot do that properly if the checks can be
removed via a Kconfig option.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2026-02-10 13:34:54 -06:00
Emil Gydesen
52b6138b03 Bluetooth: CAP: Stream: Replace CHECKIF with if
The usage of CHECKIF has been replaced with a regular
if. The reason for this is that higher layer may depend
on some of the checks defined by the API, and the higher
layers cannot do that properly if the checks can be
removed via a Kconfig option.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2026-02-10 13:33:51 -06:00
Emil Gydesen
55e671781d Bluetooth: CAP: Initiator: Fix bad return values in param checks
Some parameter check return paths returned -EINVAL for
a boolean function.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2026-02-10 13:32:35 -06:00
Emil Gydesen
527d969786 Bluetooth: CAP: Initiator: Replace CHECKIF with if
The usage of CHECKIF has been replaced with a regular
if. The reason for this is that higher layer may depend
on some of the checks defined by the API, and the higher
layers cannot do that properly if the checks can be
removed via a Kconfig option.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2026-02-10 13:32:35 -06:00
Emil Gydesen
05440203c1 Bluetooth: CAP: Commander: Replace CHECKIF with if
The usage of CHECKIF has been replaced with a regular
if. The reason for this is that higher layer may depend
on some of the checks defined by the API, and the higher
layers cannot do that properly if the checks can be
removed via a Kconfig option.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2026-02-10 13:31:41 -06:00
Emil Gydesen
cb6bd5b023 Bluetooth: CAP: Commander: Remove invalid check
start_param->subgroups is an array, so it is always
non-NULL.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2026-02-10 13:31:41 -06:00
Emil Gydesen
7f5c9892f1 Bluetooth: CAP: Acceptor: Replace CHECKIF with if
The usage of CHECKIF has been replaced with a regular
if. The reason for this is that higher layer may depend
on some of the checks defined by the API, and the higher
layers cannot do that properly if the checks can be
removed via a Kconfig option.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2026-02-10 13:31:03 -06:00
Emil Gydesen
f4ae52137e Bluetooth: BAP: US: Replace CHECKIF with if
The usage of CHECKIF has been replaced with a regular
if. The reason for this is that higher layer may depend
on some of the checks defined by the API, and the higher
layers cannot do that properly if the checks can be
removed via a Kconfig option.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2026-02-10 13:29:24 -06:00
Emil Gydesen
33a1b4fa62 Bluetooth: BAP: UC: Replace CHECKIF with if
The usage of CHECKIF has been replaced with a regular
if. The reason for this is that higher layer may depend
on some of the checks defined by the API, and the higher
layers cannot do that properly if the checks can be
removed via a Kconfig option.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2026-02-10 13:29:01 -06:00
Emil Gydesen
449b63ec3e Bluetooth: BAP: Stream: Replace CHECKIF with if
The usage of CHECKIF has been replaced with a regular
if. The reason for this is that higher layer may depend
on some of the checks defined by the API, and the higher
layers cannot do that properly if the checks can be
removed via a Kconfig option.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2026-02-10 13:28:38 -06:00
Emil Gydesen
0ee0fb838f Bluetooth: BAP: SD: Replace CHECKIF with if
The usage of CHECKIF has been replaced with a regular
if. The reason for this is that higher layer may depend
on some of the checks defined by the API, and the higher
layers cannot do that properly if the checks can be
removed via a Kconfig option.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2026-02-10 13:28:13 -06:00
Emil Gydesen
b2c19b3ae5 Bluetooth: BAP: Broadcast Source: Replace CHECKIF with if
The usage of CHECKIF has been replaced with a regular
if. The reason for this is that higher layer may depend
on some of the checks defined by the API, and the higher
layers cannot do that properly if the checks can be
removed via a Kconfig option.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2026-02-10 13:27:53 -06:00
Emil Gydesen
13e00454ff Bluetooth: BAP: Broadcast Sink: Replace CHECKIF with if
The usage of CHECKIF has been replaced with a regular
if. The reason for this is that higher layer may depend
on some of the checks defined by the API, and the higher
layers cannot do that properly if the checks can be
removed via a Kconfig option.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2026-02-10 13:27:27 -06:00
Emil Gydesen
7005ee0054 Bluetooth: BAP: BA: Replace CHECKIF with if
The usage of CHECKIF has been replaced with a regular
if. The reason for this is that higher layer may depend
on some of the checks defined by the API, and the higher
layers cannot do that properly if the checks can be
removed via a Kconfig option.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2026-02-10 13:27:04 -06:00
Emil Gydesen
0dc8f915f3 Bluetooth: BAP: BASE: Replace CHECKIF with if
The usage of CHECKIF has been replaced with a regular
if. The reason for this is that higher layer may depend
on some of the checks defined by the API, and the higher
layers cannot do that properly if the checks can be
removed via a Kconfig option.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2026-02-10 13:26:33 -06:00
Emil Gydesen
4a30f7f27c Bluetooth: ASCS: Replace CHECKIF with if
The usage of CHECKIF has been replaced with a regular
if. The reason for this is that higher layer may depend
on some of the checks defined by the API, and the higher
layers cannot do that properly if the checks can be
removed via a Kconfig option.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2026-02-10 13:26:12 -06:00
Emil Gydesen
654a2a2105 Bluetooth: Audio: Replace CHECKIF with if
The usage of CHECKIF has been replaced with a regular
if. The reason for this is that higher layer may depend
on some of the checks defined by the API, and the higher
layers cannot do that properly if the checks can be
removed via a Kconfig option.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2026-02-10 13:25:39 -06:00
Emil Gydesen
9778c5bcc9 Bluetooth: AICS: Replace CHECKIF with if
The usage of CHECKIF has been replaced with a regular
if. The reason for this is that higher layer may depend
on some of the checks defined by the API, and the higher
layers cannot do that properly if the checks can be
removed via a Kconfig option.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2026-02-10 13:25:23 -06:00
Emil Gydesen
a65c3fb171 Bluetooth: BAP: SD: Refactor use of mutex
This commit does the following 2 changes:
1) The return value of k_mutex_lock has been modified to
be treated as a fatal error instead of a simple runtime error.
The reason for this is to avoid having to handle those cases,
and to treat those cases a fatal errors. The timeout for the
mutex should be long enough for any operation within the lock,
and if it isn't, then that should be treated as something that
needs to be fixed, as it is likely a bug. This is also the reason
why the timeout was kept, instead of using K_FOREVER.

2) Ensure that all log statements are done while the log isn't
locked.

The implementation should be reconsidered in terms of application
callbacks, as the current state, where we need to unlock and relock
the mutex so many times does not only risk resolving in cases where
wrong values are set, but is also not very readable nor performant.
Changes to the API will be done in a followup commit, as that requires
more significant changes.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2026-02-10 15:11:09 +01:00
Emil Gydesen
4230213f1f Bluetooth: CAP: Clear params before handover continues
When an unicast initiator procedure or a commander broadcast
procedure is completed and we have handover enabled, the
parameters used need to be cleared before continueing.
This is due to the fact that the parameters are only cleared
on completion, rather than at initialization, and that the
initiator and commander parameters are in a union.
Not clearing the parameters could set some values to an
unknown/unexpected start value.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2026-02-10 15:10:38 +01:00
Emil Gydesen
5864564a46 Bluetooth: CCP: Add user_data to bt_ccp_call_control_client_cb
Add a user_data field to bt_ccp_call_control_client_cb. The
field is optional to enable via Kconfig. The field can be used
to provide additional context from the owner of the callback
structure, to the callbacks themselves.

This solves a memory use-after-free issue in the unit tests
where the values from the callback was accessed after they
were released, as the values were just stack allocated.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2026-02-10 10:51:43 +01:00
Emil Gydesen
e1ff7805de Bluetooth: VOCS: Client: Replace CHECKIF with if
The usage of CHECKIF has been replaced with a regular
if. The reason for this is that higher layer may depend
on some of the checks defined by the API, and the higher
layers cannot do that properly if the checks can be
removed via a Kconfig option.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2026-02-06 11:17:19 +01:00
Mark Wang
9062679c55 bluetooth: shell: a2dp: use 'err' instead of 'ret' for error code
Rename variable 'ret' to 'err' in cmd_send_media() to align with
Zephyr coding conventions for error return values.

Signed-off-by: Mark Wang <yichang.wang@nxp.com>
2026-02-05 13:01:02 +00:00