This is an automated email from the ASF dual-hosted git repository.
andk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-nimble.git
The following commit(s) were added to refs/heads/master by this push:
new 746e5ff5 nimble/ll: Fix BIG anchor offset overflow
746e5ff5 is described below
commit 746e5ff5d958e8606e181f3c830e80813ed9feaf
Author: Andrzej Kaczmarek <[email protected]>
AuthorDate: Tue Aug 6 21:51:26 2024 +0200
nimble/ll: Fix BIG anchor offset overflow
The anchor base for BIG events was reset every 30mins to avoid overflow
in offset calculations which could happen after more than 60mins of
streaming.
However, as it turns out anchor offset wraps-around much earlier than
that after just ~10m55s (at 10ms iso interval) so we should better take
care of anchor offset instead of offset_us.
---
nimble/controller/src/ble_ll_iso_big.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/nimble/controller/src/ble_ll_iso_big.c
b/nimble/controller/src/ble_ll_iso_big.c
index 53bc415d..d4a492b2 100644
--- a/nimble/controller/src/ble_ll_iso_big.c
+++ b/nimble/controller/src/ble_ll_iso_big.c
@@ -183,8 +183,10 @@ big_sched_set(struct ble_ll_iso_big *big)
ble_ll_tmr_add(&big->sch.start_time, &big->sch.remainder, offset_us);
- /* Reset anchor base every 30mins to avoid overflows in calculations
later. */
- if (offset_us >= 30 * 60 * 1000000) {
+ /* Reset anchor base before anchor offset wraps-around.
+ * This happens much earlier than possible overflow in calculations.
+ */
+ if (big->anchor_offset == UINT16_MAX) {
big->anchor_base_ticks = big->sch.start_time;
big->anchor_base_rem_us = big->sch.remainder;
big->anchor_offset = 0;