diff --git a/nimble/controller/include/controller/ble_ll_sched.h b/nimble/controller/include/controller/ble_ll_sched.h index 4ad306ddc..cbc66f46c 100644 --- a/nimble/controller/include/controller/ble_ll_sched.h +++ b/nimble/controller/include/controller/ble_ll_sched.h @@ -74,7 +74,8 @@ extern uint8_t g_ble_ll_sched_offset_ticks; #define BLE_LL_SCHED_TYPE_CONN (3) #define BLE_LL_SCHED_TYPE_AUX_SCAN (4) #define BLE_LL_SCHED_TYPE_DTM (5) -#define BLE_LL_SCHED_TYPE_SYNC (6) +#define BLE_LL_SCHED_TYPE_PERIODIC (6) +#define BLE_LL_SCHED_TYPE_SYNC (7) /* Return values for schedule callback. */ #define BLE_LL_SCHED_STATE_RUNNING (0) diff --git a/nimble/controller/include/controller/ble_ll_sync.h b/nimble/controller/include/controller/ble_ll_sync.h index 6fc9cf58a..a0ce22605 100644 --- a/nimble/controller/include/controller/ble_ll_sync.h +++ b/nimble/controller/include/controller/ble_ll_sync.h @@ -29,6 +29,8 @@ extern "C" { #endif +struct ble_ll_sync_sm; + int ble_ll_sync_create(const uint8_t *cmdbuf, uint8_t len); int ble_ll_sync_cancel(ble_ll_hci_post_cmd_complete_cb *post_cmd_cb); int ble_ll_sync_terminate(const uint8_t *cmdbuf, uint8_t len); @@ -47,6 +49,7 @@ int ble_ll_sync_rx_isr_end(uint8_t *rxbuf, struct ble_mbuf_hdr *rxhdr); void ble_ll_sync_rx_pkt_in(struct os_mbuf *rxpdu, struct ble_mbuf_hdr *hdr); void ble_ll_sync_wfr_timer_exp(void); void ble_ll_sync_halt(void); +void ble_ll_sync_rmvd_from_sched(struct ble_ll_sync_sm *sm); uint32_t ble_ll_sync_get_event_end_time(void); diff --git a/nimble/controller/src/ble_ll_adv.c b/nimble/controller/src/ble_ll_adv.c index 62d1a1d26..f398582af 100644 --- a/nimble/controller/src/ble_ll_adv.c +++ b/nimble/controller/src/ble_ll_adv.c @@ -4775,10 +4775,10 @@ ble_ll_adv_sm_init(struct ble_ll_adv_sm *advsm) advsm->periodic_sync_active = 0; advsm->periodic_sync[0].sch.cb_arg = advsm; advsm->periodic_sync[0].sch.sched_cb = ble_ll_adv_sync_tx_start_cb; - advsm->periodic_sync[0].sch.sched_type = BLE_LL_SCHED_TYPE_SYNC; + advsm->periodic_sync[0].sch.sched_type = BLE_LL_SCHED_TYPE_PERIODIC; advsm->periodic_sync[1].sch.cb_arg = advsm; advsm->periodic_sync[1].sch.sched_cb = ble_ll_adv_sync_tx_start_cb; - advsm->periodic_sync[1].sch.sched_type = BLE_LL_SCHED_TYPE_SYNC; + advsm->periodic_sync[1].sch.sched_type = BLE_LL_SCHED_TYPE_PERIODIC; #endif #endif diff --git a/nimble/controller/src/ble_ll_sched.c b/nimble/controller/src/ble_ll_sched.c index 5110298bd..17e27aeaf 100644 --- a/nimble/controller/src/ble_ll_sched.c +++ b/nimble/controller/src/ble_ll_sched.c @@ -252,9 +252,12 @@ ble_ll_sched_conn_reschedule(struct ble_ll_conn_sm *connsm) ble_ll_scan_end_adv_evt((struct ble_ll_aux_data *)entry->cb_arg); break; #if MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_PERIODIC_ADV) - case BLE_LL_SCHED_TYPE_SYNC: + case BLE_LL_SCHED_TYPE_PERIODIC: ble_ll_adv_periodic_rmvd_from_sched((struct ble_ll_adv_sm *)entry->cb_arg); break; + case BLE_LL_SCHED_TYPE_SYNC: + ble_ll_sync_rmvd_from_sched((struct ble_ll_sync_sm *)entry->cb_arg); + break; #endif #endif default: diff --git a/nimble/controller/src/ble_ll_sync.c b/nimble/controller/src/ble_ll_sync.c index 52bfaab57..58ba20ec2 100644 --- a/nimble/controller/src/ble_ll_sync.c +++ b/nimble/controller/src/ble_ll_sync.c @@ -1637,6 +1637,16 @@ ble_ll_sync_receive_enable(const uint8_t *cmdbuf, uint8_t len) } #endif +/* + * Called when a sync scan event has been removed from the scheduler + * without being run. + */ +void +ble_ll_sync_rmvd_from_sched(struct ble_ll_sync_sm *sm) +{ + ble_ll_event_send(&sm->sync_ev_end); +} + void ble_ll_sync_reset(void) {