Skip to content

Commit

Permalink
softdevice_controller: rev a0cb9ced588fbd52ca178108938a064e2619de4e
Browse files Browse the repository at this point in the history
CHANGELOG.rst contains the list of changes.

Signed-off-by: Herman Berget <[email protected]>
  • Loading branch information
hermabe authored and rlubos committed Feb 23, 2024
1 parent cd21c7f commit b02a54c
Show file tree
Hide file tree
Showing 31 changed files with 233 additions and 61 deletions.
2 changes: 2 additions & 0 deletions softdevice_controller/CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,8 @@ Changes
This is done to maintain the relative priority with them and continuous scanning. (DRGN-20488)
* Improved scheduling performance when receiving packets closely following an ``AUX_SYNC_IND`` that does not point to an ``AUX_CHAIN_IND``.
The controller will attempt to prioritize the reception of such packets while still maintaining the periodic sync. (DRGN-19272)
* The functions :c:func:`rand_prio_low_get` and :c:func:`rand_prio_high_get` have been deprecated.
They are no longer used by the SoftDevice Controller. (DRGN-20472)

Bug fixes
=========
Expand Down
73 changes: 44 additions & 29 deletions softdevice_controller/doc/isochronous_channels.rst
Original file line number Diff line number Diff line change
Expand Up @@ -71,59 +71,74 @@ Configurations for parallel use of CIS and BIS
Parallel use of one CIS and one BIS is tested.
However, there is no absolute maximum of BISes, CISes and ACLs that can be used concurrently.
Instead, the amount of roles that can be used at the same time is limited by available memory and the on-air timings.
Except where otherwise mentioned, the |controller| supports the whole range of the allowed parameters.

Parameter selection
*******************

This section gives an high level overview of how the |controller| selects the values for the broadcast and connected ISO parameters.
This section gives a high level overview of how the |controller| selects the values for the broadcast and unicast ISO parameters.

Parameter selection for BIS
---------------------------
When the HCI LE Create BIG command or HCI LE Set CIG Parameters command is used, the |controller| will handle the selection of the ISO parameters.

When the HCI LE Create BIG command is used, the |controller| will handle the selection of the ISO parameters.
The host command's input values affect the ISO parameters selected by the |controller|, which affect the resulting reliability and transport latency.
The selected parameters can result in:

The values the host gives for the command affect the values that the |controller| selects for the ISO parameters, which affect the resulting reliability and transport latency.
The selected parameters can result in:
* Maximum reliability with high latency.
* Minimal transport latency with low reliability.
* Something between these two extremes.

* Maximum reliability with high latency.
* Minimal transport latency with low reliability.
* Something between these two extremes.
The parameters are selected based on the following rules:

The parameters are selected based on the following rules:
* The transport latency of the selected configuration does not exceed the ``Max_Transport_Latency`` provided by the host.
* The number of retransmissions of the selected configuration does not exceed the ``RTN`` provided by the host, and matches it if possible.

* The transport latency of the selected configuration does not exceed the maximum transport latency provided by the host.
* The number of retransmissions of the selected configuration does not exceed the RTN provided by the host, and matches it if possible.
In other words, ``Max_Transport_Latency`` and ``RTN`` are treated as upper limits for the configuration that the |controller| will use.
By using these properties, the host can influence the parameter selection.

In other words, maximum transport latency and RTN are treated as upper limits for the configuration that the |controller| will use.
By using these properties, the host can influence the parameter selection.
To reduce transport latency, consider one or more of the following approaches:

Retransmissions can be achieved by using repetitions and pre-transmissions.
The |controller| will use at least one repetition and as many pre-transmissions as possible to achieve the desired retransmissions.
* Use a smaller ``Max_SDU``
* Use a shorter ``SDU_Interval``
* Switch from LE 1M PHY to LE 2M PHY

The following example shows how the host provided values affect the selected parameters.
The example assumes that the |controller| can produce a valid configuration with a mixture of pre-transmissions and repetitions for a given input.
The host can influence the parameters with any of the following actions:

* Increase the RTN while keeping the maximum transport latency constant.
This prioritizes reliability over transport latency, assuming there is room for new retransmissions.
* Decrease the RTN while keeping the maximum transport latency constant.
This prioritizes transport latency over reliability.
* Increase the maximum transport latency while keeping the RTN constant.
This makes the |controller| prioritize pre-transmissions over repetitions.
* Decrease the maximum transport latency while keeping the RTN constant.
This makes the |controller| prioritize repetitions over pre-transmissions.
``RTN`` also affects transport latency, and this is discussed further in the following sections.

