From 1ffdb89b049c8da5a5b448a65084edad6b152454 Mon Sep 17 00:00:00 2001 From: Andrzej Kaczmarek Date: Sun, 15 Apr 2018 17:28:57 +0200 Subject: [PATCH 01/10] nimble/ll: Remove redundant check There is no need to check for BLE_LL_ADV_SM_FLAG_ADV_TERMINATE_EVT in ble_ll_adv_sec_done() since this flag is always set for extended advertising and secondary channels are only active in case of extended advertising. --- nimble/controller/src/ble_ll_adv.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/nimble/controller/src/ble_ll_adv.c b/nimble/controller/src/ble_ll_adv.c index 7a1c2a5ce..6216cd086 100644 --- a/nimble/controller/src/ble_ll_adv.c +++ b/nimble/controller/src/ble_ll_adv.c @@ -3170,8 +3170,7 @@ ble_ll_adv_sec_done(struct ble_ll_adv_sm *advsm) ble_ll_scan_chk_resume(); /* Check if advertising timed out */ - if ((advsm->duration && aux->start_time >= advsm->adv_end_time) && - (advsm->flags & BLE_LL_ADV_SM_FLAG_ADV_TERMINATE_EVT)) { + if (advsm->duration && (aux->start_time >= advsm->adv_end_time)) { ble_ll_hci_ev_send_adv_set_terminated(BLE_ERR_DIR_ADV_TMO, advsm->adv_instance, 0, 0); @@ -3190,8 +3189,7 @@ ble_ll_adv_sec_done(struct ble_ll_adv_sm *advsm) return; } - if ((advsm->events_max && (advsm->events >= advsm->events_max)) && - (advsm->flags & BLE_LL_ADV_SM_FLAG_ADV_TERMINATE_EVT)) { + if (advsm->events_max && (advsm->events >= advsm->events_max)) { ble_ll_hci_ev_send_adv_set_terminated(BLE_RR_LIMIT_REACHED, advsm->adv_instance, 0, advsm->events); From 1d7ce9dc149c586d206b3aca766f03ddf47ee62d Mon Sep 17 00:00:00 2001 From: Andrzej Kaczmarek Date: Sun, 15 Apr 2018 17:34:07 +0200 Subject: [PATCH 02/10] nimble/ll: Send number of events in case of advertising timeout We shall send number of advertising events in case max number of events was specified and timeout due to duration was reached. Since events counter is only increased if max number of events was specified, we do not need extra checks here. --- nimble/controller/src/ble_ll_adv.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/nimble/controller/src/ble_ll_adv.c b/nimble/controller/src/ble_ll_adv.c index 6216cd086..a8d0d69ab 100644 --- a/nimble/controller/src/ble_ll_adv.c +++ b/nimble/controller/src/ble_ll_adv.c @@ -3041,7 +3041,8 @@ ble_ll_adv_done(struct ble_ll_adv_sm *advsm) if ((advsm->props & BLE_HCI_LE_SET_EXT_ADV_PROP_LEGACY) && (advsm->flags & BLE_LL_ADV_SM_FLAG_ADV_TERMINATE_EVT)) { ble_ll_hci_ev_send_adv_set_terminated(BLE_ERR_DIR_ADV_TMO, - advsm->adv_instance, 0, 0); + advsm->adv_instance, 0, + advsm->events); /* * For high duty directed advertising we need to send connection @@ -3172,7 +3173,8 @@ ble_ll_adv_sec_done(struct ble_ll_adv_sm *advsm) /* Check if advertising timed out */ if (advsm->duration && (aux->start_time >= advsm->adv_end_time)) { ble_ll_hci_ev_send_adv_set_terminated(BLE_ERR_DIR_ADV_TMO, - advsm->adv_instance, 0, 0); + advsm->adv_instance, 0, + advsm->events); /* * For high duty directed advertising we need to send connection From 11acb65828ab8676253a89a0c367c1c03aa4e954 Mon Sep 17 00:00:00 2001 From: Andrzej Kaczmarek Date: Sun, 15 Apr 2018 17:35:47 +0200 Subject: [PATCH 03/10] nimble/ll: Handle missing aux gracefully Since auxes are scheduled from LL task context it may happen sometimes that we won't have aux scheduled when trying to make ADV_EXT_IND PDU. In such case just set AuxPtr to 0 as this means data are truncated. --- nimble/controller/src/ble_ll_adv.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/nimble/controller/src/ble_ll_adv.c b/nimble/controller/src/ble_ll_adv.c index a8d0d69ab..287e1829f 100644 --- a/nimble/controller/src/ble_ll_adv.c +++ b/nimble/controller/src/ble_ll_adv.c @@ -454,8 +454,11 @@ ble_ll_adv_pdu_make(uint8_t *dptr, void *pducb_arg, uint8_t *hdr_byte) dptr += BLE_LL_EXT_ADV_DATA_INFO_SIZE; /* AuxPtr */ - assert(AUX_CURRENT(advsm)->sch.enqueued); - offset = AUX_CURRENT(advsm)->start_time - advsm->adv_pdu_start_time; + if (AUX_CURRENT(advsm)->sch.enqueued) { + offset = AUX_CURRENT(advsm)->start_time - advsm->adv_pdu_start_time; + } else { + offset = 0; + } ble_ll_adv_put_aux_ptr(advsm, offset, dptr); return BLE_LL_EXT_ADV_HDR_LEN + ext_hdr_len; From 214df3e7ea30e046657611714e0fb7555c79e51b Mon Sep 17 00:00:00 2001 From: Andrzej Kaczmarek Date: Sun, 15 Apr 2018 22:30:45 +0200 Subject: [PATCH 04/10] nimble/ll: Fix scheduling for aux packets We already adjust start_time to include scheduler delay and there is no need to include it in end_time. Just make sure that we round ticks up when converting from usecs and we'll have enough time for txing aux. --- nimble/controller/src/ble_ll_adv.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/nimble/controller/src/ble_ll_adv.c b/nimble/controller/src/ble_ll_adv.c index 287e1829f..177bc2ef0 100644 --- a/nimble/controller/src/ble_ll_adv.c +++ b/nimble/controller/src/ble_ll_adv.c @@ -1186,7 +1186,6 @@ ble_ll_adv_aux_schedule_next(struct ble_ll_adv_sm *advsm) ble_ll_adv_aux_calculate(advsm, aux_next, next_aux_data_offset); max_usecs = ble_ll_pdu_tx_time_get(aux_next->payload_len, advsm->sec_phy); - max_usecs += XCVR_PROC_DELAY_USECS; aux_next->start_time = aux->sch.end_time + ble_ll_usecs_to_ticks_round_up(BLE_LL_MAFS); @@ -1194,7 +1193,8 @@ ble_ll_adv_aux_schedule_next(struct ble_ll_adv_sm *advsm) sch = &aux_next->sch; sch->start_time = aux_next->start_time - g_ble_ll_sched_offset_ticks; sch->remainder = 0; - sch->end_time = aux_next->start_time + os_cputime_usecs_to_ticks(max_usecs); + sch->end_time = aux_next->start_time + + ble_ll_usecs_to_ticks_round_up(max_usecs); ble_ll_sched_adv_new(&aux_next->sch, ble_ll_adv_aux_scheduled, aux_next); } @@ -1245,16 +1245,10 @@ ble_ll_adv_aux_schedule_first(struct ble_ll_adv_sm *advsm) max_usecs = ble_ll_pdu_tx_time_get(aux->payload_len, advsm->sec_phy); } - /* - * XXX: For now, just schedule some additional time so we insure we have - * enough time to do everything we want. - */ - max_usecs += XCVR_PROC_DELAY_USECS; - sch = &aux->sch; sch->start_time = aux->start_time - g_ble_ll_sched_offset_ticks; sch->remainder = 0; - sch->end_time = aux->start_time + os_cputime_usecs_to_ticks(max_usecs); + sch->end_time = aux->start_time + ble_ll_usecs_to_ticks_round_up(max_usecs); ble_ll_sched_adv_new(sch, ble_ll_adv_aux_scheduled, aux); } From 4959a7d6b27ea1db750f0e1798f191cc0533f38e Mon Sep 17 00:00:00 2001 From: Andrzej Kaczmarek Date: Mon, 16 Apr 2018 10:30:28 +0200 Subject: [PATCH 05/10] nimble/ll: Fix dropping ext advertising events When dropping an extended advertising event, we need to make sure that no event for secondary channels is in queue and mark aux as inactive. This was done event will properly reschedule next event from scratch and we won't have any loose events to handle. --- nimble/controller/src/ble_ll_adv.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/nimble/controller/src/ble_ll_adv.c b/nimble/controller/src/ble_ll_adv.c index 177bc2ef0..3e565634f 100644 --- a/nimble/controller/src/ble_ll_adv.c +++ b/nimble/controller/src/ble_ll_adv.c @@ -2863,6 +2863,9 @@ ble_ll_adv_drop_event(struct ble_ll_adv_sm *advsm) #if MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_EXT_ADV) ble_ll_sched_rmv_elem(&advsm->aux[0].sch); ble_ll_sched_rmv_elem(&advsm->aux[1].sch); + + os_eventq_remove(&g_ble_ll_data.ll_evq, &advsm->adv_sec_txdone_ev); + advsm->aux_active = 0; #endif advsm->adv_chan = ble_ll_adv_final_chan(advsm); From fdeea2ec889e794d6a336cb21bd7e59aeb1f6900 Mon Sep 17 00:00:00 2001 From: Andrzej Kaczmarek Date: Mon, 16 Apr 2018 17:18:03 +0200 Subject: [PATCH 06/10] nimble/ll: Minor code cleanup --- nimble/controller/src/ble_ll_adv.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nimble/controller/src/ble_ll_adv.c b/nimble/controller/src/ble_ll_adv.c index 3e565634f..5b4a6ee59 100644 --- a/nimble/controller/src/ble_ll_adv.c +++ b/nimble/controller/src/ble_ll_adv.c @@ -3143,9 +3143,9 @@ ble_ll_adv_sec_done(struct ble_ll_adv_sm *advsm) assert(advsm->aux_active); aux = AUX_CURRENT(advsm); + aux_next = AUX_NEXT(advsm); if (advsm->aux_not_scanned) { - aux_next = AUX_NEXT(advsm); ble_ll_sched_rmv_elem(&aux_next->sch); } @@ -3160,7 +3160,7 @@ ble_ll_adv_sec_done(struct ble_ll_adv_sm *advsm) } /* If we have next AUX scheduled, try to schedule another one */ - if (AUX_NEXT(advsm)->sch.enqueued) { + if (aux_next->sch.enqueued) { advsm->aux_index ^= 1; advsm->aux_first_pdu = 0; ble_ll_adv_aux_schedule_next(advsm); From b05ea72b7ad21cb5d63866234ff0fc3b73b758be Mon Sep 17 00:00:00 2001 From: Andrzej Kaczmarek Date: Tue, 17 Apr 2018 15:59:41 +0200 Subject: [PATCH 07/10] nimble/ll: Stop advertising properly after limit occured We should do full SM stop after duration of max events limit occured to make sure there is nothing left in scheduler or queues. --- nimble/controller/src/ble_ll_adv.c | 33 ++++++++++++++---------------- 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/nimble/controller/src/ble_ll_adv.c b/nimble/controller/src/ble_ll_adv.c index 5b4a6ee59..2c7398fc0 100644 --- a/nimble/controller/src/ble_ll_adv.c +++ b/nimble/controller/src/ble_ll_adv.c @@ -3055,23 +3055,21 @@ ble_ll_adv_done(struct ble_ll_adv_sm *advsm) } /* Disable advertising */ - advsm->adv_enabled = 0; - ble_ll_scan_chk_resume(); + ble_ll_adv_sm_stop(advsm); } return; } #else - if (advsm->props & BLE_HCI_LE_SET_EXT_ADV_PROP_HD_DIRECTED) { - if (advsm->adv_pdu_start_time >= advsm->adv_end_time) { - /* Disable advertising */ - advsm->adv_enabled = 0; - ble_ll_conn_comp_event_send(NULL, BLE_ERR_DIR_ADV_TMO, - advsm->conn_comp_ev, advsm); - advsm->conn_comp_ev = NULL; - ble_ll_scan_chk_resume(); - return; - } + if ((advsm->props & BLE_HCI_LE_SET_EXT_ADV_PROP_HD_DIRECTED) && + (advsm->adv_pdu_start_time >= advsm->adv_end_time)) { + ble_ll_conn_comp_event_send(NULL, BLE_ERR_DIR_ADV_TMO, + advsm->conn_comp_ev, advsm); + advsm->conn_comp_ev = NULL; + + /* Disable advertising */ + ble_ll_adv_sm_stop(advsm); + return; } #endif @@ -3087,8 +3085,7 @@ ble_ll_adv_done(struct ble_ll_adv_sm *advsm) advsm->events); /* Disable advertising */ - advsm->adv_enabled = 0; - ble_ll_scan_chk_resume(); + ble_ll_adv_sm_stop(advsm); } return; @@ -3187,7 +3184,7 @@ ble_ll_adv_sec_done(struct ble_ll_adv_sm *advsm) } /* Disable advertising */ - advsm->adv_enabled = 0; + ble_ll_adv_sm_stop(advsm); return; } @@ -3195,9 +3192,9 @@ ble_ll_adv_sec_done(struct ble_ll_adv_sm *advsm) ble_ll_hci_ev_send_adv_set_terminated(BLE_RR_LIMIT_REACHED, advsm->adv_instance, 0, advsm->events); - /* Disable advertising */ - advsm->adv_enabled = 0; - return; + /* Disable advertising */ + ble_ll_adv_sm_stop(advsm); + return; } advsm->aux_active = 0; From a95fb1d558ba0c7fc50391f4cb7d8911506bb348 Mon Sep 17 00:00:00 2001 From: Andrzej Kaczmarek Date: Mon, 16 Apr 2018 17:56:51 +0200 Subject: [PATCH 08/10] nimble/ll: Refactor advertising duration handling The advertising duration was not handled properly in some cases when extended advertising was used which resulted in very weird behaviour over the air (like bursts of events which did not follow interval) or simply exceeding requested duration. This fixes all known problems by ensuring that: - if 1st aux scheduled in chain does not fit within duration, we stop advertising immediately - if subsequent aux scheduled in chain does not fit within duration, we remove it from scheduler (data will be trimmed) - after aux chain is done, we check if next advertising fits within duration before scheduling (prior to this we checked if current aux did fit which does not make any sense) This means that we should be now compliant with requirement stated in Core 5.0, Vol 2, Part E, section 7.8.56: "The Controller should not start an extended advertising event that it cannot complete within the duration." However, there's one tricky part here: we do not know whether full extended advertising event can be sent within duration (i.e. with all host data) as chain is scheduled on-the-fly using available air time. For this reason we will just trim data if needed to complete extended advertising event in time, as described earlier. --- nimble/controller/src/ble_ll_adv.c | 97 +++++++++++++++++------------- 1 file changed, 55 insertions(+), 42 deletions(-) diff --git a/nimble/controller/src/ble_ll_adv.c b/nimble/controller/src/ble_ll_adv.c index 2c7398fc0..c2def946c 100644 --- a/nimble/controller/src/ble_ll_adv.c +++ b/nimble/controller/src/ble_ll_adv.c @@ -185,6 +185,7 @@ struct ble_ll_adv_sm *g_ble_ll_cur_adv_sm; static void ble_ll_adv_make_done(struct ble_ll_adv_sm *advsm, struct ble_mbuf_hdr *hdr); static void ble_ll_adv_sm_init(struct ble_ll_adv_sm *advsm); +static void ble_ll_adv_sm_stop_timeout(struct ble_ll_adv_sm *advsm); #if (MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_PRIVACY) == 1) static void @@ -526,9 +527,14 @@ ble_ll_adv_aux_pdu_make(uint8_t *dptr, void *pducb_arg, uint8_t *hdr_byte) } if (aux->ext_hdr & (1 << BLE_LL_EXT_ADV_AUX_PTR_BIT)) { - assert(AUX_NEXT(advsm)->sch.enqueued); - - if (advsm->rx_ble_hdr) { + if (!AUX_NEXT(advsm)->sch.enqueued) { + /* + * Trim data here in case we do not have next aux scheduled. This + * can happen if next aux was outside advertising set period and + * was removed from scheduler. + */ + offset = 0; + } else if (advsm->rx_ble_hdr) { offset = advsm->rx_ble_hdr->rem_usecs + ble_ll_pdu_tx_time_get(12, advsm->sec_phy) + BLE_LL_IFS + 30; offset = AUX_NEXT(advsm)->start_time - advsm->rx_ble_hdr->beg_cputime - @@ -1196,6 +1202,15 @@ ble_ll_adv_aux_schedule_next(struct ble_ll_adv_sm *advsm) sch->end_time = aux_next->start_time + ble_ll_usecs_to_ticks_round_up(max_usecs); ble_ll_sched_adv_new(&aux_next->sch, ble_ll_adv_aux_scheduled, aux_next); + + /* + * In case duration is set for advertising set we need to check if newly + * scheduled aux will fit inside duration. If not, remove it from scheduler + * so advertising will stop after current aux. + */ + if (advsm->duration && (aux_next->sch.end_time > advsm->adv_end_time)) { + ble_ll_sched_rmv_elem(&aux_next->sch); + } } static void @@ -1312,6 +1327,16 @@ ble_ll_adv_aux_schedule(struct ble_ll_adv_sm *advsm) ble_ll_adv_aux_set_start_time(advsm); ble_ll_adv_aux_schedule_first(advsm); ble_ll_adv_aux_schedule_next(advsm); + + /* + * In case duration is set for advertising set we need to check if at least + * 1st aux will fit inside duration. If not, stop advertising now so we do + * not start extended advertising event which we cannot finish in time. + */ + if (advsm->duration && + (AUX_CURRENT(advsm)->sch.end_time > advsm->adv_end_time)) { + ble_ll_adv_sm_stop_timeout(advsm); + } } #endif @@ -1542,6 +1567,29 @@ ble_ll_adv_sm_stop(struct ble_ll_adv_sm *advsm) } } +static void +ble_ll_adv_sm_stop_timeout(struct ble_ll_adv_sm *advsm) +{ +#if MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_EXT_ADV) + ble_ll_hci_ev_send_adv_set_terminated(BLE_ERR_DIR_ADV_TMO, + advsm->adv_instance, 0, + advsm->events); +#endif + + /* + * For high duty directed advertising we need to send connection + * complete event with proper status + */ + if (advsm->props & BLE_HCI_LE_SET_EXT_ADV_PROP_HD_DIRECTED) { + ble_ll_conn_comp_event_send(NULL, BLE_ERR_DIR_ADV_TMO, + advsm->conn_comp_ev, advsm); + advsm->conn_comp_ev = NULL; + } + + /* Disable advertising */ + ble_ll_adv_sm_stop(advsm); +} + static void ble_ll_adv_scheduled(struct ble_ll_adv_sm *advsm, uint32_t sch_start, void *arg) { @@ -3040,22 +3088,7 @@ ble_ll_adv_done(struct ble_ll_adv_sm *advsm) */ if ((advsm->props & BLE_HCI_LE_SET_EXT_ADV_PROP_LEGACY) && (advsm->flags & BLE_LL_ADV_SM_FLAG_ADV_TERMINATE_EVT)) { - ble_ll_hci_ev_send_adv_set_terminated(BLE_ERR_DIR_ADV_TMO, - advsm->adv_instance, 0, - advsm->events); - - /* - * For high duty directed advertising we need to send connection - * complete event with proper status - */ - if (advsm->props & BLE_HCI_LE_SET_EXT_ADV_PROP_HD_DIRECTED) { - ble_ll_conn_comp_event_send(NULL, BLE_ERR_DIR_ADV_TMO, - advsm->conn_comp_ev, advsm); - advsm->conn_comp_ev = NULL; - } - - /* Disable advertising */ - ble_ll_adv_sm_stop(advsm); + ble_ll_adv_sm_stop_timeout(advsm); } return; @@ -3063,12 +3096,7 @@ ble_ll_adv_done(struct ble_ll_adv_sm *advsm) #else if ((advsm->props & BLE_HCI_LE_SET_EXT_ADV_PROP_HD_DIRECTED) && (advsm->adv_pdu_start_time >= advsm->adv_end_time)) { - ble_ll_conn_comp_event_send(NULL, BLE_ERR_DIR_ADV_TMO, - advsm->conn_comp_ev, advsm); - advsm->conn_comp_ev = NULL; - - /* Disable advertising */ - ble_ll_adv_sm_stop(advsm); + ble_ll_adv_sm_stop_timeout(advsm); return; } #endif @@ -3168,23 +3196,8 @@ ble_ll_adv_sec_done(struct ble_ll_adv_sm *advsm) ble_ll_scan_chk_resume(); /* Check if advertising timed out */ - if (advsm->duration && (aux->start_time >= advsm->adv_end_time)) { - ble_ll_hci_ev_send_adv_set_terminated(BLE_ERR_DIR_ADV_TMO, - advsm->adv_instance, 0, - advsm->events); - - /* - * For high duty directed advertising we need to send connection - * complete event with proper status - */ - if (advsm->props & BLE_HCI_LE_SET_EXT_ADV_PROP_HD_DIRECTED) { - ble_ll_conn_comp_event_send(NULL, BLE_ERR_DIR_ADV_TMO, - advsm->conn_comp_ev, advsm); - advsm->conn_comp_ev = NULL; - } - - /* Disable advertising */ - ble_ll_adv_sm_stop(advsm); + if (advsm->duration && (advsm->adv_pdu_start_time >= advsm->adv_end_time)) { + ble_ll_adv_sm_stop_timeout(advsm); return; } From ccc94fc6b129ac8f4b078c472c5f94c020240d19 Mon Sep 17 00:00:00 2001 From: Andrzej Kaczmarek Date: Sun, 15 Apr 2018 22:04:34 +0200 Subject: [PATCH 09/10] nimble/host: Pass num completed ext adv events to app --- nimble/host/include/host/ble_gap.h | 8 ++++++++ nimble/host/src/ble_gap.c | 7 +++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/nimble/host/include/host/ble_gap.h b/nimble/host/include/host/ble_gap.h index 4dbf3c5f5..6170f63f6 100644 --- a/nimble/host/include/host/ble_gap.h +++ b/nimble/host/include/host/ble_gap.h @@ -384,6 +384,14 @@ struct ble_gap_event { uint8_t instance; /** The handle of the relevant connection - valid if reason=0 */ uint16_t conn_handle; + /** + * Number of completed extended advertising events + * + * This field is only valid if non-zero max_events was passed to + * ble_gap_ext_adv_start() and advertising completed due to duration + * timeout or max events transmitted. + * */ + uint8_t num_ext_adv_events; #endif } adv_complete; diff --git a/nimble/host/src/ble_gap.c b/nimble/host/src/ble_gap.c index 6c79842a8..3ce763d7f 100644 --- a/nimble/host/src/ble_gap.c +++ b/nimble/host/src/ble_gap.c @@ -701,7 +701,8 @@ ble_gap_slave_extract_cb(uint8_t instance, } static void -ble_gap_adv_finished(uint8_t instance, int reason, uint16_t conn_handle) +ble_gap_adv_finished(uint8_t instance, int reason, uint16_t conn_handle, + uint8_t num_events) { struct ble_gap_event event; ble_gap_event_fn *cb; @@ -715,6 +716,7 @@ ble_gap_adv_finished(uint8_t instance, int reason, uint16_t conn_handle) #if MYNEWT_VAL(BLE_EXT_ADV) event.adv_complete.instance = instance; event.adv_complete.conn_handle = conn_handle; + event.adv_complete.num_ext_adv_events = num_events; #endif cb(&event, cb_arg); } @@ -1284,7 +1286,8 @@ ble_gap_rx_adv_set_terminated(struct hci_le_adv_set_terminated *evt) conn_handle = evt->conn_handle; } - ble_gap_adv_finished(evt->adv_handle, reason, conn_handle); + ble_gap_adv_finished(evt->adv_handle, reason, conn_handle, + evt->completed_events); } #endif From a28837c45b68062e7f1d0618b3d07426bac8c282 Mon Sep 17 00:00:00 2001 From: Andrzej Kaczmarek Date: Mon, 16 Apr 2018 10:30:43 +0200 Subject: [PATCH 10/10] nimble: Fix syscfg description We do support full extended advertising data range. --- nimble/syscfg.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nimble/syscfg.yml b/nimble/syscfg.yml index 53d5898c3..11a5bd524 100644 --- a/nimble/syscfg.yml +++ b/nimble/syscfg.yml @@ -56,5 +56,5 @@ syscfg.defs: description: > This allows to configure maximum size of advertising data and scan response data used in LE Advertising Extensions. - Valid range 31-238. + Valid range 31-1650. value: 31