Commit graph

9787 commits

Author SHA1 Message Date
Vinayak Kariappa Chettimada
f36ddf0423 Bluetooth: Controller: Fix BT_CTLR_TIFS_HW conditional compile
Fix CONFIG_BT_CTLR_TIFS_HW conditional compile by replacing
DPPI_PRESENT with CONFIG_BT_CTLR_TIFS_HW.

HAL_SW_SWITCH_TIMER_CLEAR_PPI can be same as
HAL_RADIO_END_TIME_CAPTURE_PPI, and this is ok as same
bit will be used to disable PPI/DPPI.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2024-02-26 11:35:39 +00:00
Jonathan Rico
d79b99a979 Bluetooth: conn: call tx_notify from a single exec context
Always execute tx_notify from a single context. For sanity and ease of
debugging / observability.

The previous behavior was calling from BT_RX thread + system workqueue.

Signed-off-by: Jonathan Rico <jonathan.rico@nordicsemi.no>
2024-02-26 11:34:49 +00:00
Lyle Zhu
e9a5834944 Bluetooth: Host: Update BR L2CAP channel state
In the function bt_l2cap_chan_set_state, BR
channel is treated as LE Chan.
The BR L2CAP channel state is updated
incorrectly.

Add a function bt_l2cap_br_chan_set_state
for BR L2CAP channel. For BR/EDR channel,
call bt_l2cap_br_chan_set_state directly.

Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
2024-02-26 11:33:40 +00:00
Lyle Zhu
08f8278666 Bluetooth: Host: Add bt_l2cap_br_chan_del
Add bt_l2cap_br_chan_del for BR/EDR channel.

Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
2024-02-26 11:33:40 +00:00
Lyle Zhu
47d0280834 Bluetooth: Host: Add bt_l2cap_br_disconnected
Handle BR/EDR L2CAP disconnection notification
separately.

Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
2024-02-26 11:33:40 +00:00
Emil Gydesen
5f7ecf4def Bluetooth: BAP: SD: Fix missing support for API calls in callbacks
In the scan delegator when adding a source, the state was not
marked as active before calling the PA sync callback, which
would prevent applications from requesting PAST in that callback.

This commit also adds and fixes a few log statements.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2024-02-26 12:31:11 +01:00
Lyle Zhu
f5cab9debc Bluetooth: Host: Clang-format host/br.c
Clang-format file host/br.c

Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
2024-02-26 11:50:55 +01:00
Lyle Zhu
b938428d58 Bluetooth: Host: Notify upper layer if the BR ACL is established
In current implementation, the upper is not notified when BR ACL
connection is established.
L2CAP does not know that ACL connection has been established.
All fixed channels will not be notified. Then The SDP server
cannot work properly.

Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
2024-02-26 11:50:55 +01:00
Emil Gydesen
28276ce982 Bluetooth: CSIP: Fix typo from cm_csip to cmd_csip
The CSIP commands had a typo in the prefix of the shell
functions.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2024-02-25 22:28:26 -05:00
Emil Gydesen
25416b86e9 Bluetooth: CSIP: remove print_sirk
The print_sirk function that simply logs the SIRK has been removed,
as the SIRK is now directly accessible to the application via the
get_sirk function.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2024-02-25 22:28:26 -05:00
Emil Gydesen
41a589c5fa Bluetooth: CSIP: Add support for dynamic SIRKs
Add support for dynamically change the SIRK in a CSIS.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2024-02-25 22:28:26 -05:00
Emil Gydesen
e0dbd3fd39 Bluetooth: Audio: Shell: CAP change volume mute command
Adds the change volume mute command to the CAP commander shell.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2024-02-25 22:25:26 -05:00
Emil Gydesen
b9360488f7 Bluetooth: CAP: Commander change volume mute procedure
Adds the CAP Commander Change Volume mute procedure.
This procedure changes the volume mute on one or more
CAP Acceptors.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2024-02-25 22:25:26 -05:00
Pavel Vasilyev
e30b7a84bc Bluetooth: Mesh: Enable CDP1 by default
CDP1 is mandatory to qualify a mesh device for mesh protocol v1.1.
The dependency on BT_MESH_MODEL_EXTENSIONS is removed because if a node
contains only base models (for example Generic OnOff Server), this API
will consume extra RAM bytes which won't be used.