.. note::
The |controller| has certain limitations on the configurations it can support.
These are listed in the :ref:`softdevice_controller_limitations` section.
Unless mentioned otherwise, the |controller| supports the whole range of the allowed parameters.

Broadcast ISO
-------------

In the broadcast mode, retransmissions can be achieved by using repetitions and pre-transmissions.
The |controller| will use at least one repetition and as many pre-transmissions as possible to achieve the desired retransmissions.

The following example shows how the host provided values affect the selected parameters.
The example assumes that the |controller| can produce a valid configuration with a mixture of pre-transmissions and repetitions for a given input.
The host can influence the parameters with any of the following actions:

* Increase the ``RTN`` while keeping the ``Max_Transport_Latency`` constant.
This prioritizes reliability over transport latency, assuming there is room for new retransmissions.
* Decrease the ``RTN`` while keeping the ``Max_Transport_Latency`` constant.
This prioritizes transport latency over reliability.
* Increase the ``Max_Transport_Latency`` while keeping the ``RTN`` constant.
This makes the |controller| prioritize pre-transmissions over repetitions.
* Decrease the ``Max_Transport_Latency`` while keeping the ``RTN`` constant.
This makes the |controller| prioritize repetitions over pre-transmissions.

.. note::
The |controller| reserves 2.5 ms to allow time for periodic advertising.
This in turn limits the number of subevents that can be fitted in a BIG event.
This value can be configured with the :kconfig:option:`BT_CTLR_BIG_RESERVED_TIME_US` Kconfig option, or with the vendor-specific HCI command defined by :c:func:`sdc_hci_cmd_vs_big_reserved_time_set`.

Unicast ISO
-----------

In the unicast mode, a PDU will be restransmitted if it is sent and not acknowledged by the peer, provided there is room for retransmissions.
That means a greater ``RTN`` provided by the host will improve reliability, but will introduce higher transport latency.
Conversly, a lower ``Max_Transport_Latency`` will reduce reliability, as a PDU has fewer opportunities for retransmission.

.. _iso_providing_data:

Providing data
Expand Down
130 changes: 130 additions & 0 deletions softdevice_controller/doc/pic/schedule/connected_iso_timing.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
25 changes: 25 additions & 0 deletions softdevice_controller/doc/scheduling.rst
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,8 @@ The following table summarizes the priorities.
| | * Connectable Advertiser/Broadcaster which has been blocked consecutively for a few times |
| | * Scanner which has been blocked for a long time |
| | * Scanner which is receiving an advertising packet on a secondary advertising channel |
| | * Connected Isochronous channel setup |
| | * Connected Isochronous channels that are about to time out |
+-----------------------------+---------------------------------------------------------------------------------------------------+
| Third priority | * All |BLE| roles in states other than above run with this priority |
| | * MPSL Timeslot with high priority |
Expand Down Expand Up @@ -549,6 +551,29 @@ Scheduling conflicts can occur if the length of the periodic advertising data ex

Periodic advertiser timing-events are scheduled relative to other Central device events

.. _scheduling_of_connected_iso:

Connected isochronous channels timing
*************************************

Connected isochronous channel timing-events are scheduled every isochronous (ISO) interval.
All subevents belonging to the same ISO group are scheduled in the same timing-event.

As a peripheral, the timing of ISO events is determined by the central device.
The central can choose parameters that allow for conflict-free scheduling of multiple CISes and ACLs.
To achieve this, the application must set the ACL event spacing and ACL interval to fit the selected ISO parameters.
The sections :ref:`acl_timing` and :ref:`central_timing` describe how to configure the ACL event length and ACL spacing.

The figure below illustrates a scenario with two ISO channels associated with two ACL connections.
Here the ACL interval is set to twice the ISO interval, and the ACL event spacing is set equal to the ISO interval.
If the ACL event spacing is 10 ms and the ACL event length is set to 2.5 ms, 7.5 ms is left for the ISO channels every ISO interval.

.. figure:: pic/schedule/connected_iso_timing.svg
:alt: Alt text: Connected ISO channels timing
:align: center
:width: 80%

Connected ISO channels are scheduled interleaved with ACL timing-events.

