Commit graph

9787 commits

Author SHA1 Message Date
Cheng Chang
5b204de53a Bluetooth: host: L2CAP: Fix configuration parameters not be checked
Now in other mode rather than basic mode, configuration parameters
include MTU, Flush Time and QoS have been checked.
But in basic mode, they also need to be checked, so the code about this
should not be controlled by macro CONFIG_BT_L2CAP_RET_FC.

Signed-off-by: Cheng Chang <cheng.chang@nxp.com>
2025-07-19 09:51:02 +02:00
Ravinder Singh
394c97a819 Bluetooth: LE: CONN: Added bt_conn_le_set_default_phy function.
Added bt_le_set_default_phy in hci. This handles
the HCI_LE_Set_Default_PHY HCI command.
Added call to bt_conn_le_set_default_phy in central_gatt_write and
peripheral_gatt_write samples.

Signed-off-by: Ravinder Singh <ravinder.singh2@infineon.com>
2025-07-19 09:46:34 +02:00
Make Shi
dcd9adec29 Bluetooth: AVRCP: Adjust positions of internal static functions
- Move the static function locations to beginning of the file to the
  file to avoid function declarations.

Signed-off-by: Make Shi <make.shi@nxp.com>
2025-07-19 09:40:19 +02:00
Make Shi
ba05d5c2b2 Bluetooth: Shell: AVRCP: support unit info request and response
Add avrcp_unit_info_req callback function in shell and a command to set
the unit info response.

Signed-off-by: Make Shi <make.shi@nxp.com>
2025-07-19 09:40:19 +02:00
Make Shi
c95d3167e2 Bluetooth: AVRCP: Implement unit message reception on the AVRCP target
- Add a new callback to support the situation when a unit info command is
  received, and add an API to respond to the unit info command.

Signed-off-by: Make Shi <make.shi@nxp.com>
2025-07-19 09:40:19 +02:00
Make Shi
a559fee00b Bluetooth: AVRCP: Refactored AVRCP API for CT/TG separation
- Only AVRCP connect and disconnect api for AVRCP common functions.
- Added _ct prefixes to all CT callback functions and feature APIs.
- Updated shell demo code for AVRCP API changes.

Signed-off-by: Make Shi <make.shi@nxp.com>
2025-07-19 09:40:19 +02:00
Szymon Janc
d699e8ccf0 Bluetooth: Host: Make error messages unique
Both bt_le_adv_stop() and bt_le_adv_resume() were logging same
error message. Add aditional context to it so that logs are
distinguishable.

Signed-off-by: Szymon Janc <szymon.janc@codecoup.pl>
2025-07-11 08:25:53 -10:00
Lyle Zhu
e4569c434a Bluetooth: Classic: L2CAP: Fix retransmission timer restarting
When received the valid S frame, the retransmission timer should not
be restarted if unacknowledged I-frames have been sent but the
retransmission timer has not elapsed.

Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
2025-07-09 09:43:12 -05:00
Vinayak Kariappa Chettimada
f6495d8b43 Bluetooth: Controller: Fix Tx Ack FIFO index corruption under race
Fix Tx Ack FIFO's first index being advanced beyond a
recorded ack_last value in a node_rx when under race
between ll_rx_get() being pre-empted while executing the
`tx_cmplt_get()` and a call to `ll_rx_put()` in an
interrupt service routine.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2025-07-09 09:42:58 -05:00
Loic Domaigne
a0a47a4b6d Bluetooth: ASCS: fix uninitialized pointer read
Fix uninitialized pointer read reported by Coverity.
Coverity CID: 529879

Signed-off-by: Loic Domaigne <tech@domaigne.com>
2025-07-08 13:44:37 -05:00
Lyle Zhu
d48e2bb4f4 Bluetooth: Classic: L2CAP: Fix issue that pending chan cannot be sent
When the returned buffer is a `NULL` of the pull function, it means
there is not any data needs to be sent. However maybe there is any
frame pending on other L2CAP channel needs to be sent over the same
ACL connection.

Re-trigger the TX processor. It will call the pull function again
and the pending buffer will be pulled from following L2CAP.

Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
2025-07-08 13:41:39 -05:00
Cheng Chang
80602f32c6 bluetooth: AVDTP:in set config_rej_rsp,LOSC can't be added.
The current logic will result in rsp always being accept because LOSC
added is 0. and according to the spec, LOSC should not be added to the
Set Configuration Reject response.

