Commit graph

9523 commits

Author SHA1 Message Date
Aleksander Wasaznik
21e5dcb42a Bluetooth: Replace 'bt_addr_le_cmp(x) == 0' with 'bt_addr_le_eq(x)'
These should be equivalent. The '_eq'-form is more readable.

Signed-off-by: Aleksander Wasaznik <aleksander.wasaznik@nordicsemi.no>
2022-10-19 15:40:18 +03:00
Aleksander Wasaznik
9db3fa82d1 Bluetooth: Replace all '!bt_addr_le_cmp' with 'bt_addr_le_eq'
There should be functional equivalence between these two forms. And the
'_eq'-form is more readable.

Signed-off-by: Aleksander Wasaznik <aleksander.wasaznik@nordicsemi.no>
2022-10-19 15:40:18 +03:00
Mariusz Skamra
9973d2f1f7 Bluetooth: audio: Factor out PACS related API to internal header
This moves the PACS API to internal header, as it duplicates the
bt_capabilities API.

Signed-off-by: Mariusz Skamra <mariusz.skamra@codecoup.pl>
2022-10-18 14:14:19 +02:00
Emil Gydesen
4321fef3b7 Bluetooth: Audio: Ensure that stream is in streaming state for ISO recv
Adds check to verify that the audio stream is actually
in the streaming state before handling the
audio data. As per the BAP spec, a stream that
is not in the streaming state shall not send
any data, and this check is to handle any
remote devices that are not working correctly.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2022-10-18 14:13:51 +02:00
Gerard Marull-Paretas
178bdc4afc include: add missing zephyr/irq.h include
Change automated searching for files using "IRQ_CONNECT()" API not
including <zephyr/irq.h>.

Signed-off-by: Gerard Marull-Paretas <gerard.marull@nordicsemi.no>
2022-10-17 22:57:39 +09:00
Pavel Vasilyev
93e6f73d62 Bluetooth: Mesh: Change linkage for ctx_shell and default_key in shell
Change linkage for ctx_shell and default_key in shell.c to external to
share their usage in other places.

Signed-off-by: Pavel Vasilyev <pavel.vasilyev@nordicsemi.no>
2022-10-17 14:39:58 +02:00
Pavel Vasilyev
73c5568b5c Bluetooth: Mesh: Remove _cli postfix from models shell files
This commits renames `health_cli.c` and `cfg_cli.c` under `mesh/shell`
folder to `health.c` and `cfg.c` accordingly. This is to create a
generic pattern for the future, when not only clients, but server models
will also expose some API through shell commands. This means that server
models' shell commands should be located in the same file as client
commands to avoid cluttering `mesh models` subcommand.

Signed-off-by: Pavel Vasilyev <pavel.vasilyev@nordicsemi.no>
2022-10-17 14:39:58 +02:00
Pavel Vasilyev
f93ab2769c Bluetooth: Mesh: Add macro for instance set/get-all mesh shell cmds
This code is a boulerplate that will be needed for many models in mesh
shell module. This commit adds a special macro designed to improve
readability of the code and helps to avoid potential bugs when
copy-pasting identical code.

Signed-off-by: Pavel Vasilyev <pavel.vasilyev@nordicsemi.no>
2022-10-17 14:39:58 +02:00
Pavel Vasilyev
8e5ff49118 Bluetooth: Mesh: Make mesh features pluggable in shell
Not all shell commands may be needed for an end application even if a
certain feature is enabled. In that case they will just occupy flash
space without being used. This commit adds a separate Kconfig for each
feature to make possible to selectively disable some mesh shell commands.

Signed-off-by: Pavel Vasilyev <pavel.vasilyev@nordicsemi.no>
2022-10-17 14:39:58 +02:00
Pavel Vasilyev
559e526708 Bluetooth: Mesh: Add options to disable health and cfg clients shell
Add Kconfig options to be able to disable Health and Config Client
models shell commands.

