@@ -76,6 +76,51 @@ static void ticker_op_cb(uint32_t status, void *param);
7676static struct ll_adv_sync_set ll_adv_sync_pool [CONFIG_BT_CTLR_ADV_SYNC_SET ];
7777static void * adv_sync_free ;
7878
79+ static uint8_t adv_sync_pdu_init (struct pdu_adv * pdu , uint8_t ext_hdr_flags )
80+ {
81+ struct pdu_adv_com_ext_adv * com_hdr ;
82+ struct pdu_adv_ext_hdr * ext_hdr ;
83+ uint8_t * dptr ;
84+ uint8_t len ;
85+
86+ pdu -> type = PDU_ADV_TYPE_AUX_SYNC_IND ;
87+ pdu -> rfu = 0U ;
88+ pdu -> chan_sel = 0U ;
89+
90+ pdu -> tx_addr = 0U ;
91+ pdu -> rx_addr = 0U ;
92+
93+ com_hdr = & pdu -> adv_ext_ind ;
94+ /* Non-connectable and Non-scannable adv mode */
95+ com_hdr -> adv_mode = 0U ;
96+
97+ ext_hdr = & com_hdr -> ext_hdr ;
98+ * (uint8_t * )ext_hdr = ext_hdr_flags ;
99+ dptr = ext_hdr -> data ;
100+
101+ LL_ASSERT (!(ext_hdr_flags & (ULL_ADV_PDU_HDR_FIELD_ADVA |
102+ ULL_ADV_PDU_HDR_FIELD_TARGETA |
103+ ULL_ADV_PDU_HDR_FIELD_ADI |
104+ ULL_ADV_PDU_HDR_FIELD_SYNC_INFO )));
105+
106+ if (ext_hdr_flags & ULL_ADV_PDU_HDR_FIELD_CTE_INFO ) {
107+ dptr += sizeof (struct pdu_cte_info );
108+ }
109+ if (ext_hdr_flags & ULL_ADV_PDU_HDR_FIELD_AUX_PTR ) {
110+ dptr += sizeof (struct pdu_adv_aux_ptr );
111+ }
112+ if (ext_hdr_flags & ULL_ADV_PDU_HDR_FIELD_TX_POWER ) {
113+ dptr += sizeof (uint8_t );
114+ }
115+
116+ /* Calc tertiary PDU len */
117+ len = ull_adv_aux_hdr_len_calc (com_hdr , & dptr );
118+ ull_adv_aux_hdr_len_fill (com_hdr , len );
119+
120+ pdu -> len = len ;
121+
122+ return 0 ;
123+ }
79124uint8_t ll_adv_sync_param_set (uint8_t handle , uint16_t interval , uint16_t flags )
80125{
81126 struct lll_adv_sync * lll_sync ;
@@ -90,12 +135,8 @@ uint8_t ll_adv_sync_param_set(uint8_t handle, uint16_t interval, uint16_t flags)
90135
91136 lll_sync = adv -> lll .sync ;
92137 if (!lll_sync ) {
93- struct pdu_adv_com_ext_adv * ter_com_hdr ;
94- struct pdu_adv_ext_hdr * ter_hdr ;
95138 struct pdu_adv * ter_pdu ;
96139 struct lll_adv * lll ;
97- uint8_t * ter_dptr ;
98- uint8_t ter_len ;
99140 int err ;
100141
101142 sync = sync_acquire ();
@@ -134,26 +175,7 @@ uint8_t ll_adv_sync_param_set(uint8_t handle, uint16_t interval, uint16_t flags)
134175 sync -> is_started = 0U ;
135176
136177 ter_pdu = lll_adv_sync_data_peek (lll_sync , NULL );
137- ter_pdu -> type = PDU_ADV_TYPE_AUX_SYNC_IND ;
138- ter_pdu -> rfu = 0U ;
139- ter_pdu -> chan_sel = 0U ;
140-
141- ter_pdu -> tx_addr = 0U ;
142- ter_pdu -> rx_addr = 0U ;
143-
144- ter_com_hdr = (void * )& ter_pdu -> adv_ext_ind ;
145- ter_hdr = (void * )ter_com_hdr -> ext_hdr_adv_data ;
146- ter_dptr = ter_hdr -> data ;
147- * (uint8_t * )ter_hdr = 0U ;
148-
149- /* Non-connectable and Non-scannable adv mode */
150- ter_com_hdr -> adv_mode = 0U ;
151-
152- /* Calc tertiary PDU len */
153- ter_len = ull_adv_aux_hdr_len_calc (ter_com_hdr , & ter_dptr );
154- ull_adv_aux_hdr_len_fill (ter_com_hdr , ter_len );
155-
156- ter_pdu -> len = ter_len ;
178+ adv_sync_pdu_init (ter_pdu , 0 );
157179 } else {
158180 sync = (void * )HDR_LLL2EVT (lll_sync );
159181 }
0 commit comments