@@ -95,29 +95,15 @@ void lll_peripheral_iso_prepare(void *param)
9595{
9696 struct lll_conn_iso_group * cig_lll ;
9797 struct lll_prepare_param * p ;
98- uint16_t elapsed ;
9998 int err ;
10099
101100 /* Initiate HF clock start up */
102101 err = lll_hfclock_on ();
103102 LL_ASSERT (err >= 0 );
104103
105- /* Instants elapsed */
106104 p = param ;
107- elapsed = p -> lazy + 1U ;
108105
109- /* Save the (latency + 1) for use in event and/or supervision timeout */
110106 cig_lll = p -> param ;
111- cig_lll -> latency_prepare += elapsed ;
112-
113- /* Accumulate window widening */
114- cig_lll -> window_widening_prepare_us_frac +=
115- cig_lll -> window_widening_periodic_us_frac * elapsed ;
116- if (cig_lll -> window_widening_prepare_us_frac >
117- EVENT_US_TO_US_FRAC (cig_lll -> window_widening_max_us )) {
118- cig_lll -> window_widening_prepare_us_frac =
119- EVENT_US_TO_US_FRAC (cig_lll -> window_widening_max_us );
120- }
121107
122108 /* Invoke common pipeline handling of prepare */
123109 err = lll_prepare (lll_is_abort_cb , abort_cb , prepare_cb , 0U , param );
@@ -152,7 +138,6 @@ static int prepare_cb(struct lll_prepare_param *p)
152138 memq_link_t * link ;
153139 uint32_t start_us ;
154140 uint32_t hcto ;
155- uint16_t lazy ;
156141 uint32_t ret ;
157142 uint8_t phy ;
158143 int err = 0 ;
@@ -190,14 +175,23 @@ static int prepare_cb(struct lll_prepare_param *p)
190175 & data_chan_prn_s ,
191176 & data_chan_remap_idx );
192177
193- /* Store the current event latency */
194- cig_lll -> latency_event = cig_lll -> latency_prepare ;
195- lazy = cig_lll -> latency_prepare - 1U ;
178+ /* Calculate the current event latency */
179+ cig_lll -> lazy_prepare = p -> lazy ;
180+ cig_lll -> latency_event = cig_lll -> latency_prepare + cig_lll -> lazy_prepare ;
196181
197182 /* Reset accumulated latencies */
198183 cig_lll -> latency_prepare = 0U ;
199184
200- /* current window widening */
185+ /* Accumulate window widening */
186+ cig_lll -> window_widening_prepare_us_frac +=
187+ cig_lll -> window_widening_periodic_us_frac * (cig_lll -> lazy_prepare + 1U );
188+ if (cig_lll -> window_widening_prepare_us_frac >
189+ EVENT_US_TO_US_FRAC (cig_lll -> window_widening_max_us )) {
190+ cig_lll -> window_widening_prepare_us_frac =
191+ EVENT_US_TO_US_FRAC (cig_lll -> window_widening_max_us );
192+ }
193+
194+ /* Current window widening */
201195 cig_lll -> window_widening_event_us_frac +=
202196 cig_lll -> window_widening_prepare_us_frac ;
203197 cig_lll -> window_widening_prepare_us_frac = 0 ;
@@ -210,7 +204,7 @@ static int prepare_cb(struct lll_prepare_param *p)
210204 se_curr = 1U ;
211205
212206 /* Adjust sn and nesn for skipped CIG events */
213- payload_count_lazy (cis_lll , lazy );
207+ payload_count_lazy (cis_lll , cig_lll -> lazy_prepare );
214208
215209 /* Start setting up of Radio h/w */
216210 radio_reset ();
@@ -381,7 +375,7 @@ static int prepare_cb(struct lll_prepare_param *p)
381375 }
382376
383377 /* Adjust sn and nesn for skipped CIG events */
384- payload_count_lazy (cis_lll , lazy );
378+ payload_count_lazy (cis_lll , cig_lll -> lazy_prepare );
385379
386380 /* Adjust sn and nesn for canceled events */
387381 if (err ) {
@@ -405,13 +399,13 @@ static int prepare_cb(struct lll_prepare_param *p)
405399
406400static void abort_cb (struct lll_prepare_param * prepare_param , void * param )
407401{
402+ struct lll_conn_iso_group * cig_lll ;
408403 int err ;
409404
410405 /* NOTE: This is not a prepare being cancelled */
411406 if (!prepare_param ) {
412407 struct lll_conn_iso_stream * next_cis_lll ;
413408 struct lll_conn_iso_stream * cis_lll ;
414- struct lll_conn_iso_group * cig_lll ;
415409
416410 cis_lll = ull_conn_iso_lll_stream_get (cis_handle_curr );
417411 cig_lll = param ;
@@ -442,6 +436,22 @@ static void abort_cb(struct lll_prepare_param *prepare_param, void *param)
442436 err = lll_hfclock_off ();
443437 LL_ASSERT (err >= 0 );
444438
439+ /* Get reference to CIG LLL context */
440+ cig_lll = prepare_param -> param ;
441+
442+ /* Accumulate the latency as event is aborted while being in pipeline */
443+ cig_lll -> lazy_prepare = prepare_param -> lazy ;
444+ cig_lll -> latency_prepare += (cig_lll -> lazy_prepare + 1U );
445+
446+ /* Accumulate window widening */
447+ cig_lll -> window_widening_prepare_us_frac +=
448+ cig_lll -> window_widening_periodic_us_frac * (cig_lll -> lazy_prepare + 1U );
449+ if (cig_lll -> window_widening_prepare_us_frac >
450+ EVENT_US_TO_US_FRAC (cig_lll -> window_widening_max_us )) {
451+ cig_lll -> window_widening_prepare_us_frac =
452+ EVENT_US_TO_US_FRAC (cig_lll -> window_widening_max_us );
453+ }
454+
445455 lll_done (param );
446456}
447457
0 commit comments