Signed-off-by: Pavel Vasilyev <pavel.vasilyev@nordicsemi.no>
2022-10-17 14:39:58 +02:00
Pavel Vasilyev
f9c4872ce4 Bluetooth: Mesh: Move mesh shell Kconfig options to a separate file
Move mesh shell related options to a new file to avoid cluttering of
the main Bluetooth Mesh Kconfig file when extending it with new options.

Signed-off-by: Pavel Vasilyev <pavel.vasilyev@nordicsemi.no>
2022-10-17 14:39:58 +02:00
Sean Madigan
5b1dd71f3e Bluetooth: kconfig: Add config options for PAST
Add config options specific for periodic advertising sync transfer.

Signed-off-by: Sean Madigan <sean.madigan@nordicsemi.no>
2022-10-17 10:14:10 +02:00
Andy Ross
13f78fb005 bluetooth: Don't use k_sem internals
The "limit" field of struct k_sem was in use in two places in the BTLE
host code, in one it was being used as a duplicate placeholder for the
"iso_max_num" field received in read_buffer_size_v2_complete[1].  In
another, it was just being tested for zero[2].

Those are pretty clear abuses of internal data, provide minimal value
beyond a few bytes of memory in struct bt_dev_le, and in any case
won't work with zync, where that field doesn't have the same name and
may not even exist depending on app configuration.

Copy the limit value into the struct where it belongs, and use it from
there.

[1] I strongly suspect there is a bug lurking there if the semaphore
maximum is being used to implement the kind of "packet buffer" this
code looks like.  Calling k_sem_give() on a "full" semaphore WILL NOT
BLOCK.  It will just drop the increment on the floor and return
synchronously.  Semaphores aren't msgqs or ringbuffers!  But disabling
the max value feature in zync does not result in test failures, so
maybe this usage is safe.

[2] Again, this seems suspicious; a valid k_sem should never have a
zero in that field.  Presumably this is really a test for "is
initialized", and so implies there's a mixed up initialization path
somewhere?

Signed-off-by: Andy Ross <andyross@google.com>
2022-10-17 10:13:56 +02:00
Piotr Pryga
6a79c3deae Bluetooh: Host: conn: Resume adv after disconn for periph role only
Zephyrs Host has by default enabled automatic resume of advertising
in case of disconnection when peripheral role is enabled.

The feature becomes a bit problematic in case of multirole usage.
For example assume a use case where a device is working as peripheral
and central, where it may establish single connection for each role.

In case there are two connections established and connection in
central role is dropped by peer, Host will automatically resume
advertising. After that an application can resume scanning, e.g.
in disconnected callback. That should not happen.

If one of connections was used for central role, it should not
be stolen by Host to run peripheral role. Host should verify
if a disconnected connection role was peripheral and then resume
advertising.

This approach will not break backward compatibility and change
correct resume behavior. What more, Host will follow an application
decisions about use of connection objects.

Signed-off-by: Piotr Pryga <piotr.pryga@nordicsemi.no>
2022-10-17 10:06:45 +02:00
Emil Gydesen
0af4aad4bf Bluetooth: Audio: Remove call to bt_enable in audio init
The `audio init` should only initialize the audio (BAP)
stack. Furthermore, given that the `bt init` may do more
than just calling `bt_enable` it is generally for the best,
and more future proof, to let that command be the exclusive
way of calling `bt_enable` in the shell.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2022-10-14 14:24:20 +02:00
Emil Gydesen
e4b640ff2b Bluetooth: Audio: Fix segmentation issue in BT Audio shell
It was possible to enter a state where setting the QoS
for a source stream after having released a sink stream
as the unicast client would cause a segmentation error.
This issue is related to how the unicast shell is using
the unicast group.

A fix has been added for it, and a check for
whether or not `audio init` (to register the needed
callback) has been added. This check has also been added
for the broadcast sink.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2022-10-14 14:24:20 +02:00
Troels Nilsson
06aa981611 Bluetooth: controller: Support split advertising PDU pools
Adds proper support for having more than one PDU pool for the advertising
PDUs (to save memory)