Signed-off-by: Pavel Vasilyev <pavel.vasilyev@nordicsemi.no>
2024-02-25 20:54:11 -05:00
Emil Gydesen
d9ff7eb0ed Bluetooth: GATT: Add missing LESC_MASK for encrypt check
The LE Secure connection (LESC) mask also require encryption,
and some users have been using e.g. BT_GATT_PERM_READ_LESC
without BT_GATT_PERM_READ_ENCRYPT, and then the encryption
check in bt_gatt_check_perm was never properly applied.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2024-02-19 20:46:28 +01:00
Emil Gydesen
baaa149f10 Bluetooth: BAP: Fix bad bcast assistant bis sync shift
The shift is currently necessary due to a mismatch of the
specs and the API, but the shift should not be done when
the value is BT_BAP_BIS_SYNC_NO_PREF as that is a special value.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2024-02-16 19:14:27 +01:00
Emil Gydesen
acd1e891cb Bluetooth: BAP: UC: Fix call to bt_gatt_get_mtu in notify
In the unicast_client_ep_notify we would always call
bt_gatt_get_mtu, regardless of whether data == NULL.

When there is a disconnection, the notify callbacks are
called with data == NULL to indicate a unsubscription.
In the case of the unicast client, this would also trigger
calls to bt_gatt_get_mtu when there is a disconnect, which
in turn would trigger a warning that ATT is not connected.

Postponing the call to bt_gatt_get_mtu fixes this.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2024-02-16 19:13:48 +01:00
Aleksander Wasaznik
7471ea87ee Bluetooth: Remove len param of bt_att_create_rsp_pdu
This served no purpose for responces. The minimum MTU is sufficient for
all ATT headers.

Signed-off-by: Aleksander Wasaznik <aleksander.wasaznik@nordicsemi.no>
2024-02-16 12:58:00 +01:00
Aleksander Wasaznik
98409830a2 Bluetooth: Correct bt_att_create_rsp_pdu reservation when EATT is enabled
When EATT is enabled, bt_att_create_rsp_pdu used to reserve headroom for
the SDU header even when responding on the UATT bearer.

That subtracted from the room for the ATT payload in the buffers. The
remaining buffer size was insufficient to create a PDU of ATT MTU size,
since the exchanged local MTU is calculated the with the assumption that
the SDU header is not present.

This broke the ATT MTU promise, and e.g. our read response will have two
bytes fewer than promised. This caused a failure in PTS.

The new bt_att_create_rsp_pdu pays attention to the bearer type and only
allocates the SDU header on EATT bearers.

Signed-off-by: Aleksander Wasaznik <aleksander.wasaznik@nordicsemi.no>
2024-02-16 12:58:00 +01:00
Emil Gydesen
8ad8878d61 Bluetooth: CAP: Shell: Fix argument issue for unicast_stop
The unicast_stop command takes either "all" or one or more
stream pointers as argument, but the argument handler did
not allow this.

The documentation for the command was also out of date.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2024-02-14 19:12:04 +01:00
Emil Gydesen
dee95eb768 Bluetooth: Audio: Shell: Fix context for the audio shell
The context had a bug where if GMAP was enabled, the context
was only BT_AUDIO_CONTEXT_TYPE_GAME.

The context should also (per BAP spec requirement) contain the
BT_AUDIO_CONTEXT_TYPE_UNSPECIFIED context.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2024-02-14 19:11:55 +01:00
Vinayak Kariappa Chettimada
7d6ca26c4c Bluetooth: Controller: Fix lll ISO stream get by group
Fix LLL ISO stream get by group to return stream context
sorted by CIS offset in ascending order.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2024-02-14 19:11:46 +01:00
Ping Wang
5ccd75b49b Bluetooth: Audio: define bt_bap_bass_subgroup struct.
The Broadcast Assistant API should be fully independent of the scan
delegator. Therefore the new struct bt_bap_bass_subgroup has been
defined to avoid a dependency.

Fixes: #68338

Signed-off-by: Ping Wang <pinw@demant.com>
2024-02-14 19:04:01 +01:00
Emil Gydesen
9ec754d9e6 Bluetooth: Host: Add ISO tx check for LOG_WRN in le_init_iso
The warning should only apply for configurations where the
device may actually send ISO data (e.g. not the ISO sync receiver).

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2024-02-14 08:25:10 +01:00
Emil Gydesen
3e634268d6 Bluetooth: ISO: Introduce bt_iso_chan_send_ts
The bt_iso_chan_send function could take an optional
timestamp by using 0 as an indicator. The issue with
this approach was that a timestamp value of 0 is valid,
and could cause potential issue with syncing streams
in a group.

