Commit graph

9787 commits

Author SHA1 Message Date
Szymon Janc
baf3cc9fe0 bluetooth: OTS: Delay indications to system workqueue
OTS requires that indications about state change are sent after
response to ATT Write.

OTS Specification p.4.4.4.: "An OLCP or OACP operation is started
when the ATT Write Response is received from the Object Server as
a result of the Object Client writing an Op Code to a control point
to perform some desired action. The control point operation ends
when the Object Server sends an indication to the Object Client
 with the Op Code set to Response Code."

Signed-off-by: Szymon Janc <szymon.janc@codecoup.pl>
2024-04-23 15:32:07 +02:00
Rubin Gerritsen
237c59585e Bluetooth: Host: Rename bt_conn_state_t states for clarity
To make it easier to understand the code, the following was done:
- Use INITIATING/ADV for state names that are exclusive to central
  or peripheral. Previously it was not necessarily clear that the state
  BT_CONN_CONNECTING was for central only by just looking at where
  it was used. The terms INITIATING/ADV were used in favor
  of central and peripheral as these terms also work for SCO connection
  establishment.
- BT_CONN_CONNECTING_SCAN -> BT_CONN_SCAN_BEFORE_INITIATING
  to make it more clear that we are not scanning and connecting at
  the same time. The new name should make it more clear why we are
  scanning - only with the intention to start the initiator later.
- BT_CONN_CONNECTING_AUTO -> BT_CONN_INITIATING_FILTER_LIST.
  This makes it clear that this state is something different than
  BT_CONN_AUTO_CONNECT.

Signed-off-by: Rubin Gerritsen <rubin.gerritsen@nordicsemi.no>
2024-04-23 15:31:59 +02:00
Rubin Gerritsen
1c132c90aa Bluetooth: Host: Document flags used for connection establishment
When initially reading some of the host code it was unclear to me
why they were needed an how they are used.
By adding some documentation,
this can hopefully make it easier for others to understand these.

Signed-off-by: Rubin Gerritsen <rubin.gerritsen@nordicsemi.no>
2024-04-23 15:31:59 +02:00
Carles Cufi
a1dd9a5f6e bluetooth: host: Fix alignment of gatt_chrc
The following warning is issued by clang:

warning: field  within 'struct gatt_chrc' is less aligned than 'union
gatt_chrc::(anonymous at subsys/bluetooth/host/gatt.c:1859:2)' and
is usually due to 'struct gatt_chrc' being packed, which can lead
to unaligned accesses [-Wunaligned-access]

This is due to the fact that the uint16_t uuid field requires 2-byte
alignment but it is not marked as packed. Since the enclosing struct is
indeed packed, the required alignment is not guaranteed and so clang
complains. Fix it by ensuring that the union is marked as packed too.

Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
2024-04-23 14:23:04 +03:00
Théo Battrel
f461ae574f Bluetooth: Mesh: Remove usage of auto name in AD
The advertiser options to automatically add the name in the scan
response and the advertising data will be deprecated.

The Mesh files `proxy_srv.c` and `pb_gatt_srv.c` were using
BT_LE_ADV_OPT_USE_NAME. Add the device name in the advertising data
directly.

Signed-off-by: Théo Battrel <theo.battrel@nordicsemi.no>
2024-04-23 12:42:24 +02:00
Théo Battrel
6c9010be9f Bluetooth: Shell: Remove usage of auto name in AD
The advertiser options to automatically add the name in the scan
response and the advertising data will be deprecated.

Update the Bluetooth shell and its documentation to not use those
options anymore.

The option of the legacy advertiser run with `bt advertise` and the
behavior hasn't changed. The code has been updated to no longer use the
advertiser option but the original behavior has been reproduced.

The option of the extended advertiser have been updated to be more
explicit. The options `name` and `name-ad` have been removed from the
`bt adv-create` and `bt adv-param`. The option `name` and `dev-name`
have been added to the `bt adv-data` command.

- `name <str>` will advertise the given name.
- `dev-name` will advertise the device name.

Signed-off-by: Théo Battrel <theo.battrel@nordicsemi.no>
2024-04-23 12:42:24 +02:00
Aleksander Wasaznik
46ff1dff56 Bluetooth: Fix store disconnected_handles reason
Fixes: https://github.com/zephyrproject-rtos/zephyr/issues/70497

