@@ -777,12 +777,15 @@ void ull_filter_rpa_update(bool timeout)
777
777
778
778
if (timeout ) {
779
779
#if defined(CONFIG_BT_BROADCASTER )
780
- struct ll_adv_set * adv ;
780
+ uint8_t handle ;
781
781
782
- /* TODO: foreach adv set */
783
- adv = ull_adv_is_enabled_get (0 );
784
- if (adv ) {
785
- rpa_adv_refresh (adv );
782
+ for (handle = 0U ; handle < BT_CTLR_ADV_SET ; handle ++ ) {
783
+ struct ll_adv_set * adv ;
784
+
785
+ adv = ull_adv_is_enabled_get (handle );
786
+ if (adv ) {
787
+ rpa_adv_refresh (adv );
788
+ }
786
789
}
787
790
#endif
788
791
}
@@ -1131,26 +1134,101 @@ static void rl_update(void)
1131
1134
#if defined(CONFIG_BT_BROADCASTER )
1132
1135
static void rpa_adv_refresh (struct ll_adv_set * adv )
1133
1136
{
1137
+ struct lll_adv_aux * lll_aux ;
1134
1138
struct pdu_adv * prev ;
1139
+ struct lll_adv * lll ;
1135
1140
struct pdu_adv * pdu ;
1136
- uint8_t idx ;
1141
+ uint8_t pri_idx ;
1142
+
1143
+ #if defined(CONFIG_BT_CTLR_ADV_EXT )
1144
+ uint8_t sec_idx ;
1145
+ #endif /* CONFIG_BT_CTLR_ADV_EXT */
1137
1146
1138
1147
if (adv -> own_addr_type != BT_ADDR_LE_PUBLIC_ID &&
1139
1148
adv -> own_addr_type != BT_ADDR_LE_RANDOM_ID ) {
1140
1149
return ;
1141
1150
}
1142
1151
1143
- if (adv -> lll .rl_idx >= ARRAY_SIZE (rl )) {
1152
+ lll = & adv -> lll ;
1153
+ if (lll -> rl_idx >= ARRAY_SIZE (rl )) {
1144
1154
return ;
1145
1155
}
1146
1156
1147
- prev = lll_adv_data_peek (& adv -> lll );
1148
- pdu = lll_adv_data_alloc (& adv -> lll , & idx );
1149
1157
1150
- (void )memcpy (pdu , prev , PDU_AC_LL_HEADER_SIZE + prev -> len );
1151
- ull_adv_pdu_update_addrs (adv , pdu );
1158
+ pri_idx = UINT8_MAX ;
1159
+ lll_aux = NULL ;
1160
+ pdu = NULL ;
1161
+ prev = lll_adv_data_peek (lll );
1162
+
1163
+ if (false) {
1164
+
1165
+ #if defined(CONFIG_BT_CTLR_ADV_EXT )
1166
+ } else if (prev -> type == PDU_ADV_TYPE_EXT_IND ) {
1167
+ struct pdu_adv_com_ext_adv * pri_com_hdr ;
1168
+ struct pdu_adv_ext_hdr pri_hdr_flags ;
1169
+ struct pdu_adv_ext_hdr * pri_hdr ;
1170
+
1171
+ /* Pick the primary PDU header flags */
1172
+ pri_com_hdr = (void * )& prev -> adv_ext_ind ;
1173
+ pri_hdr = (void * )pri_com_hdr -> ext_hdr_adv_data ;
1174
+ if (pri_com_hdr -> ext_hdr_len ) {
1175
+ pri_hdr_flags = * pri_hdr ;
1176
+ } else {
1177
+ * (uint8_t * )& pri_hdr_flags = 0U ;
1178
+ }
1179
+
1180
+ /* AdvA, in primary or auxiliary PDU */
1181
+ if (pri_hdr_flags .adv_addr ) {
1182
+ pdu = lll_adv_data_alloc (lll , & pri_idx );
1183
+ (void )memcpy (pdu , prev , (PDU_AC_LL_HEADER_SIZE +
1184
+ prev -> len ));
1185
+
1186
+ #if (CONFIG_BT_CTLR_ADV_AUX_SET > 0 )
1187
+ } else if (pri_hdr_flags .aux_ptr ) {
1188
+ struct pdu_adv_com_ext_adv * sec_com_hdr ;
1189
+ struct pdu_adv_ext_hdr sec_hdr_flags ;
1190
+ struct pdu_adv_ext_hdr * sec_hdr ;
1191
+ struct pdu_adv * sec_pdu ;
1192
+
1193
+ lll_aux = lll -> aux ;
1194
+ sec_pdu = lll_adv_aux_data_peek (lll_aux );
1195
+
1196
+ sec_com_hdr = (void * )& sec_pdu -> adv_ext_ind ;
1197
+ sec_hdr = (void * )sec_com_hdr -> ext_hdr_adv_data ;
1198
+ if (sec_com_hdr -> ext_hdr_len ) {
1199
+ sec_hdr_flags = * sec_hdr ;
1200
+ } else {
1201
+ * (uint8_t * )& sec_hdr_flags = 0U ;
1202
+ }
1203
+
1204
+ if (sec_hdr_flags .adv_addr ) {
1205
+ pdu = lll_adv_aux_data_alloc (lll_aux , & sec_idx );
1206
+ (void )memcpy (pdu , sec_pdu ,
1207
+ (PDU_AC_LL_HEADER_SIZE +
1208
+ sec_pdu -> len ));
1209
+ }
1210
+ #endif /* (CONFIG_BT_CTLR_ADV_AUX_SET > 0) */
1211
+ }
1212
+ #endif /* CONFIG_BT_CTLR_ADV_EXT */
1213
+
1214
+ } else {
1215
+ pdu = lll_adv_data_alloc (lll , & pri_idx );
1216
+ (void )memcpy (pdu , prev , (PDU_AC_LL_HEADER_SIZE + prev -> len ));
1217
+ }
1218
+
1219
+ if (pdu ) {
1220
+ ull_adv_pdu_update_addrs (adv , pdu );
1221
+
1222
+ if (pri_idx != UINT8_MAX ) {
1223
+ lll_adv_data_enqueue (lll , pri_idx );
1224
+
1225
+ #if defined(CONFIG_BT_CTLR_ADV_EXT )
1226
+ } else {
1227
+ lll_adv_aux_data_enqueue (lll_aux , sec_idx );
1228
+ #endif /* CONFIG_BT_CTLR_ADV_EXT */
1152
1229
1153
- lll_adv_data_enqueue (& adv -> lll , idx );
1230
+ }
1231
+ }
1154
1232
}
1155
1233
#endif /* CONFIG_BT_BROADCASTER */
1156
1234
0 commit comments