- Introduces lll_adv_aux_data_init, lll_adv_aux_scan_rsp_alloc and
  lll_adv_sync_data_init to indicate if the PDU is a primary/legacy PDU
  or secondary/auxillary PDU
- Scan response PDUs are initialized later, since the correct pool to draw
  from depends on whether the advertising is extended or legacy

Signed-off-by: Troels Nilsson <trnn@demant.com>
2022-10-14 09:56:00 +02:00
Kim Sekkelund
a83b4f9d06 Bluetooth: Audio: Fix endian conversion in PACS
Not all C compilers understands how to use the address of a return
value as an argument to a function call. At least not our compiler.
Fix the issue by adding a variable to hold the converted value
before passing it to the function call.

Signed-off-by: Kim Sekkelund <ksek@oticon.com>
2022-10-14 09:55:26 +02:00
Emil Gydesen
23562448dc Bluetooth: Audio: Fix reset PAC records on bt_audio_discover
When calling bt_audio_discover, the discovered PAC records
were just added to the pac_cache. If called multiple times,
the PAC records would just be duplicated.

This change reset the pac records for the direction when
called.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2022-10-14 09:53:57 +02:00
Emil Gydesen
f307c08331 Bluetooth: Audio: Add additional check and log for stream->conn
bt_audio_stream_config should not be called with a stream
that is already configured to another connection.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2022-10-14 09:53:43 +02:00
Emil Gydesen
bd773158e1 Bluetooth: PACS: Add PAC records to the debug log
Logs the PAC records with BT_DBG for easier debugging
of the values.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2022-10-14 09:53:36 +02:00
Emil Gydesen
59a9dd6054 Bluetooth: Audio: Add misisng stream_count reset for broadcast sink
This caused the sink to attempt to sync to more stream
for each call to bt_audio_broadcast_sink_sync as the
stream count was stored in the struct bt_audio_broadcast_sink
but never reset.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2022-10-14 09:53:23 +02:00
Emil Gydesen
65f130b73e Bluetooth: Audio: add missing CONFIG_BT_AUDIO_DEBUG_STREAM_DATA guards
Some places did not properly guard debug messages for sending
ISO data.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2022-10-14 09:53:11 +02:00
Emil Gydesen
0f30fbec96 Bluetooth: Audio: Increase unicast client Kconfig ranges
There is no reason for the previous limitation.

The limit of 255 for the ASEs is based on the ASE IDs
which is a uint8_t, so there is a maximum of 255 of
each ASE type.

The limit of 73 * 2 = 146 is based on the maximum size of an
GATT attribute (512), and the minimum size of a PAC record (7)
makes it a total of 73 PAC records for each direction.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2022-10-14 09:52:56 +02:00
Andries Kruithof
eb78f9f808 Bluetooth: controller: llcp: fix access to context after release
There is access to the procedure context after a potential release
of the context, which (in theory) can lead to incorrect behaviour

There is no good way of testing this with a unittest without adding
specal debug code to the ull_llcp_local module
After code-inspection no other location has been found with
potential access after context release

Signed-off-by: Andries Kruithof <andries.kruithof@nordicsemi.no>
2022-10-14 09:52:41 +02:00
Emil Gydesen
7ab1cafbc2 Bluetooth: Audio: Add Broadcast source application AD
This refactors how the BAP broadcast source handles the
extended and periodic advertising.

First it removes the start and stop of the extended
advertising, and instead expects the application
(or upper layers) to do this.

Second it exposes API functions to get the
necessary advertising data from BAP (service data and
the BASE), which the upper layers will then also
be responsible for setting and updating.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2022-10-14 09:51:39 +02:00
Emil Gydesen
cb4541ae51 Bluetooth: Audio: Fix missing metadata_updated calls
The metadataa_updated callback has existed for a long
time, but was never actually used. The metadata is set
or updated in the enabling and streaming state.

Added checks to see if the state actually changes when going
into these states, and if not, then it means that the
metadata was updated.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2022-10-14 09:51:23 +02:00
Mariusz Skamra
d44e112045 Bluetooth: audio: ascs: Remove unused bt_ascs member
Remove unused struct member.

