You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by ry...@apache.org on 2019/07/12 13:46:40 UTC
[mynewt-nimble] 03/12: nimble/ll: Add assert to detect not
completed chained advertising report
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
commit 0e9b96d21763c0d9e874a20f90815b19595e96c1
Author: Ćukasz Rymanowski <lu...@codecoup.pl>
AuthorDate: Wed Jul 10 13:23:35 2019 +0200
nimble/ll: Add assert to detect not completed chained advertising report
---
nimble/controller/src/ble_ll_scan.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/nimble/controller/src/ble_ll_scan.c b/nimble/controller/src/ble_ll_scan.c
index 8221292..e26370e 100644
--- a/nimble/controller/src/ble_ll_scan.c
+++ b/nimble/controller/src/ble_ll_scan.c
@@ -1156,6 +1156,11 @@ ble_ll_scan_aux_data_unref(struct ble_ll_aux_data *aux_data)
ble_ll_trace_u32x2(BLE_LL_TRACE_ID_AUX_UNREF, (uint32_t) aux_data, aux_data->ref_cnt);
if (aux_data->ref_cnt == 0) {
+ /* Below assert is to detect missing complete or truncated event in case of chaining */
+ BLE_LL_ASSERT(!((BLE_LL_AUX_CHECK_FLAG(aux_data, BLE_LL_AUX_CHAIN_BIT) &&
+ BLE_LL_AUX_CHECK_FLAG(aux_data, BLE_LL_SENT_EVENT_TO_HOST)) &&
+ !(BLE_LL_AUX_CHECK_FLAG(aux_data, BLE_LL_AUX_TRUNCATED_SENT) ||
+ !BLE_LL_AUX_CHECK_FLAG(aux_data, BLE_LL_AUX_INCOMPLETE_BIT))));
ble_ll_scan_aux_data_free(aux_data);
}
@@ -2646,6 +2651,16 @@ ble_ll_hci_send_ext_adv_report(uint8_t ptype, uint8_t *adva, uint8_t adva_type,
if (aux_data) {
BLE_LL_AUX_SET_FLAG(aux_data, BLE_LL_SENT_EVENT_TO_HOST);
+ /* In case it is scannable AUX and we are waiting for scan response,
+ * let us clear BLE_LL_SENT_EVENT_TO_HOST flag as we consider scan response
+ * as separate report even aux_data is reused.
+ * This is needed to proper detect of not completed advertising
+ * reports.
+ */
+ if ((aux_data->evt_type & BLE_HCI_ADV_SCAN_MASK) &&
+ !(aux_data->evt_type & BLE_HCI_ADV_SCAN_RSP_MASK)) {
+ BLE_LL_AUX_CLEAR_FLAG(aux_data, BLE_LL_SENT_EVENT_TO_HOST);
+ }
}
evt = next_evt;