Signed-off-by: Cheng Chang <cheng.chang@nxp.com>
2025-07-08 13:37:37 -05:00
Olivier Lesage
aa4e6ac0dd bluetooth: host: Handle failure to disable scan when updating own_addr
It wasn't taken into account that bt_le_scan_set_enable()
has a return value. It's not likely that the controller
rejects the command when BT_DEV_SCANNING is set, however.

Signed-off-by: Olivier Lesage <olivier.lesage@nordicsemi.no>
2025-07-08 13:37:26 -05:00
Olivier Lesage
ef7ede64cc bluetooth: host: Do not try to set NRPA when scanning with identity
Attempting this would fail (assuming the controller is implemented
correctly) because when using legacy commands it is not allowed to
change the device address while scanning.

It also did not make sense. If we have configured the scanner to use
the identity address as own_addr, because the advertiser and scanner
addresses are shared when using legacy commands, setting the adv NRPA
here would overwrite the identity address used by the scanner, which
I assume is not the intention.

Signed-off-by: Olivier Lesage <olivier.lesage@nordicsemi.no>
2025-07-08 13:37:26 -05:00
Olivier Lesage
11782dbbc0 bluetooth: host: rename bool scan_enabled -> scan_disabled
It represents whether scanning was disabled as part of this flow.

Signed-off-by: Olivier Lesage <olivier.lesage@nordicsemi.no>
2025-07-08 13:37:26 -05:00
Olivier Lesage
43223a1661 bluetooth: host: Fix uninitialized own_addr_type for legacy scan+adv
In 25c993e5b7 a new case was introduced
where own_addr_type is not set by bt_id_set_scan_own_addr properly.

This led to issues for users where increasing their zephyr version
led to failures to start scanning after advertising in the case where
CONFIG_BT_SCAN_WITH_IDENTITY=n and legacy advertising commands are used.

Signed-off-by: Olivier Lesage <olivier.lesage@nordicsemi.no>
2025-07-08 13:37:26 -05:00
Cheng Kai
ec0865cb4a Bluetooth: SDP: fix attr value len 32 invalid
fix sdp attr value len 32, which was not supported.

Signed-off-by: Cheng Kai <chengkai@xiaomi.com>
2025-07-07 10:13:47 -05:00
Make Shi
9104e941f9 Bluetooth: Classic: L2CAP: Set default value for BR timer timeout
When peer monitor and retransmission timeout are zero, set them to the
default values. This ensures that the monitor timeout is always a valid
value to avoid the L2CAP BR timer work queue hang.

Signed-off-by: Make Shi <make.shi@nxp.com>
2025-07-07 10:07:10 -05:00
Gaetan Perrot
1610aa0e9f bluetooth: host: a2dp: remove redundant null check
Remove duplicated check for 'ep->stream == NULL' to clean up conditionals
and avoid unnecessary repeated evaluations.

This cleans up the code and avoids unnecessary repeated condition
evaluation.

Signed-off-by: Gaetan Perrot <gaetan.perrot@spacecubics.com>
2025-07-04 14:21:47 -10:00
Mark Wang
80c1e6929a bluetooth: smp: add todo comments for ctkd
need to consider corner cases of ctkd as the added code comments.

Signed-off-by: Mark Wang <yichang.wang@nxp.com>
2025-07-04 13:10:21 -05:00
Mark Wang
81d938606d bluetooth: smp: CTKD issue when cross br and ble connections and security
The peer uses the RPA address.
A BR connection is created firstly, a subsequent BLE connection is
created secondly, the BR SMP CTKD occur thirdly (The BLE LTK is
derived from BR and the BR SMP distribute peer's IRK and identity address
here), but the BLE LTK is saved to key pool that is not
matched with the previous BLE connection because the derived LTK is saved
with identity address and BLE connection uses RPA. Fix it by: Resolve the
BLE connections' RPA with the derived IRK to find the previous BLE
connections and match the connections with derived LTK key.

Signed-off-by: Mark Wang <yichang.wang@nxp.com>
2025-07-04 13:10:21 -05:00
Mike J. Chen
a392c33c60 bluetooth: fix bug when destroying tx queue buffers on disconnect
Channel tx_queue purging on disconnect was inconsistently handled
by the different channels: iso, l2cap, l2cap_br.

iso channels handled purging in the tx_data_pull hook.