Signed-off-by: Mariusz Skamra <mariusz.skamra@codecoup.pl>
2022-10-13 16:03:34 +02:00
Emil Gydesen
0dc9f57fa5 Bluetooth: Audio: Fix bad error check for bt_unicast_client_start
If bt_audio_stream_connect didn't fail, we would just return
without sending the receive start ready command.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2022-10-13 09:57:24 +02:00
Lingao Meng
4a2033a661 Bluetooth: Mesh: net cache uses reverse order traversal
Since the net cache is accumulated in positive order, the net
cache uses reverse order traversal, which can filter duplicate
messages more effectively.

Signed-off-by: Lingao Meng <menglingao@xiaomi.com>
2022-10-13 09:56:50 +02:00
Lingao Meng
5867492582 Bluetooth: Mesh: Fix missing clear dup cache
When lpn reject message, should clear dup cache to
avoid dup check next mesh message.

Signed-off-by: Lingao Meng <menglingao@xiaomi.com>
2022-10-13 09:56:50 +02:00
Lingao Meng
4f1e326f2a Bluetooth: Mesh: Remove msg_cache_next in rx ctx
Since in bt_mesh_net_recv will call msg_cache_add
and if lpn reject this message, should remove this cache.

But this function sequentially and will not be interrupt
by any thread so, we no need a copy var to save this value.

Signed-off-by: Lingao Meng <menglingao@xiaomi.com>
2022-10-13 09:56:50 +02:00
Piotr Pryga
c2ea0328fa Bluetooth: Controller: df: Fix spelling errors
Fix spelling errors in coments in ull_df.c source file.

Signed-off-by: Piotr Pryga <piotr.pryga@nordicsemi.no>
2022-10-12 18:41:54 +02:00
Piotr Pryga
3987259888 Bluetooth: Controller: df: Relax cl CTE RX enable param check
According to Core 5.3 Vol 4, Part E, section 7.8.82 slot_durations,
switch_pattern_len and ant_ids are used only for AoA and do not affect
reception of AoD CTE.

To improve interoperability checking of correctness of these parameters
is not required. It will not affect lower link layer in case the AoA
CTE reception feature is not enabled in Kconfig.

Signed-off-by: Piotr Pryga <piotr.pryga@nordicsemi.no>
2022-10-12 18:41:54 +02:00
Mariusz Skamra
9c3f190721 Bluetooth: audio: capabilities: Hide bt_audio_capability_get function
This function exposes list pointer, so that it allows the user to modify
the internal list. This adds bt_audio_foreach_capability iterator finction
that can be used instead.

Signed-off-by: Mariusz Skamra <mariusz.skamra@codecoup.pl>
2022-10-12 18:41:22 +02:00
Gerard Marull-Paretas
34a6848887 include: add missing arch/cpu.h include
The sys* ops like sys_clear_bit are indirectly included via arch CPU
header. Other stuff like find_msb_set end up included via this header as
well.

Signed-off-by: Gerard Marull-Paretas <gerard.marull@nordicsemi.no>
2022-10-11 18:05:17 +02:00
Troels Nilsson
28a9a79b98 Bluetooth: Controller: JIT fixes for ext. adv. duration handling
- Account for the added random delay when updating remaining duration
- Re-worked JIT re-scheduling update a bit to keep the random delay
  information and remaining duration correct

Signed-off-by: Troels Nilsson <trnn@demant.com>
2022-10-10 13:55:37 +02:00
Troels Nilsson
b6f5c75581 Bluetooth: Controller: Ext. adv. duration handling fix
- Remaining duration is now in us instead of ticks to avoid
  overflow when ticks have higher resolution
- First advertising event should not reduce remain duration

Signed-off-by: Troels Nilsson <trnn@demant.com>
2022-10-10 13:55:37 +02:00
Troels Nilsson
2a9cd8ffb1 Bluetooth: Controller: Add EVENT_OVERHEAD_START_US when enabling states
Add EVENT_OVERHEAD_START_US to ticks_anchor when enabling
advertising, so the first advertising event is not late due
to calculations for aux packets etc.