To fully support transmitting with and without timestamp,
bt_iso_chan_send_ts has been introduced, which is the only
function of the two (bt_iso_chan_send being the other) that
supports timestamps.

A new function, rather than adding a boolean to the existing,
was chosen as it simplifies the individual functions as well
as making it more explicit what the function does.

Since the bt_iso_chan_send function is used by LE audio, both
the BAP and CAP send functions have similarly been updated.
Likewise, all tests and samples have been updated to use the
updated function(s), and BT_ISO_TIMESTAMP_NONE has been
removed.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2024-02-12 13:13:10 +01:00
Emil Gydesen
de296a2d7f Bluetooth: BAP: Fix BASE_SUBGROUP_MAX_COUNT value
The calculation for BASE_SUBGROUP_MAX_COUNT was off by one.
The macro did not consider the non-subgroup parameters of
the BASE that take up space. This effectively modifies
BASE_SUBGROUP_MAX_COUNT to be 24 instead of 25.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2024-02-10 16:34:27 +01:00
Pavel Vasilyev
0ea8cef97a Bluetooth: Mesh: Disable randomization on Link Close in RPR server
Disable randomization at the access layer in the Remote Provisioning
server when sending Link Stauts message as a responce on Link Close
message and then sending Link Report message right after it. Because of
the randomization, the report message is sent before the status message
which makes MESH/SR/RPR/PDU/BV-03-C test to fail.

This fixes MESH/SR/RPR/PDU/BV-03-C test.

Signed-off-by: Pavel Vasilyev <pavel.vasilyev@nordicsemi.no>
2024-02-09 16:29:12 -06:00
Pavel Vasilyev
44f86b81a3 Bluetooth: Mesh: Disable randomization in DFD model for canceling update
Disable randomization in the access layer when cancelling update in the
distribution server model. This is needed because the server sends 2
messages in a row and the gets reordered by the access layer
randomization feature making DFU/SR/FD/BV-43-C test to fail.

This fixes DFU/SR/FD/BV-43-C test.

Signed-off-by: Pavel Vasilyev <pavel.vasilyev@nordicsemi.no>
2024-02-09 16:29:12 -06:00
Jonathan Rico
a066921745 Bluetooth: conn: document obfuscated function: send_buf()
It is unclear from a cursory glance at the code what the caller of
`send_buf(buf)` should do with `buf` based on the returned error codes.

Document when ownership is and isn't transferred to `send_buf()`.

Signed-off-by: Jonathan Rico <jonathan.rico@nordicsemi.no>
2024-02-09 16:27:50 -06:00
Jonathan Rico
18c3571145 Bluetooth: conn: check for disconnected earlier when sending
Verify the connection is active before popping the buffer from the TX
queue.

The current behavior enables a race condition between `create_frag` and
the connection being torn down, as `buf` can be popped from the TX queue
but not destroyed by `bt_conn_process_tx`.

In that case, `buf` will be leaked.

Original analysis and fix proposal by @watsug.

Signed-off-by: Jonathan Rico <jonathan.rico@nordicsemi.no>
Reported-by: Adam Augustyn<watsug@gmail.com>
2024-02-09 16:27:50 -06:00
Emil Gydesen
7cfc8b3340 Bluetooth: BAP: Reset _prev_seq_num on ISO connection
Once an ISO channel has connected, the sequence number
always starts at 0. This reset was missing in the implementation,
and the _prev_seq_num from a previous connection may have
been kept.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2024-02-09 14:39:40 +01:00
Thomas Ebert Hansen
b15452bd08 Bluetooth: controller: Fix Data Length Update
Before a LL_FEATURE_REQ is sent, verify that the Data Length Update
procedure is still supported as it could have been unmasked as the result
of a previously completed Feature Exchange procedure.

Add unit test to verify the case of enqueuing both a
Feature Exchange procedure and Data Length Update procedure, where the
Feature Exchange procedure would result in the unmasking of the Data
Length Update procedure.

Signed-off-by: Thomas Ebert Hansen <thoh@oticon.com>
2024-02-09 13:46:41 +01:00
Thomas Ebert Hansen
8c412971a9 Bluetooth: controller: Fix PHY Update TX Q
Resume the TX Data Q when a LL_UNKNOWN_RSP is recieved instead of a
LL_PHY_RSP.