Timeslot API timing
*******************
Expand Down
4 changes: 2 additions & 2 deletions softdevice_controller/include/sdc.h
Original file line number Diff line number Diff line change
Expand Up @@ -148,8 +148,8 @@ extern "C" {
*/

/** @brief Auxiliary defines, not to be used outside of this file. */
#define __MEM_MINIMAL_CENTRAL_LINK_SIZE 1020
#define __MEM_MINIMAL_PERIPHERAL_LINK_SIZE 1156
#define __MEM_MINIMAL_CENTRAL_LINK_SIZE 1015
#define __MEM_MINIMAL_PERIPHERAL_LINK_SIZE 1140
#define __MEM_TX_BUFFER_OVERHEAD_SIZE 15
#define __MEM_RX_BUFFER_OVERHEAD_SIZE 14

Expand Down
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
description: SoftDevice Controller
git_revision: 845a9e2a6fbb5a5d72321aa51f9311026b4529e7
ll_subversion_number: '0x2183'
git_revision: a0cb9ced588fbd52ca178108938a064e2619de4e
ll_subversion_number: '0x2184'
ll_version_number: '0x0D'
timestamp: '2024-02-22T12:08:39Z'
timestamp: '2024-02-23T10:23:41Z'
Binary file not shown.
Binary file not shown.
Binary file not shown.
6 changes: 3 additions & 3 deletions softdevice_controller/lib/cortex-m4/hard-float/manifest.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
description: SoftDevice Controller
git_revision: 845a9e2a6fbb5a5d72321aa51f9311026b4529e7
ll_subversion_number: '0x1183'
git_revision: a0cb9ced588fbd52ca178108938a064e2619de4e
ll_subversion_number: '0x1184'
ll_version_number: '0x0D'
timestamp: '2024-02-22T12:05:54Z'
timestamp: '2024-02-23T10:20:44Z'
Binary file not shown.
Binary file not shown.
Binary file not shown.
6 changes: 3 additions & 3 deletions softdevice_controller/lib/cortex-m4/soft-float/manifest.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
description: SoftDevice Controller
git_revision: 845a9e2a6fbb5a5d72321aa51f9311026b4529e7
ll_subversion_number: '0x1183'
git_revision: a0cb9ced588fbd52ca178108938a064e2619de4e
ll_subversion_number: '0x1184'
ll_version_number: '0x0D'
timestamp: '2024-02-22T12:05:54Z'
timestamp: '2024-02-23T10:20:44Z'
Binary file not shown.
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
description: SoftDevice Controller
git_revision: 845a9e2a6fbb5a5d72321aa51f9311026b4529e7
ll_subversion_number: '0x1183'
git_revision: a0cb9ced588fbd52ca178108938a064e2619de4e
ll_subversion_number: '0x1184'
ll_version_number: '0x0D'
timestamp: '2024-02-22T12:05:54Z'
timestamp: '2024-02-23T10:20:44Z'
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
description: SoftDevice Controller
git_revision: 845a9e2a6fbb5a5d72321aa51f9311026b4529e7
ll_subversion_number: '0x4183'
git_revision: a0cb9ced588fbd52ca178108938a064e2619de4e
ll_subversion_number: '0x4184'
ll_version_number: '0x0D'
timestamp: '2024-02-22T12:10:28Z'
timestamp: '2024-02-23T10:25:41Z'
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
description: SoftDevice Controller
git_revision: 845a9e2a6fbb5a5d72321aa51f9311026b4529e7
ll_subversion_number: '0x4183'
git_revision: a0cb9ced588fbd52ca178108938a064e2619de4e
ll_subversion_number: '0x4184'
ll_version_number: '0x0D'
timestamp: '2024-02-22T12:10:28Z'
timestamp: '2024-02-23T10:25:41Z'
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
description: SoftDevice Controller
git_revision: 845a9e2a6fbb5a5d72321aa51f9311026b4529e7
ll_subversion_number: '0x4183'
git_revision: a0cb9ced588fbd52ca178108938a064e2619de4e
ll_subversion_number: '0x4184'
ll_version_number: '0x0D'
timestamp: '2024-02-22T12:10:28Z'
timestamp: '2024-02-23T10:25:41Z'
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
description: SoftDevice Controller
git_revision: 845a9e2a6fbb5a5d72321aa51f9311026b4529e7
ll_subversion_number: '0x3183'
git_revision: a0cb9ced588fbd52ca178108938a064e2619de4e
ll_subversion_number: '0x3184'
ll_version_number: '0x0D'
timestamp: '2024-02-22T12:15:58Z'
timestamp: '2024-02-23T10:31:56Z'
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
description: SoftDevice Controller
git_revision: 845a9e2a6fbb5a5d72321aa51f9311026b4529e7
ll_subversion_number: '0x3183'
git_revision: a0cb9ced588fbd52ca178108938a064e2619de4e
ll_subversion_number: '0x3184'
ll_version_number: '0x0D'
timestamp: '2024-02-22T12:15:58Z'
timestamp: '2024-02-23T10:31:56Z'
Binary file not shown.
Loading

0 comments on commit b02a54c

Please sign in to comment.