Signed-off-by: Troels Nilsson <trnn@demant.com>
Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2022-10-10 13:55:37 +02:00
Vinayak Kariappa Chettimada
236d0351e7 Bluetooth: Controller: EVENT_OVERHEAD_START_US for typical usecases
Tune the EVENT_OVERHEAD_START_US for typical usecases on
nRF52833 SoC using the central_gatt_write and
peripheral_gatt_write samples.

Manually run the samples for over 30 mins without any
assertions and use the actual profiled value that would
otherwise be printed on assertion.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2022-10-10 13:55:37 +02:00
Vinayak Kariappa Chettimada
a3b0ade9c6 Bluetooth: Controller: Explicit ticker worker trigger on expire in past
When ticks_to_expire is in the past, i.e. ticks_to_expire is
0, perform an explicit trigger of ticker worker instead of
setting up the compare which delays the trigger by the
minimum ticks offset margin. The changes reduce latencies
of the O(n) ticker_resolve_collision by upto the minimum
ticks offset margin (3 for nRF SoCs) for each resolution.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2022-10-10 13:55:37 +02:00
Vinayak Kariappa Chettimada
ebf7236267 Bluetooth: Controller: Add verbose assertion on delayed prepare
When an event's prepare is delayed due to ULL scheduling or
ISR latencies, check and have a verbose assertion that logs
the actual EVENT_OVERHEAD_START_US required.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2022-10-10 13:55:37 +02:00
Vinayak Kariappa Chettimada
7715fb40e2 Bluetooth: Controller: Add LL_ASSERT_MSG definition
Add LL_ASSERT_MSG definition to log a verbose message as
part of assertion check.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2022-10-10 13:55:37 +02:00
Vinayak Kariappa Chettimada
367004fd57 Bluetooth: Controller: Conditional compile optional ticker interfaces
Conditional compile ticker interfaces like ticker_update
which are not required when individual state or role samples
are build.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2022-10-07 14:46:38 +02:00
Vinayak Kariappa Chettimada
e48ea7e87b Bluetooth: Controller: Fix BIG event counter calc from payload count
Fix the BIG event counter calculation from stored payload
counter. Event latency should not be multiplied by burst
count.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2022-10-07 14:42:27 +02:00
Vinayak Kariappa Chettimada
36db43716a Bluetooth: Controller: Fix missing includes to build full feature set
Fix missing includes and rearrange header includes to be able
to build a full feature set Controller.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2022-10-07 14:34:14 +02:00
Emil Gydesen
02d6661d71 Bluetooth: Shell: Add support for sending sine tone with the audio shell
added `audio start_sine` and `audio stop_sine` to start/stop
sending an LC3 encoded sine tone.

This code is heavily inspired from the sine tone implementation
from the unicast_client sample implementation.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2022-10-07 13:22:53 +02:00
Emil Gydesen
83d3a36f78 Bluetooth: Audio: Shell: Add broadcaster address in broadcast scan callback
Add printing of the broadcast source advertising address in the
scan callback. Also rename the scan callback to make
it more clear that it is for broadcast scanning.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2022-10-07 13:22:45 +02:00
Emil Gydesen
208f44722f Bluetooth: Audio: Clear received_base in audio shell on PA sync lost
When the PA sync is lost, we clear the received_base so
that once we resync to the PA, we get the BASE again.

This is to make it easier to decode and use the BASE again
if the sync was lost, as the previous BASE may have
been printed a long time before.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2022-10-07 13:22:39 +02:00
Emil Gydesen
1302e95647 Bluetooth: Audio: Modify log of non-found stream for config state callback
In the unicast client, it is possible for the unicast server
to send a notification for ASE when it is in the codec
configured state after a reconnect. In that case, the
unicast client does not have a coupling between the ASE
and the audio stream.

This caused a BT_ERR to trigger, but it is not really an
error, but rather a state that the current unicast client
cannot handle, so the BT_ERR has been replaced with
a BT_WARN.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2022-10-07 13:22:30 +02:00