Signed-off-by: Aleksander Wasaznik <aleksander.wasaznik@nordicsemi.no>
2024-04-22 06:49:00 -07:00
Rubin Gerritsen
d3cfbf1ae1 Bluetooth: Host: Document scanning dev flags
When initially reading some of the host code it was unclear
to me why they were needed an how they are used.
By adding some documentation, this can hopefully make it
easier for others to understand these.

Signed-off-by: Rubin Gerritsen <rubin.gerritsen@nordicsemi.no>
2024-04-22 06:48:47 -07:00
Théo Battrel
7d4b6c6306 Bluetooth: Controller: Fix UBSan error
UBSan was showing the following error:

```
runtime error: left shift of 137 by 24 places cannot be represented in
type 'int'
```

Cast the value to `uint32_t` to make UBSan happy.

Signed-off-by: Théo Battrel <theo.battrel@nordicsemi.no>
2024-04-18 08:05:14 -07:00
Aleksander Wasaznik
5dd1cdda3b Bluetooth: Remove rx < tx prio check
The comment states the reason for this requirement is to detect
violations by a remote peer. The ATT version of this was removed in
ea04fd95f9. TLDR: It's neither possible
for, nor the job of the host to police the remote device.

We remove this requirement to be more flexible about the number of
priority levels in the system, and to avoid the temptation of using
priorities as a synchronization mechanism.

Signed-off-by: Aleksander Wasaznik <aleksander.wasaznik@nordicsemi.no>
2024-04-18 14:56:42 +02:00
Erik Brockhoff
7724b3e356 Bluetooth: controller: refactor of procedure init for mem optim
Refactoring alloc/init of procedures in LLCP to optimize memory.

Signed-off-by: Erik Brockhoff <erbr@oticon.com>
2024-04-18 14:54:47 +02:00
Andries Kruithof
d96f98188c Bluetooth: CAP: Shell: Add cancel command
We didn't have a cancel command for the CAP commander, so adding this
command here.

Signed-off-by: Andries Kruithof <andries.kruithof@nordicsemi.no>
2024-04-17 14:31:56 +02:00
Emil Gydesen
b4eac67b8b Bluetooth: BAP: Shell: Add support for decoding LC3 data
Add support for decoding incoming LC3 data. At this point
we only instantiate a single LC3 decoder, so only one frequency
and duration is supported.

To accomodate for the increased RAM usage, the number of unicast
streams support have been decreased.

Further more, the LC3 handling in the shell has overall been
improved, also for encoding.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2024-04-16 09:12:47 +02:00
Jonathan Rico
0794b22c9c Bluetooth: l2cap: Fix SDU buffer leak
`ret` is the amount sent from the current buffer. `sent` contains the
total amount that was transferred in the while loop.

Signed-off-by: Jonathan Rico <jonathan.rico@nordicsemi.no>
2024-04-15 16:24:12 +02:00
Emil Gydesen
2b7f5dce25 Bluetooth: Audio: Shell: Runtime config of CAP/GMAP ACs
Modifies the audio configuration (ac) commands for CAP
and GMAP to use the default presets instead of supplying
the preset as arguments. This will allow the user to
use the `bap preset` command to configure everything in the
codec configuration before the AC commands are issued.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2024-04-15 12:56:33 +02:00
Emil Gydesen
dd7e77b77c Bluetooth: BAP: Shell: Fix bad PA sync ref for sink auto scan
When creating a broadcast sink using the auto scan feature,
the call to bt_le_per_adv_sync_create would use a local
PA sync pointer, instead of one from the per_adv_syncs
array, making it impossible to stop the PA sync afterwards.

This commit modifed the auto_scan so that it properly uses
the per_adv_syncs array, while still assigning the PA sync
in the shell broadcast sink struct.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2024-04-15 12:55:52 +02:00
Emil Gydesen
24f0a83326 Bluetooth: Audio: Shell: Fix chan alloc print for mono
The print_codec_cfg_chan_allocation did not take the case where
chan_allocation == BT_AUDIO_LOCATION_MONO_AUDIO into account,
in which case it should print "Mono".

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2024-04-15 12:55:35 +02:00
Aleksander Wasaznik
a64d20f6f0 Bluetooth: host: sched-lock bt_recv()
`bt_recv` is invoked from the BT long work queue, which is preemptible.
The host uses cooperative scheduling to ensure thread safety.

