Bluetooth: controller: Implement ADV re-schedule for new scheduler

The new JIT scheduler does not have slot reservation, which means that
the ticker extension feature for automatically re-scheduling a colliding
non-anchored event, e.g. ADV, cannot be used.

This implementaion reacts to ADV envent done with result ABORTED or
TOO_LATE, and in those cases attempts to re-schedule the ADV event again
within the 10 ms pertubation window.

As the original scheduling, the re-scheduling is randomized, so there
is no absolute predictability as to how many attempts will be made. The
advertiser will attempt with randomly delayed re-schdules until the
window is exhausted.

If re-scheduling is unsuccessful, the weight of the ADV event is
increased, improving it's chances of success in the next event.

Signed-off-by: Morten Priess <mtpr@oticon.com>
This commit is contained in:
Morten Priess 2021-05-25 14:52:44 +02:00 committed by Christopher Friedt
commit fdc92ebb27
8 changed files with 159 additions and 35 deletions

View file

@ -80,7 +80,7 @@ void lll_resume(void *param)
}
#if defined(CONFIG_BT_CTLR_JIT_SCHEDULING)
void lll_done_score(void *param, uint8_t too_late, uint8_t aborted)
void lll_done_score(void *param, uint8_t result)
{
struct lll_hdr *hdr = param;
@ -88,7 +88,7 @@ void lll_done_score(void *param, uint8_t too_late, uint8_t aborted)
return;
}
if (!too_late && !aborted) {
if (result == DONE_COMPLETED) {
hdr->score = 0;
hdr->latency = 0;
} else {