l2cap and l2cap_br did the purging in channel delete functions
and did not expect tx_data_pull to be called for a disconnected
channel. Their data_pull functions could return a ptr to a
net_buf that was still on the tx_queue, which is problematic
when the conn tx_processor unrefs the returned buffer resulting
in multiple calls to the buf destroy function.

To make things consistent and correct, remove the code that tries
to purge tx_queues in the tx_processor and only do purging in
the channels themselves when they are deleted/disconnected.

Also refactor and clarify referencing of the net_buf returned
by tx_data_pull. It was confusing who had a reference and
when, which could vary depending on the length of the original
buffer. There are three cases: the buffer length is less
than the tx.mps, greater the mps but less than the mtu so
requiring segementation but not fragmentation, or greater than
both mps and mtu so requiring both segmentation and fragmentation.
The conn layer would increase the refcnt if the length was
greater than the mtu, but not have any awareness of whether
the net_buf was still on the tx_queue or not.

Now it is the tx_data_pull callbacks responsibitity to increment
the reference count if it is returning a pointer to a net_buf
that it is still keeping on the tx_queue for segmentation purposes.
The conn layer will now always transfer that reference into a
fragment view and not conditional it on the length relative to
the mtu, and always decrement the reference to the parent when
the fragment is destroyed.

So there is no risk of decrementing a reference to a net buf
that might still be on a tx_queue, which simplifies error
handling in particular.

Also add error handling paths for when asserts are not enabled.

Signed-off-by: Mike J. Chen <mjchen@google.com>
2025-07-03 11:59:02 -05:00
Vinayak Kariappa Chettimada
3eee7c5325 Bluetooth: Controller: Fix peripheral role assertion on conn update
Fix peripheral role assertion during connection update and
simultaneous flash operations.

prepare_cb: Actual EVENT_OVERHEAD_START_US = 6149

This happens due to instant latency at connection update
where the ticks_at_expire was in the past.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2025-07-03 11:56:59 -05:00
Vinayak Kariappa Chettimada
6935a4bf90 Bluetooth: Controller: nRF54Lx: Flash sync restrict to one iteration
Write operations are not constant time on nRF54Lx SoCs and
depend on the previous value present versus new value to be
written. Hence, perform no more than one iteration.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2025-07-03 11:56:59 -05:00
Jiawei Yang
89d54b6f48 Bluetooth: HFP: Fail to get Bluetooth Profile Descriptor List
In HFP PTS, cases run fail with the log 'Bluetooth Profile Descriptor
List UUID (0x111E) is missing'.

With this patch, the affected cases can pass correctly.

Signed-off-by: Jiawei Yang <jiawei.yang_1@nxp.com>
2025-07-03 11:54:40 -05:00
Mark Wang
b93dec9295 bluetooth: sdp: cast from 'const x *' to 'struct x *' drops const qualifier
SonarQube reports: cast from 'const struct _snode *' to 'struct _snode *'
drops const qualifier. Fix it by removing the const.

Signed-off-by: Mark Wang <yichang.wang@nxp.com>
(cherry picked from commit 7982ee0df13b7f9e54595f799e32f38c464b0f9e)
2025-07-02 03:52:02 -10:00
Mark Wang
3887980c29 bluetooth: sdp: fix the corner cases for the sdp discover
1. bt_sdp_discover may be called in two tasks at the same time:
(1) If the 2 calls are for 2 acl conns,
the same session may be new allocated to two acl conns.
(2) If the 2 calls are for the same acl conn, the same session should be
used.
Use the bt_conn_index to map acl conn with session to fix it.
2. fix that bt_sdp_discover may use one session that is disconnecting,
put req to reqs_next and process it after disconnected.
3. remove memset of session, reset each members individually.

Signed-off-by: Mark Wang <yichang.wang@nxp.com>
(cherry picked from commit dcbe5d7dc5d72ce0d2915cf2b291cc84a916a536)
2025-07-02 03:52:02 -10:00
Mark Wang
2fa9f3b557 bluetooth: sdp: callback the pending reqs when sdp l2cap connecting fail
If the sdp l2cap connecting fail, the pending reqs need callback.

Signed-off-by: Mark Wang <yichang.wang@nxp.com>
2025-07-02 03:52:02 -10:00
Pisit Sawangvonganan
0ec49fa570 kconfig: fix typo in (soc, subsys)
Utilize a code spell-checking tool to scan for and correct spelling errors
in `Kconfig` files within the `soc` and `subsys` directory.
Additionally, incorporates a fix recommended by the reviewer.

