This is an automated email from the ASF dual-hosted git repository.
rymek 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 5a8d0e3a nimble/ll: Add option to prefill isoal mux
5a8d0e3a is described below
commit 5a8d0e3a7f0f9d6ca8cc2ac18613c231092e6e73
Author: Andrzej Kaczmarek <[email protected]>
AuthorDate: Wed Aug 7 00:56:48 2024 +0200
nimble/ll: Add option to prefill isoal mux
This adds option to queue initial SDUs in mux until there are enough
data to fill entire ISO event.
This makes it easier to handle pre-transmissions since we don't care if
host is aware that it should send more data for the 1st event to fill
pre-transmission subevents - we will simply not "release" data from mux
until there are enough SDUs to fill complete event (i.e. initial ISO
events may contain only empty packets).
---
nimble/controller/include/controller/ble_ll_isoal.h | 4 ++++
nimble/controller/src/ble_ll_isoal.c | 18 ++++++++++++++++++
nimble/controller/syscfg.yml | 9 +++++++++
3 files changed, 31 insertions(+)
diff --git a/nimble/controller/include/controller/ble_ll_isoal.h
b/nimble/controller/include/controller/ble_ll_isoal.h
index 73ceaf76..4ad8d858 100644
--- a/nimble/controller/include/controller/ble_ll_isoal.h
+++ b/nimble/controller/include/controller/ble_ll_isoal.h
@@ -27,6 +27,10 @@ extern "C" {
#if MYNEWT_VAL(BLE_LL_ISO)
struct ble_ll_isoal_mux {
+#if MYNEWT_VAL(BLE_LL_ISOAL_MUX_PREFILL)
+ uint8_t active;
+#endif
+
/* Max PDU length */
uint8_t max_pdu;
/* Number of expected SDUs per ISO interval */
diff --git a/nimble/controller/src/ble_ll_isoal.c
b/nimble/controller/src/ble_ll_isoal.c
index 0ae6d6b7..bed974bb 100644
--- a/nimble/controller/src/ble_ll_isoal.c
+++ b/nimble/controller/src/ble_ll_isoal.c
@@ -119,13 +119,31 @@ ble_ll_isoal_mux_tx_pkt_in(struct ble_ll_isoal_mux *mux,
struct os_mbuf *om,
pkthdr = OS_MBUF_PKTHDR(om);
STAILQ_INSERT_TAIL(&mux->sdu_q, pkthdr, omp_next);
mux->sdu_q_len++;
+#if MYNEWT_VAL(BLE_LL_ISOAL_MUX_PREFILL)
+ if (mux->sdu_q_len == mux->sdu_per_event) {
+ mux->active = 1;
+ }
+#endif
OS_EXIT_CRITICAL(sr);
}
int
ble_ll_isoal_mux_event_start(struct ble_ll_isoal_mux *mux, uint32_t timestamp)
{
+#if MYNEWT_VAL(BLE_LL_ISOAL_MUX_PREFILL)
+ /* If prefill is enabled, we always expect to have required number of SDUs
+ * in queue, otherwise we disable mux until enough SDUs are queued again.
+ */
+ mux->sdu_in_event = mux->sdu_per_event;
+ if (mux->sdu_in_event > mux->sdu_q_len) {
+ mux->active = 0;
+ }
+ if (!mux->active) {
+ mux->sdu_in_event = 0;
+ }
+#else
mux->sdu_in_event = min(mux->sdu_q_len, mux->sdu_per_event);
+#endif
mux->event_tx_timestamp = timestamp;
return mux->sdu_in_event;
diff --git a/nimble/controller/syscfg.yml b/nimble/controller/syscfg.yml
index ce8fad1e..e77a1de4 100644
--- a/nimble/controller/syscfg.yml
+++ b/nimble/controller/syscfg.yml
@@ -516,6 +516,15 @@ syscfg.defs:
value: 0
experimental: 1
+ BLE_LL_ISOAL_MUX_PREFILL:
+ description: >
+ Waits until number of SDUs enqueued in mux is enough to fill
complete
+ ISO event before providing data to ISO.
+ This is useful for pre-transmissions as it ensures that all
subevents
+ in 1st ISO event are non-empty.
+ value: 0
+ experimental: 1
+
BLE_LL_CHANNEL_SOUNDING:
description: >
Enable support for Channel Sounding feature.