Bluetooth: Controller: Add margin to ISOALs time offset

To ensure payloads are delivered in time for the first subevent
in framed BIS, ISOAL now enforces a (configurable) margin of
the calculated time offset

Without this margin, it has been observed that a broadcaster
can end up consistently missing the first subevent in every third
event in a 7.5 ms ISO with a 10 ms SDU interval

The margin is a conservative 2 ms by default, but can likely be
set a lot lower for most implementations and HWs

Signed-off-by: Troels Nilsson <trnn@demant.com>
This commit is contained in:
Troels Nilsson 2024-09-10 16:06:09 +02:00 committed by Anas Nashif
commit fa3bfa5453
4 changed files with 47 additions and 4 deletions

View file

@ -57,6 +57,25 @@ config BT_CTLR_ISOAL_SN_STRICT
depends on BT_CTLR_ADV_ISO || BT_CTLR_CONN_ISO
default y
config BT_CTLR_ISOAL_FRAMED_BIS_OFFSET_MARGIN
int "Margin (in microseconds) to be used in framed time offset for BIS"
depends on BT_CTLR_ADV_ISO || BT_CTLR_CONN_ISO
default 2000
range 0 10000
help
Needed margin for reliable delivery of payloads will vary, but should
generally be EVENT_OVERHEAD_START_US + a small margin to cover ISOAL
processing overhead
config BT_CTLR_ISOAL_FRAMED_CIS_OFFSET_MARGIN
int "Margin (in microseconds) to be used in framed time offset for CIS"
depends on BT_CTLR_ADV_ISO || BT_CTLR_CONN_ISO
default 0
range 0 10000
help
Note: Usually no margin is needed for CIS as Null PDUs can be used if a payload
is too late for the first subevent
source "tests/bluetooth/controller/common/Kconfig"
source "Kconfig.zephyr"