Update PHY Update unit test with more coverage of the TX Data Q pause
state.

Signed-off-by: Thomas Ebert Hansen <thoh@oticon.com>
2024-02-09 13:46:41 +01:00
Alexander Svensen
199487be54 Bluetooth: Host: Send status for terminated directed adv
- Fix bug where status was only sent for legacy adv

Signed-off-by: Alexander Svensen <alexander.svensen@nordicsemi.no>
2024-02-08 10:11:34 +00:00
Pavel Vasilyev
9171ee24da Bluetooth: Mesh: Warn if trying to send adv while suspended
This will warn if any of the mesh module will try to send anything while
the stack is suspended. Not clear what to do here as both advertisers
(legacy and ext) behaves differently. The legacy advertiser has a
thread which is stopped after the `bt_mesh_adv_disable` call and any
sent advs after suspending the stack will stay in the pool until the
advertiser is resumed. The extended advertiser will schedule its work,
but then fail because `ext_adv->instance` value is NULL, but will call
`bt_mesh_send_cb.start` with error `-ENODEV`. What to do with these 2
behaviors is unclear at the moment. Ideally none of the mesh stack
modules should call `bt_mesh_adv_send` after the stack was suspended, so
if this warning appears, the faulty module wasn't stopped properly and
this should be fixed. If not to add the adv to the pool, then it kind
of gets lost as the implementation probably expects one
of `bt_mesh_send_cb` callbacks which will never be called. Leaving the
warning until clear customer request comes.

Signed-off-by: Pavel Vasilyev <pavel.vasilyev@nordicsemi.no>
2024-02-08 10:11:19 +00:00
Ivan Iushkov
a3cbf8e2ac Bluetooth: fixing null-pointer dereference in l2cap channel destroyer
During local testing with UBSAN enabled, warning was reported:
bluetooth/host/l2cap.c:980:25: runtime error: member access
within null pointer of type 'struct k_work_q'

It turned out that le_chan->rtx_work.queue can be NULL.
Since null-pointer dereference is a UB, additional check
was added to ensure we don't access
`le_chan->rtx_work.queue->thread` when
`le_chan->rtx_work.queue == NULL`

The same changes applied to l2cap_br.c

Signed-off-by: Ivan Iushkov <ivan.iushkov@nordicsemi.no>
2024-02-08 09:48:02 +00:00
Ivan Iushkov
e8d090011b Bluetooth: fixing UBSAN warnings related to Codec Configuration
During local testing with UBSAN enabled, warning was reported:
bluetooth/host/iso.c:237:2: runtime error: null pointer passed
as argument 2, which is declared to never be null

It turned out that when datapath doesn't contain
codec information, cc_len is 0 and cc is NULL

In order to avoid UB,
now we call memcpy only when cp->codec_config_len > 0

Signed-off-by: Ivan Iushkov <ivan.iushkov@nordicsemi.no>
2024-02-08 09:48:02 +00:00
Ivan Iushkov
b1e9f86378 Bluetooth: Fixing UBSAN warning in CTE field parsing in adv.c/scan.c
during local testling, UBSAN reported the following warnings:
- bluetooth/host/adv.c:2067:19: runtime error: shift exponent
255 is too large for 32-bit type 'long unsigned int'
- bluetooth/host/scan.c:828:18: runtime error: shift exponent
255 is too large for 32-bit type 'long unsigned int'

It turned out that we can't use BIT() macro directly on
bt_hci_evt_le_per_advertising_report::cte_type field.
According to Core Spec, `cte_type = 0xFF` corresponds
to `No contstant tone extension`.

Added separate function to convert CTE bit field from
HCI format to bt_df_cte_type

Signed-off-by: Ivan Iushkov <ivan.iushkov@nordicsemi.no>
2024-02-08 09:48:02 +00:00
Pavel Vasilyev
548851ac7a Bluetooth: Mesh: Fix solicitation PDU tx dep on proxy
If `CONFIG_BT_MESH_GATT_SERVER` is disabled or the advertising set
doesn't support proxy adv, the solicitation PDU will not be sent.
However, solicitation PDU transmission doesn't depend on the proxy
feature of the device it sends. Therefore, solicatation PDU should be
sent regradless of `CONFIG_BT_MESH_GATT_SERVER` option and advertiser
tag.