Signed-off-by: Pisit Sawangvonganan <pisit@ndrsolution.com>
2025-07-01 10:58:54 -10:00
Jiawei Yang
05e64bd699 Bluetooth: L2CAP: Limit BR/EDR L2CAP RX MTU to configured value
Ensure that the BR/EDR L2CAP RX MTU is limited to the configured
BT_L2CAP_RX_MTU value during channel configuration.

This change prevent potential buffer overflow issues when receiving
data larger than the configured buffer size.

Signed-off-by: Jiawei Yang <jiawei.yang_1@nxp.com>
2025-07-01 10:56:44 -10:00
Jiawei Yang
c0b1ed0682 Bluetooth: RFCOMM: Fix MTU calculation in rfcomm_connected
The MTU calculation in rfcomm_connected() was incorrectly adding the FCS
size instead of subtracting it.
This could lead to buffer overflows when sending data that exceeds
the actual available space.

Fix the calculation by properly subtracting both the RFCOMM header size and
the FCS size from the L2CAP MTU to get the correct RFCOMM session MTU.

Signed-off-by: Jiawei Yang <jiawei.yang_1@nxp.com>
2025-07-01 10:56:44 -10:00
Emil Gydesen
79204ecc71 Bluetooth: TMAP: Fix issues with _SUPPORTED kconfigs
Some of the Kconfig options did not reflect the actual
requirements from the TMAP spec. Relying on the AUDIO_TX
and AUDIO_RX was misleading, as they could be set by
broadcast configurations when the features required
unicast features.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2025-07-01 10:56:06 -10:00
Doug Young
39cb574438 Bluetooth: host: adv: update log levels in bt_le_adv_resume()
Changed logs in adv.c that would result in advertising from resuming
to err logs to aid in debugging.

Signed-off-by: Doug Young <dougyoung@meta.com>
2025-06-27 18:19:54 -05:00
Vinayak Kariappa Chettimada
6e8f081385 Bluetooth: Controller: Fix peripheral assert under single timer use
Fix peripheral EVENT_OVERHEAD_START_US assertion due to
missing packet timer timestamp accumulation under single
timer use in nRF54Lx SoCs.

