@@ -77,6 +77,49 @@ static void ticker_op_cb(uint32_t status, void *param);
7777static struct ll_adv_sync_set ll_adv_sync_pool [CONFIG_BT_CTLR_ADV_SYNC_SET ];
7878static void * adv_sync_free ;
7979
80+ static void adv_sync_pdu_init (struct pdu_adv * pdu , uint8_t ext_hdr_flags )
81+ {
82+ struct pdu_adv_com_ext_adv * com_hdr ;
83+ struct pdu_adv_ext_hdr * ext_hdr ;
84+ uint8_t * dptr ;
85+ uint8_t len ;
86+
87+ pdu -> type = PDU_ADV_TYPE_AUX_SYNC_IND ;
88+ pdu -> rfu = 0U ;
89+ pdu -> chan_sel = 0U ;
90+
91+ pdu -> tx_addr = 0U ;
92+ pdu -> rx_addr = 0U ;
93+
94+ com_hdr = & pdu -> adv_ext_ind ;
95+ /* Non-connectable and Non-scannable adv mode */
96+ com_hdr -> adv_mode = 0U ;
97+
98+ ext_hdr = & com_hdr -> ext_hdr ;
99+ * (uint8_t * )ext_hdr = ext_hdr_flags ;
100+ dptr = ext_hdr -> data ;
101+
102+ LL_ASSERT (!(ext_hdr_flags & (ULL_ADV_PDU_HDR_FIELD_ADVA |
103+ ULL_ADV_PDU_HDR_FIELD_TARGETA |
104+ ULL_ADV_PDU_HDR_FIELD_ADI |
105+ ULL_ADV_PDU_HDR_FIELD_SYNC_INFO )));
106+
107+ if (ext_hdr_flags & ULL_ADV_PDU_HDR_FIELD_CTE_INFO ) {
108+ dptr += sizeof (struct pdu_cte_info );
109+ }
110+ if (ext_hdr_flags & ULL_ADV_PDU_HDR_FIELD_AUX_PTR ) {
111+ dptr += sizeof (struct pdu_adv_aux_ptr );
112+ }
113+ if (ext_hdr_flags & ULL_ADV_PDU_HDR_FIELD_TX_POWER ) {
114+ dptr += sizeof (uint8_t );
115+ }
116+
117+ /* Calc tertiary PDU len */
118+ len = ull_adv_aux_hdr_len_calc (com_hdr , & dptr );
119+ ull_adv_aux_hdr_len_fill (com_hdr , len );
120+
121+ pdu -> len = len ;
122+ }
80123uint8_t ll_adv_sync_param_set (uint8_t handle , uint16_t interval , uint16_t flags )
81124{
82125 struct lll_adv_sync * lll_sync ;
@@ -91,12 +134,8 @@ uint8_t ll_adv_sync_param_set(uint8_t handle, uint16_t interval, uint16_t flags)
91134
92135 lll_sync = adv -> lll .sync ;
93136 if (!lll_sync ) {
94- struct pdu_adv_com_ext_adv * ter_com_hdr ;
95- struct pdu_adv_ext_hdr * ter_hdr ;
96137 struct pdu_adv * ter_pdu ;
97138 struct lll_adv * lll ;
98- uint8_t * ter_dptr ;
99- uint8_t ter_len ;
100139 int err ;
101140
102141 sync = sync_acquire ();
@@ -135,26 +174,7 @@ uint8_t ll_adv_sync_param_set(uint8_t handle, uint16_t interval, uint16_t flags)
135174 sync -> is_started = 0U ;
136175
137176 ter_pdu = lll_adv_sync_data_peek (lll_sync , NULL );
138- ter_pdu -> type = PDU_ADV_TYPE_AUX_SYNC_IND ;
139- ter_pdu -> rfu = 0U ;
140- ter_pdu -> chan_sel = 0U ;
141-
142- ter_pdu -> tx_addr = 0U ;
143- ter_pdu -> rx_addr = 0U ;
144-
145- ter_com_hdr = (void * )& ter_pdu -> adv_ext_ind ;
146- ter_hdr = (void * )ter_com_hdr -> ext_hdr_adv_data ;
147- ter_dptr = ter_hdr -> data ;
148- * (uint8_t * )ter_hdr = 0U ;
149-
150- /* Non-connectable and Non-scannable adv mode */
151- ter_com_hdr -> adv_mode = 0U ;
152-
153- /* Calc tertiary PDU len */
154- ter_len = ull_adv_aux_hdr_len_calc (ter_com_hdr , & ter_dptr );
155- ull_adv_aux_hdr_len_fill (ter_com_hdr , ter_len );
156-
157- ter_pdu -> len = ter_len ;
177+ adv_sync_pdu_init (ter_pdu , 0 );
158178 } else {
159179 sync = HDR_LLL2ULL (lll_sync );
160180 }
0 commit comments