You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by ja...@apache.org on 2020/01/27 19:16:27 UTC

[mynewt-nimble] branch master updated (9e83793 -> f44bda8)

This is an automated email from the ASF dual-hosted git repository.

janc pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-nimble.git.


    from 9e83793  nimble/btshell: Fix build with SHELL_CMD_HELP set to 0
     new 5705d6f  nimble/ll: Don't put TxPower into AUX_CHAIN_IND PDU
     new 8f4b9b4  nimble/ll: Fix adv data length calculation if SyncInfo is present
     new e390de8  nimble/ll: Make flags in Extended Header optional
     new f44bda8  nimble/ll: Fix misleading comment

The 4 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 nimble/controller/src/ble_ll_adv.c | 86 +++++++++++++++++++++++++++++---------
 1 file changed, 67 insertions(+), 19 deletions(-)


[mynewt-nimble] 01/04: nimble/ll: Don't put TxPower into AUX_CHAIN_IND PDU

Posted by ja...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

janc pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-nimble.git

commit 5705d6f606206f4c8c0cb9c14e91e3c3e68f21ec
Author: Szymon Janc <sz...@codecoup.pl>
AuthorDate: Fri Jan 24 08:54:38 2020 +0100

    nimble/ll: Don't put TxPower into AUX_CHAIN_IND PDU
    
    This is not recommended for extended advertising chains and forbidden
    for periodic advertising chains.
    
    This was affecting LL/DDI/ADV/BV-61-C qualification test case.
---
 nimble/controller/src/ble_ll_adv.c | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/nimble/controller/src/ble_ll_adv.c b/nimble/controller/src/ble_ll_adv.c
index 5617d98..01da1a3 100644
--- a/nimble/controller/src/ble_ll_adv.c
+++ b/nimble/controller/src/ble_ll_adv.c
@@ -1385,8 +1385,11 @@ ble_ll_adv_aux_calculate(struct ble_ll_adv_sm *advsm,
         hdr_len += BLE_LL_EXT_ADV_TARGETA_SIZE;
     }
 