Relates to commit 373dc0db71 ("Bluetooth: Controller:
Single timer use Extended Advertising nRF54L support").

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2025-06-27 09:03:05 -10:00
Lyle Zhu
0c2c93d57d Bluetooth: Classic: SCO: Modify bt_sco_chan::ops with const
Use `const` to modify the field `ops` of the structure
`struct bt_sco_chan`.

Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
2025-06-26 22:05:25 -05:00
Lyle Zhu
256e3a1879 Bluetooth: Classic: HFP_AG: Register SCO connect callback
There is an issue that the SCO connect cannot be un-referenced by HFP
AG when the SCO connection is broken if the SCO connect is not created
by HFP AG.

Register SCO connect change callback. And un-reference the SCO connect
in SCO disconnected callback.

Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
2025-06-26 22:05:25 -05:00
Lyle Zhu
78a22f461a Bluetooth: Classic: SCO: Add SCO conn connected/disconnected cb
Add two functions to register/unregister SCO conn connected/
disconnected callback.

Add macro BT_SCO_CONN_CB_DEFINE to defined static SCO connect callback.
Define section `bt_sco_conn_cb` to ROM.

Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
2025-06-26 22:05:25 -05:00
Lyle Zhu
0083d8e960 Bluetooth: Classic: HFP_AG: Improve the SCO management
There are two issues found,
Issue 1, if the SCO connection has been established, the SCO connected
event will not be notified. Then the call that waiting for the SCO
connected event will not be updated. And the call will be rejected due
to the timeout.
Issue 2, the SCO con object will be cleared when SLC is disconnecting
and the SCO connection has been established. It causes the SCO connect
object will be `NULL` in the SCO disconnected callback.

Add a new field `sco_conn` to keep the SCO connect object. Manage the
SCO connection via the field `ag->sco_conn`.

When creating the SCO connection, keep the created SCO connect object
to `ag->sco_conn`. And if the `ag->sco_chan.sco` is `NULL`, it means
the SCO connection has been established. Just update the call that
waiting for the SCO connected event directly.
Increase the `ref` of SCO connect object and pass to the field
`ag->sco_conn` if the `ag->sco_conn` is `NULL`.
Decrease the `ref` of SCO connect object if the `ag->sco_conn` is not
`NULL` when disconnect the SCO connection or process SCO disconnected
event.

Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
2025-06-26 22:05:25 -05:00
Aleksandr Khromykh
b6a0f4e072 bluetooth: mesh: remove unused functionality
Commit removes unused host hci custom functionality
that was moved to mesh by misinterpretation of it.

Signed-off-by: Aleksandr Khromykh <aleksandr.khromykh@nordicsemi.no>
2025-06-26 14:09:01 +02:00
Aleksandr Khromykh
b408445b4d bluetooth: mesh: remove tinycrypt support
Tinycrypt support deprecated in Zephyr 4.0 release.
Time to remove it.

Signed-off-by: Aleksandr Khromykh <aleksandr.khromykh@nordicsemi.no>
2025-06-26 11:13:19 +02:00
Nirav Agrawal
5a8189bf2a bluetooth: host: gatt: fix null-ptr access if no include-svc userdata
- Issue: There is a bus-fault while accessing empty userdata structure
  pointer if application does not include any include service
  userdata instance (which consist of UUID list of included service)
  but service array has defined dummy entry for it assumed to be
  overridden by app during initial flow.
- For example, the issue has happened in case of tmap-central sample
 without "CONFIG_BT_OTS" support. there are some MCS attributes
 dependent on OTS service because of that
 "BT_GATT_INCLUDE_SERVICE(NULL)" entry is added as part of service
 definition. The given entry does not have userdata handler defined
 and is expecting to be overriden by the app if it will be included.
 During "bt_mcs_init()" call, "mcs.attrs[i].user_data" is not
 populated with any attr-instance pointer. This makes CPU to access
 null-address during reading local-database include-service attribute
 which was not provided by the app but the include-service entry was
 added to the db.
- Fix: Adding condition to check if user-data has null address, and
 returning back to avoid any hard-faults.

Signed-off-by: Nirav Agrawal <nirav.agrawal@nxp.com>
2025-06-25 15:51:24 -10:00
Vinayak Kariappa Chettimada
fe348bce8e Bluetooth: Controller: Fixup ticker reschedule with drift
If the next ticker is too close then hop over it when
rescheduling a ticker with drift in slot window is used.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2025-06-24 15:35:51 -05:00
Emil Gydesen
4adabb49da Bluetooth: BAP: Use IN_RANGE in bt_bap_base_get_base_from_ad
This simplyfies the checks in the function a bit, and makes
Sonarcloud happy.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2025-06-24 15:34:17 -05:00
Emil Gydesen
c8ac20f2b2 Bluetooth: Audio: Add missing default case for bt_audio_dir_str
The switch was missing a default case as per the coding
guidelines.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2025-06-24 15:34:01 -05:00
Emil Gydesen
ae6b33be07 Bluetooth: CSIP: Remove excess + at start of link for test_k
Removed the excess +.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2025-06-24 15:33:41 -05:00
Benjamin Cabé
13ec1ea3dd Bluetooth: controller: update non-inclusive language
use "Accept List" terminology instead of white list

Signed-off-by: Benjamin Cabé <benjamin@zephyrproject.org>
2025-06-23 16:31:16 -05:00
Johan Hedberg
58fe2ab5e6 Bluetooth: Mesh: shell: Use bt_hci_cmd_alloc()
Use bt_hci_cmd_alloc() instead of the soon to be deprecated
bt_hci_cmd_create().

Signed-off-by: Johan Hedberg <johan.hedberg@silabs.com>
2025-06-23 12:44:53 -07:00
Johan Hedberg
3056d0773e Bluetooth: Host: shell: Use bt_hci_cmd_alloc()
Use bt_hci_cmd_alloc() instead of the soon to be deprecated
bt_hci_cmd_create().

Signed-off-by: Johan Hedberg <johan.hedberg@silabs.com>
2025-06-23 12:44:53 -07:00
Johan Hedberg
896212933a Bluetooth: Host: scan: Use bt_hci_cmd_alloc()
Use bt_hci_cmd_alloc() instead of the soon to be deprecated
bt_hci_cmd_create().

Signed-off-by: Johan Hedberg <johan.hedberg@silabs.com>
2025-06-23 12:44:53 -07:00
Johan Hedberg
e9f06126ea Bluetooth: Host: iso: Use bt_hci_cmd_alloc()
Use bt_hci_cmd_alloc() instead of the soon to be deprecated
bt_hci_cmd_create().

Signed-off-by: Johan Hedberg <johan.hedberg@silabs.com>
2025-06-23 12:44:53 -07:00