Signed-off-by: Aleksander Wasaznik <aleksander.wasaznik@nordicsemi.no>
2024-04-13 07:05:20 -04:00
Morten Priess
2f1a254eae Bluetooth: controller: Implement LE Create BIG Test command
Implement test version of the LE Create BIG command ll_big_test_create
(BT_HCI_OP_LE_CREATE_BIG_TEST) in the controller.

This enables use of CONFIG_BT_ISO_ADVANCED, which supports use of
the following BIG/QoS configuration parameters (otherwise derived):

- ISO_Interval
- NSE
- Max_PDU
- BN
- IRC
- PTO

Signed-off-by: Morten Priess <mtpr@oticon.com>
2024-04-12 14:58:07 +02:00
Vinayak Kariappa Chettimada
7ece6aed16 Bluetooth: Controller: Fix regression in BT_RX_STACK_SIZE use
Fix regression in BT_RX_STACK_SIZE use due to
commit b91728619c ("Bluetooth: host: remove
`CONFIG_BT_RECV_BLOCKING`").

Profiling of Controller Rx thread has been mentioned in
commit 586ba9fd13 ("Bluetooth: Controller: Increase
BT_RX_STACK_SIZE for BT_HCI_RAW enabled").

Also, move the TX_STACK_SIZE value as default in Kconfig
from the explicit value being set in hci_ipc sample.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2024-04-12 13:48:57 +02:00
Erik Brockhoff
dca085e155 bluetooth: controller: refactor node_rx_pdu for memory optimization
Generic node_rx_hdr struct contains data not used for done event, so this
pdu specific data is moved to node_rx_pdu to minimize memory usage for
MFIFO_done alloc.

This however calls for a considerable write-through replacing the generic
node_rx_hdr with node_rx_pdu when relevant and needed.

Signed-off-by: Erik Brockhoff <erbr@oticon.com>
2024-04-12 09:19:08 +02:00
Erik Brockhoff
83f0647762 bluetooth: controller: use correct CONFIG for central CIS create proc. data
Use CONFIG_BT_CTLR_CENTRAL_ISO instead of CONFIG_BT_CENTRAL in
declaring central CIS CREATE procedure context data. In some configs the
size of this data structure is bound by central CIS CREATE, so doing it
correctly will save memory in the procedure context allocation.

Signed-off-by: Erik Brockhoff <erbr@oticon.com>
2024-04-12 09:18:22 +02:00
Erik Brockhoff
ad46ed78d4 bluetooth: controller: fix periph failure to disconnect on proc. collision
If central initiates incompatible procedure after having replied (with
_IND), peripheral fails to disconnect as spec'ed.

Fix by correctly setting the INCOMPAT flag to reserved on IND receipt to
enforce the disconnect.

Signed-off-by: Erik Brockhoff <erbr@oticon.com>
2024-04-11 16:01:34 +02:00
Jonathan Rico
43de309b3e Bluetooth: l2cap: Remove (net/buf) frag support
It's needless complexity, and the terminology clashes with
Bluetooth (HCI frags).

It has one user, IPSP, that is going away soon.

Removing frag support will allow a future optimization, removing the
need for HCI and L2CAP fragment buffer pools, saving memory.

Signed-off-by: Jonathan Rico <jonathan.rico@nordicsemi.no>
2024-04-11 14:40:32 +02:00
Jonathan Rico
e3ff993000 Network: L2: remove IPSP
Remove IPSP support from the tree.

It has no maintainers, and is regularly broken. The fact that it's
nontrivial to set-up in linux makes it hard to fix reported issues.

Signed-off-by: Jonathan Rico <jonathan.rico@nordicsemi.no>
2024-04-11 12:48:50 +02:00
Rubin Gerritsen
75973852bf Bluetooth: Audio: Add iso_chan to bt_bap_ep_info
By exposing the underlying iso channel, the application can retrieve
properties of the iso channel.

This can be useful in case the application wants to use the connection
handle for vendor specific HCI commands or to retrieve the particular
parameters used for the given channel.

Signed-off-by: Rubin Gerritsen <rubin.gerritsen@nordicsemi.no>
2024-04-11 10:33:42 +02:00
Emil Gydesen
16189b007f Bluetooth: BAP: Only dump active receive states
The bt_debug_dump_recv_state did not care if the receive
state being dumped to log was active or not, and if it was
not actice, then it may just contain random data.

Added a check to see if it was active.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2024-04-09 14:20:54 +02:00
Emil Gydesen
58030cc31c Bluetooth: CAP: Shell: Stop all streams by default
The cap_initiator unicast_stop command will now stop
all streams by default, without supplying the "all" argument.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2024-04-08 09:27:34 -04:00
Théo Battrel
2e7befe240 Bluetooth: HCI: Reword BT_BUF_ACL_* description
Some part of the descriptions were wrong. Also, the description of
`BT_BUF_ACL_RX_SIZE` was too verbose and no longer needed with the
updated L2CAP documentation.

Signed-off-by: Théo Battrel <theo.battrel@nordicsemi.no>
2024-04-08 09:26:42 -04:00
Théo Battrel
c0700d9825 Bluetooth: L2CAP: Reword K-frame comment
The terminology was not following the Spec wording.

Signed-off-by: Théo Battrel <theo.battrel@nordicsemi.no>
2024-04-08 09:26:42 -04:00
Emil Gydesen
8acada0608 Bluetooth: Audio: Shell: clear static buffers for ad data
The buffers for the PBP advertising data as well as the
buffers for the BASE periodic advertising data were
not cleared, so calling the functions multiple times
would simply append the data rather than just setting
the new data.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2024-04-08 09:13:08 -04:00
Emil Gydesen
d229b89a2b Bluetooth: BAP: Shell: Add tracking of empty SDUs
There are devices that will send empty SDUs instead of
empty PDUs, and while that should be harmless, it is nice
to know what is going on, and we may want to deal with
empty SDUs and empty PDUs differently.

This also modifies the state for TS and PSN to only be
applied for valid ISO packets.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2024-04-08 09:12:58 -04:00
Emil Gydesen
1d5acb7547 Bluetooth: Audio: Remove !found dbg log in codec.c
It is a common occurance that a specific type is not
found in the codec configuration, and the main way of
knowing that is by calling the function.

The debug log does not help debug anything (as it does also
return a specific error code), but rather just clutters up
the log if enabled.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2024-04-08 09:12:45 -04:00
Emil Gydesen
be5adb4323 Bluetooth: BAP: Unicast Client: Replace some LOG_ERR/WRN with DBG
When returning an error code directly to an application
in the API, it should not log as a warning or error.

The lack of PAC records is also reported directly to the
application, and is not an error (in fact it is valid not to have
e.g. sink or source pacs).

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2024-04-08 09:12:31 -04:00
Emil Gydesen
5e840c1f1e Bluetooth: BAP: Shell: add additional printing in recv_state_cb
Add printing of the broadcast ID and whether an existing PA
sync was found in the bap_broadcast_assistant_recv_state_cb
function.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2024-04-08 09:12:14 -04:00
Emil Gydesen
a3c0f2b1e9 Bluetooth: BAP: Shell: Add support for "unknown" PA interval in mod_src
The bap_broadcast_assistant mod_src command can now take "unknown"
as a value to supply BT_BAP_PA_INTERVAL_UNKNOWN to the scan
delegator.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2024-04-08 09:12:02 -04:00
Emil Gydesen
0f3b0d29da Bluetooth: BAP: Shell: Fix documentation for broadcast_code
The documentation for the command
bap_broadcast_assistant broadcast_code
was incorrect and has been fixed.

Additionally, and example of the command has been added
in the shell documentation.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2024-04-08 09:11:51 -04:00
Emil Gydesen
ab57f2275a Bluetooth: BAP: Shell: Fix state lookup with PAST
When a PA is synced via PAST, the receive state does not
have a PA sync object, and the address and SID must be
used.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2024-04-08 09:11:30 -04:00
Emil Gydesen
3caa8f403a Bluetooth: Audio: Shell: Fix snk_chan_cnt for AC_5
The audio configuration 5 is defined to have 2 sink channels
per stream and 1 source channel per stream.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2024-04-08 09:11:17 -04:00
Emil Gydesen
824e352a77 Bluetooth: BAP: Shell: Fix bad err check for PAST sync
If pa_sync_past returns 0 then that means we are ready to
sync to past, and the BT_BAP_PA_STATE_INFO_REQ state should be set.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2024-04-08 09:10:40 -04:00
Emil Gydesen
490fb20148 Bluetooth: Audio: Shell: CAP change microphone mute command
Adds the change microphone mute command to the CAP commander shell.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2024-04-05 12:21:38 +02:00
Emil Gydesen
5ab37692c0 Bluetooth: CAP: Commander change microphone mute procedure
Adds the CAP Commander Change Microphone Mute procedure.
This procedure changes the microphone mute state on one or more
CAP Acceptors.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2024-04-05 12:21:38 +02:00
Nithin Ramesh Myliattil
5be02da636 Bluetooth: Audio: Broadcast Assistant: add broadcast src duplicate function
Moved the check of broadcast src duplicate to function while adding source.

Signed-off-by: Nithin Ramesh Myliattil <niym@demant.com>
2024-04-03 21:11:30 +01:00
Fredrik Danebjer
bbb87ae0ae Bluetooth: Audio: Broadcast Assistant: Check add_source duplication
Added a check for checking duplication when adding a source in the
broadcast assistant, as per requirement in BAP 6.5.4. It is not
permitted to add a source such that a combination of broadcast_id,
adv_sid and address type would result in same triple of values.
Added a recv_state struct to cache these values when read, and moved
past_avail and srd_ids into this as well.

Signed-off-by: Fredrik Danebjer <frdn@demant.com>
2024-04-03 21:11:30 +01:00
Lyle Zhu
45ff5afbb7 Bluetooth: Host: Check conn/channel status of L2CAP BR
For BR/EDR L2CAP, if the function bt_l2cap_br_chan_send_cb
instead of bt_l2cap_chan_send is called, the ACL conn and
L2CAP chennel status will not be checked.

Check conn/channel status before sending data in
function bt_l2cap_br_chan_send_cb.

Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
2024-04-03 10:27:53 +03:00
Fabio Baltieri
5591d2305e Bluetooth: host: tweak up the bluetooth thread names
Change the receive workque name to "BT RX WQ" to distinguish it from the
receive thread, and the long workque one to "BT LW WQ" to make the
format consistent with the other Bluetooth threads.

On an nRF52 now "kernel stacks" looks like:

0x200016c8 BT RX                    (real size  448):   unused  280    )
0x20001780 BT RX pri                (real size  448):   unused  224    )
0x200012c0 BT RX WQ                 (real size 2240):   unused 1360    )
0x20001208 BT TX                    (real size  768):   unused  408    )
0x20001130 BT LW WQ                 (real size 1344):   unused  408    )

