@@ -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