Signed-off-by: Pavel Vasilyev <pavel.vasilyev@nordicsemi.no>
2024-02-08 09:04:48 +01:00
Kamil Piszczek
129b73ce26 bluetooth: gatt: remove operation infix from authorization callback API
Removed the "operation" infix from the bt_gatt_authorization_cb
callback structure in the Bluetooth GATT header.

Signed-off-by: Kamil Piszczek <Kamil.Piszczek@nordicsemi.no>
2024-02-07 15:36:25 +00:00
Emil Gydesen
df3fcc9b1f Bluetooth: CAP and HAP: Shell: Replace - with _ in commands
The dash (-) makes clang-format unhappy, and most other commands
use underscore (_) instead.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2024-02-07 15:26:29 +00:00
Pavel Vasilyev
e495876db6 Bluetooth: Mesh: Reset solicitation settings before calling reset cb
Trigger erasing solicitation settings before calling
`bt_mesh_settings_store_pending` and `bt_mesh_prov.reset` callback.
The `bt_mesh_settings_store_pending` flushes every settings that is
pending to be erased. The `bt_mesh_prov.reset` callback must be called
as the last step because a user is free to do anything from this
callback including rebooting or reprovisioning the device.

Signed-off-by: Pavel Vasilyev <pavel.vasilyev@nordicsemi.no>
2024-02-07 15:25:18 +00:00
Emil Gydesen
590d3e1114 Bluetooth: BAP: Broadcast source enabling state transition fix
Since we may go from enabling to qos-configured state if the
call to bt_iso_big_create fails, that is a valid transition.
If bt_iso_big_create currently fails, then the source ends in a
state where it cannot be recovered.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2024-02-06 09:51:16 +01:00
Emil Gydesen
f4b83415d6 Bluetooth: CAP: Fix uninitialized values in broadcast start
When CONFIG_BT_ISO_TEST_PARAMS is enabled then the
bt_bap_broadcast_source_param in
bt_cap_initiator_broadcast_audio_create had uninitialized values.

A general and future proof solution for this is to simply initialize
the entire struct to 0.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2024-02-06 09:50:53 +01:00
Emil Gydesen
b9056de5d1 Bluetooth: ISO: Fix duplicate log statements for PDU check
Modifies two log statements so that it is clear whether it
is failing to validate broadcast or unicast PDU sizes.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2024-02-05 19:52:21 +00:00
Emil Gydesen
27abc1d944 Bluetooth: BAP: Broadcast assistant shell treat PA sync as bool
Modify the broadcast assistant commands that take the PA sync argument
so that it is treated as a bool. This allows users to use
"true", "on", "1" or "0x01" for true values and "false", "off", "0"
for false values.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2024-02-05 12:40:23 -06:00
Troels Nilsson
8acca664d2 Bluetooth: Controller: Fix periodic adv data truncation
Advertising data has to be truncated at a PDU boundary

Similar to earlier fix for extended advertising reports

Found in several EBQ tests, including LL/DDI/SCN/BV-25-C,
LL/DDI/SCN/BV-21-C and LL/DDI/SCN/BV-46-C

Signed-off-by: Troels Nilsson <trnn@demant.com>
2024-02-05 18:18:57 +01:00
Lyle Zhu
4e7be1ecaa Bluetooth: Host: set valid SCO packet type
The SCO cannot be created if the eSCO is unsupported.
It is caused by the packet type cannot be set
correctly.

Set valid bitmap for SCO and eSCO packet type in
command "Accept Synchronous Connection Request".

Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
2024-02-05 17:46:49 +01:00
Emil Gydesen
017f59cb66 Bluetooth: BAP: Broadcast sink: Fix bis_sync in update_recv_state_base
In the update_recv_state_base function, we should update the
BASE with any new metadata that we have received (as that may
change while streaming). However, this function did not properly
keep the existing bis_sync values for the
subgroups, causing the bis_sync for all subgroups to be 0.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2024-02-05 17:46:31 +01:00
Emil Gydesen
43bc3200fa Bluetooth: BAP: Stop broadcast sink from removing receive state
The receive state may be added by the broadcast sink if not added
by the application, but even in that case when the broadcast sink
is deleted, we should not remove the receive state, as the receive
state may still container information about the PA sync that has a
lifetime not coupled with the broadcast sink.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2024-02-05 17:46:11 +01:00