-    /* TxPower if configured */
-    if (advsm->props & BLE_HCI_LE_SET_EXT_ADV_PROP_INC_TX_PWR) {
+    /* TxPower if configured.
+     * Note: TxPower should not be be present in AUX_CHAIN_IND
+     */
+    if (aux_data_offset == 0 &&
+        (advsm->props & BLE_HCI_LE_SET_EXT_ADV_PROP_INC_TX_PWR)) {
         aux->ext_hdr |= (1 << BLE_LL_EXT_ADV_TX_POWER_BIT);
         hdr_len += BLE_LL_EXT_ADV_TX_POWER_SIZE;
     }
@@ -2181,8 +2184,11 @@ ble_ll_adv_sync_calculate(struct ble_ll_adv_sm *advsm,
 
     hdr_len = BLE_LL_EXT_ADV_HDR_LEN + BLE_LL_EXT_ADV_FLAGS_SIZE;
 
-    /* TxPower if configured */
-    if (advsm->periodic_adv_props & BLE_HCI_LE_SET_PERIODIC_ADV_PROP_INC_TX_PWR) {
+    /* TxPower if configured
+     * Note: TxPower shall not be present in chain PDU for SYNC
+     */
+    if (sync_data_offset == 0 &&
+        (advsm->periodic_adv_props & BLE_HCI_LE_SET_PERIODIC_ADV_PROP_INC_TX_PWR)) {
         sync->ext_hdr |= (1 << BLE_LL_EXT_ADV_TX_POWER_BIT);
         hdr_len += BLE_LL_EXT_ADV_TX_POWER_SIZE;
     }


[mynewt-nimble] 02/04: nimble/ll: Fix adv data length calculation if SyncInfo is present

Posted by ja...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

janc pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-nimble.git

commit 8f4b9b4f1b9cf2f5587e924a4aba247a7474a85c
Author: Szymon Janc <sz...@codecoup.pl>
AuthorDate: Fri Jan 24 09:23:03 2020 +0100

    nimble/ll: Fix adv data length calculation if SyncInfo is present
    
    When placing SyncInfo into Extended Header it needs to be taken into
    account when calculating available space for advertisign data.
---
 nimble/controller/src/ble_ll_adv.c | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/nimble/controller/src/ble_ll_adv.c b/nimble/controller/src/ble_ll_adv.c
index 01da1a3..9bfb3fb 100644
--- a/nimble/controller/src/ble_ll_adv.c
+++ b/nimble/controller/src/ble_ll_adv.c
@@ -1394,6 +1394,16 @@ ble_ll_adv_aux_calculate(struct ble_ll_adv_sm *advsm,
         hdr_len += BLE_LL_EXT_ADV_TX_POWER_SIZE;
     }
 
+#if MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_PERIODIC_ADV)
+    /* SyncInfo for 1st PDU in chain (i.e. AUX_ADV_IND only) if periodic
+     * advertising is enabled
+     */
+    if (aux_data_offset == 0 && advsm->periodic_adv_active) {
+        aux->ext_hdr |= (1 << BLE_LL_EXT_ADV_SYNC_INFO_BIT);
+        hdr_len += BLE_LL_EXT_ADV_SYNC_INFO_SIZE;
+    }
+#endif
+
     /* AdvData always */
     aux->aux_data_len = min(BLE_LL_MAX_PAYLOAD_LEN - hdr_len, rem_aux_data_len);
 
@@ -1407,14 +1417,6 @@ ble_ll_adv_aux_calculate(struct ble_ll_adv_sm *advsm,
             assert(hdr_len + aux->aux_data_len == BLE_LL_MAX_PAYLOAD_LEN);
     }
 
-#if MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_PERIODIC_ADV)
-    /* SyncInfo for 1st PDU in chain (i.e. AUX_ADV_IND only) */
-    if (aux_data_offset == 0 && advsm->periodic_adv_active) {
-        aux->ext_hdr |= (1 << BLE_LL_EXT_ADV_SYNC_INFO_BIT);
-        hdr_len += BLE_LL_EXT_ADV_SYNC_INFO_SIZE;
-    }
-#endif
-
     aux->payload_len = hdr_len + aux->aux_data_len;
 }
 


[mynewt-nimble] 04/04: nimble/ll: Fix misleading comment

Posted by ja...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

janc pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-nimble.git

commit f44bda83101cfbe84c5dd1f1fb38b4010fbc9c44
Author: Szymon Janc <sz...@codecoup.pl>
AuthorDate: Fri Jan 24 09:22:54 2020 +0100

    nimble/ll: Fix misleading comment
---
 nimble/controller/src/ble_ll_adv.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/nimble/controller/src/ble_ll_adv.c b/nimble/controller/src/ble_ll_adv.c
index 77c66ff..16cb5e5 100644
--- a/nimble/controller/src/ble_ll_adv.c
+++ b/nimble/controller/src/ble_ll_adv.c
@@ -1358,7 +1358,7 @@ ble_ll_adv_aux_calculate(struct ble_ll_adv_sm *advsm,
     hdr_len = BLE_LL_EXT_ADV_HDR_LEN;
 
     if (!(advsm->props & BLE_HCI_LE_SET_EXT_ADV_PROP_SCANNABLE)) {
-        /* Flags and ADI */
+        /* ADI */
         aux->ext_hdr |= (1 << BLE_LL_EXT_ADV_DATA_INFO_BIT);
         hdr_len += BLE_LL_EXT_ADV_DATA_INFO_SIZE;
     }


[mynewt-nimble] 03/04: nimble/ll: Make flags in Extended Header optional

Posted by ja...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

janc pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-nimble.git

commit e390de8676f0a0e14b904303e2ddc294a9c9a492
Author: Szymon Janc <sz...@codecoup.pl>
AuthorDate: Fri Jan 24 10:51:58 2020 +0100

    nimble/ll: Make flags in Extended Header optional
    
    If no flags are specified there is no need to put flags into extended
    header. This was affecting LL/DDI/ADV/BV-61-C qualification test case.
---
 nimble/controller/src/ble_ll_adv.c | 52 +++++++++++++++++++++++++++++++++-----
 1 file changed, 46 insertions(+), 6 deletions(-)

diff --git a/nimble/controller/src/ble_ll_adv.c b/nimble/controller/src/ble_ll_adv.c
index 9bfb3fb..77c66ff 100644
--- a/nimble/controller/src/ble_ll_adv.c
+++ b/nimble/controller/src/ble_ll_adv.c
@@ -703,8 +703,11 @@ ble_ll_adv_aux_pdu_make(uint8_t *dptr, void *pducb_arg, uint8_t *hdr_byte)
     dptr[0] = (adv_mode << 6) | ext_hdr_len;
     dptr += 1;
 
-    dptr[0] = aux->ext_hdr;
-    dptr += 1;
+    /* only put flags if needed */
+    if (aux->ext_hdr) {
+        dptr[0] = aux->ext_hdr;
+        dptr += 1;
+    }
 
     if (aux->ext_hdr & (1 << BLE_LL_EXT_ADV_ADVA_BIT)) {
 
@@ -1352,7 +1355,7 @@ ble_ll_adv_aux_calculate(struct ble_ll_adv_sm *advsm,
     rem_aux_data_len = AUX_DATA_LEN(advsm) - aux_data_offset;
     chainable = !(advsm->props & BLE_HCI_LE_SET_EXT_ADV_PROP_CONNECTABLE);
 
-    hdr_len = BLE_LL_EXT_ADV_HDR_LEN + BLE_LL_EXT_ADV_FLAGS_SIZE;
+    hdr_len = BLE_LL_EXT_ADV_HDR_LEN;
 
     if (!(advsm->props & BLE_HCI_LE_SET_EXT_ADV_PROP_SCANNABLE)) {
         /* Flags and ADI */
@@ -1404,11 +1407,26 @@ ble_ll_adv_aux_calculate(struct ble_ll_adv_sm *advsm,
     }
 #endif
 
+    /* if we have any fields in ext header we need to add flags, note that Aux
+     * PTR is handled later and it will account for flags if needed
+     */
+    if (aux->ext_hdr) {
+        hdr_len += BLE_LL_EXT_ADV_FLAGS_SIZE;
+    }
+
     /* AdvData always */
     aux->aux_data_len = min(BLE_LL_MAX_PAYLOAD_LEN - hdr_len, rem_aux_data_len);
 
     /* AuxPtr if there are more AdvData remaining that we can fit here */
     if (chainable && (rem_aux_data_len > aux->aux_data_len)) {
+            /* adjust for flags that needs to be added if AuxPtr is only field
+             * in Extended Header
+             */
+            if (!aux->ext_hdr) {
+                hdr_len += BLE_LL_EXT_ADV_FLAGS_SIZE;
+                aux->aux_data_len -= BLE_LL_EXT_ADV_FLAGS_SIZE;
+            }
+
             aux->ext_hdr |= (1 << BLE_LL_EXT_ADV_AUX_PTR_BIT);
             hdr_len += BLE_LL_EXT_ADV_AUX_PTR_SIZE;
             aux->aux_data_len -= BLE_LL_EXT_ADV_AUX_PTR_SIZE;
@@ -2013,8 +2031,11 @@ ble_ll_adv_sync_pdu_make(uint8_t *dptr, void *pducb_arg, uint8_t *hdr_byte)
     dptr[0] = (adv_mode << 6) | ext_hdr_len;
     dptr += 1;
 
-    dptr[0] = sync->ext_hdr;
-    dptr += 1;
+    /* only put flags if needed */
+    if (sync->ext_hdr) {
+        dptr[0] = sync->ext_hdr;
+        dptr += 1;
+    }
 
     if (sync->ext_hdr & (1 << BLE_LL_EXT_ADV_AUX_PTR_BIT)) {
         if (!SYNC_NEXT(advsm)->sch.enqueued) {
@@ -2184,7 +2205,7 @@ ble_ll_adv_sync_calculate(struct ble_ll_adv_sm *advsm,
 
     rem_sync_data_len = SYNC_DATA_LEN(advsm) - sync_data_offset;
 
-    hdr_len = BLE_LL_EXT_ADV_HDR_LEN + BLE_LL_EXT_ADV_FLAGS_SIZE;
+    hdr_len = BLE_LL_EXT_ADV_HDR_LEN;
 
     /* TxPower if configured
      * Note: TxPower shall not be present in chain PDU for SYNC
@@ -2195,11 +2216,30 @@ ble_ll_adv_sync_calculate(struct ble_ll_adv_sm *advsm,
         hdr_len += BLE_LL_EXT_ADV_TX_POWER_SIZE;
     }
 
+    /* if we have any fields in ext header we need to add flags, note that Aux
+     * PTR is handled later and it will account for flags if needed
+     *
+     * This could be handled inside TxPower but lets keep code consistent with
+     * how Aux calculate works and this also make it easier to add more fields
+     * into flags if needed in future
+     */
+    if (sync->ext_hdr) {
+        hdr_len += BLE_LL_EXT_ADV_FLAGS_SIZE;
+    }
+
     /* AdvData always */
     sync->sync_data_len = min(BLE_LL_MAX_PAYLOAD_LEN - hdr_len, rem_sync_data_len);
 
     /* AuxPtr if there are more AdvData remaining that we can fit here */
     if ((rem_sync_data_len > sync->sync_data_len)) {
+            /* adjust for flags that needs to be added if AuxPtr is only field
+             * in Extended Header
+             */
+            if (!sync->ext_hdr) {
+                hdr_len += BLE_LL_EXT_ADV_FLAGS_SIZE;
+                sync->sync_data_len -= BLE_LL_EXT_ADV_FLAGS_SIZE;
+            }
+
             sync->ext_hdr |= (1 << BLE_LL_EXT_ADV_AUX_PTR_BIT);
             hdr_len += BLE_LL_EXT_ADV_AUX_PTR_SIZE;
             sync->sync_data_len -= BLE_LL_EXT_ADV_AUX_PTR_SIZE;