Signed-off-by: Fabio Baltieri <fabiobaltieri@google.com>
2024-04-02 21:01:00 -04:00
Luis Ubieda
92e0d0bbfc bluetooth: nus: Change Kconfigs prefix to BT_ZEPHYR_NUS
To prevent future conflicts with NCS's NUS implementation, whose
Kconfig's are prefixed with BT_NUS.

Signed-off-by: Luis Ubieda <luisf@croxel.com>
2024-04-02 10:36:01 +03:00
Nithin Ramesh Myliattil
a1893c5890 Bluetooth: Audio: Scan Delegator: update bass_source_is_duplicate fn
Address type is passed as an argument instead of the entire address.

Signed-off-by: Nithin Ramesh Myliattil <niym@demant.com>
2024-03-27 15:18:01 +00:00
Fredrik Danebjer
0fe8ddd75e Bluetooth: Audio: Scan Delegator: Guard for duplication in add_source
Added a check for duplication of add source operation in the Scan
Delagator. BAP 6.5.4 states that an assistant may not perform add
source operation if it results in a duplication of a source. While
this is not mentioned for the Scan Delegator, the spirit of the spec.
must be that no duplications can exists in the recv_state, which is
what this commit fixes.

Signed-off-by: Fredrik Danebjer <frdn@demant.com>
2024-03-27 15:18:01 +00:00
Aleksander Wasaznik
171363501a Bluetooth: Move bt_hci_evt_get_flags out of hci_driver.h
This commit removes `bt_hci_evt_get_flags`, and the associated flag
symbols. These symbols no longer serve a purpose in the driver interface
after the removal of `bt_recv_prio` from the interface.

The implementation of `bt_hci_evt_get_flags` is distributed to its
still-existing use sites, `hci_core` and the `hci_driver` in the
controller.

The duplication of code is intentional. This is no longer part of any
interface, and the host-developers expect the host copy of the function
to change or dissapear entierly. This will allow the host implementation
to progress without fear of breaking the controller implementation.

Signed-off-by: Aleksander Wasaznik <aleksander.wasaznik@nordicsemi.no>
2024-03-26 11:17:29 -05:00