There is a touchy spot where registering a service might result in sending
service changed indications that are not necessary. This is due to a race
condition between the SC work and the GATT DB hash being calculated.
Only allow users to call this API when we know it is safe:
- either before BT is initialized
- or after settings have been loaded (and hash calculated)
Fixes#54047
Signed-off-by: Jonathan Rico <jonathan.rico@nordicsemi.no>
Prevent race condtions between the stack and the low-priority thread by
calculating the hash (and acting on it, e.g. for marking peers
change-aware, sending SC indications, etc) in the settings_load() context.
Fixes#54773
Signed-off-by: Jonathan Rico <jonathan.rico@nordicsemi.no>
`ATT_PENDING_SENT` wasn't cleared when L2CAP reported an error when sending
the packet. This resulted in the channel being unusable for ever, since we
only clear that bit on a response (that will never be sent).
Found when setting `CONFIG_SYS_CLOCK_TICKS_PER_SEC=32768` in the
`notify_multiple` test. The kicker was the bug didn't manifest when EATT
wasn't enabled:
- we were queuing two unsubscribes back to back in the test
- on UATT we have to wait for a req-rsp pair before enqueuing a new one
- on UATT we only have one channel anyways
Signed-off-by: Jonathan Rico <jonathan.rico@nordicsemi.no>
In ull_llcp* some functions used in unittesting did not have
the llcp_ prefix
Although this is not a big issue since they are only used when
testing the module this commit adds the prefix so that we
have a more consistent naming
Signed-off-by: Andries Kruithof <andries.kruithof@nordicsemi.no>
Update unittests for the following areas/controll procedures
- API
- collision handling
- invalid PDUs
- unsupported procedures
- buffer allocation
- TX queue
- Data Length Update
- PHY update
- Encryption
- Ping
- Version
- Channel map update
- Min. used channels
- Connection update
- SCA
- Terminate connection
- CTE request
- CIS create
- CIS terminate
Also moved the internal API tests from the ull_llcp* files
to the proper unittest C-file
Unused files are removed
Signed-off-by: Andries Kruithof <andries.kruithof@nordicsemi.no>
Fix mayfly_prio_is_equal() function when BT_CTLR_ZLI is
enabled.
When Zero Latency IRQs are used, LLL execution priority
is the Zero Latency IRQ priority and will not be equal
to ULL execution priority.
Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
Fix Peripheral CIS supervision timeout due to missing access
address timestamp capture in subsequent subevents when
anchor point was not sync in the first subevent.
Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
Add missing check for receiver_ready in the state
change to enabling state. This change makes the
the check in the state change similar to the check
in ascs_ep_iso_connected
Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
The Bluetooth 5.4 specification was recently released, and has a new
version identifier (0x0D or decimal 13) assigned to it in the
Bluetooth Assigned Numbers.
Signed-off-by: Andries Kruithof <andries.kruithof@nordicsemi.no>
This commits allows for setting up multiple streams in
a single CIG as the unicast client.
It fixes an issue with the unicast server not using
the configured QoS when transmitting audio data.
Improves upon setting the preset for the different
type of streams.
Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
Some operations such as Config, QoS, Enable and Stop
are only available for the unicast client, but since
they share the bt_audio_stream prefix, we leave the
agnostic part of it in stream.c, and move the actual
implementation to unicast_client.c.
Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
stream.c had code that was only useful for the unicast server/
ASCS, and have been moved to ascs.c instead.
Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
In the switch statement there are two cases guarded by ifdef's.
These cases are not compiled in for the following Kconfig settings:
BT_PERIPHERAL=n
BT_CTRL_PER_INIT_FEAT_XCHG=n
The following function call then becomes dead code
This is fixed here by adding the proper guards around the whole case
statement
Signed-off-by: Andries Kruithof <andries.kruithof@nordicsemi.no>
Commit 2c00dd5fec ("Bluetooth: host: check net bufs have enough room in
user_data") added a build time check of user data size. This check does not
pass with default CONFIG_BT_CONN_TX_USER_DATA_SIZE=8 and with
`native_posix_64` platform, as 16 bytes are needed in order to store
`struct tx_meta`.
Select 16 as default value for 64bit platforms, so Bluetooth samples/tests
are buildable for `native_posix_64`.
Signed-off-by: Marcin Niestroj <m.niestroj@emb.dev>
Implement the CAP initiator broadcast audio start procedure.
This basically just verifies that the stream context
is set in the metadata, and then calls the BAP
procedure.
We define a new opaque struct, bt_cap_broadcast_source,
that is just an abstraction of the bt_audio_broadcast_source
but is used to indicate that these functions require a
broadcast source created by the CAP function (and not the
BAP) function.
Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
Fixes a bug where we cleanup the broadcast sink without
properly terminating the BIG sync first.
Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
Fix AUX_ADV_IND AUX_SYNC_IND radio utilization by having a
configurable offset.
Define an offset between AUX_ADV_IND and AUX_SYNC_IND when
using Advertising Interval for the Extended Advertising and
Periodic Advertising that are same or multiple of each
other, respectively.
Note, to get advertising intervals that are same or
multiple, the Periodic Advertising Interval shall be 10
millisecond more than the Extended Advertising Interval;
this is because the AUX_ADV_IND PDUs are scheduled as
periodic events of Extended Advertising Interval plus 10
milliseconds (Advertising Random Delay) as the periodic
interval.
Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
Fix the Close Isochronous Event (CIE) implementation so that
it follows the Bluetooth Core Specification definition:
Link Layer implementations will normally end a CIS event
early when all scheduled payloads in both directions have
been transmitted and acknowledged.
Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
Rename lll_df_conf_cte_tx_disable() to lll_df_cte_tx_disable()
so that it can be used as a common function between connection
and connectionless implementations.
Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
When handling ASE Control operations requested by client,
first verify that the requested ID is within the allowed range.
If it does, lets assume that the NULL returned from ase_find()
means the ASE state is set to idle.
This will fix ASE Notification Response code expected by
the ASCS/SR/SPE/BI-18-C PTS test case.
Signed-off-by: Magdalena Kasenberg <magdalena.kasenberg@codecoup.pl>
Add a new function for the unicast client that verifies whether
or not the unicast client can terminate the CIS given the
state of any paired endpoint and the CIS state.
Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
When releasing a stream causing the CIS to disconnect, there was
a race condition between the CIS disconnect event and the
idle state notification from the unicast server.
This ensures that if we are disconnecting a CIS as part of the
release, then we wait for the CIS disconnect event before calling
the "released" callback.
Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
Add state check for BT_ISO_STATE_CONNECTING before disconnecting
the CIS, else we could end up in a race condition where we
did not disconnect the connecting CIS, and then still have
a CIS afterwards.
Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
Add a check to see if the ISO is connected before we attempt to
disconnect it. In the case where a stream was not in the streaming
state and was released, the CIS is unlikely to be connected.
Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>