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;