@@ -174,6 +174,9 @@ ble_error_t nRF5xGap::startAdvertising(const GapAdvertisingParams ¶ms)
174
174
return BLE_ERROR_PARAM_OUT_OF_RANGE;
175
175
}
176
176
uint32_t err;
177
+
178
+ ble_gap_adv_params_t adv_para = {0 };
179
+
177
180
#if (NRF_SD_BLE_API_VERSION <= 2)
178
181
/* Allocate the stack's whitelist statically */
179
182
ble_gap_whitelist_t whitelist;
@@ -192,22 +195,21 @@ ble_error_t nRF5xGap::startAdvertising(const GapAdvertisingParams ¶ms)
192
195
return error;
193
196
}
194
197
}
198
+
199
+ adv_para.p_whitelist = &whitelist;
195
200
#else
196
- err = updateWhiteAndIdentityListInStack ();
201
+ err = updateWhiteAndIdentityListInStack (nRF5xGap::avdvertising_purpose );
197
202
198
203
if (err != BLE_ERROR_NONE) {
199
204
return (ble_error_t )err;
200
205
}
201
206
#endif
202
207
/* Start Advertising */
203
- ble_gap_adv_params_t adv_para = { 0 };
208
+
204
209
205
210
adv_para.type = params.getAdvertisingType ();
206
211
adv_para.p_peer_addr = NULL ; // Undirected advertisement
207
212
adv_para.fp = advertisingPolicyMode;
208
- #if (NRF_SD_BLE_API_VERSION <= 2)
209
- adv_para.p_whitelist = &whitelist;
210
- #endif
211
213
adv_para.interval = params.getIntervalInADVUnits (); // advertising interval (in units of 0.625 ms)
212
214
adv_para.timeout = params.getTimeout ();
213
215
@@ -227,6 +229,9 @@ ble_error_t nRF5xGap::startAdvertising(const GapAdvertisingParams ¶ms)
227
229
#if !defined(TARGET_MCU_NRF51_16K_S110) && !defined(TARGET_MCU_NRF51_32K_S110)
228
230
ble_error_t nRF5xGap::startRadioScan (const GapScanningParams &scanningParams)
229
231
{
232
+
233
+ ble_gap_scan_params_t scanParams;
234
+
230
235
#if (NRF_SD_BLE_API_VERSION <= 2)
231
236
/* Allocate the stack's whitelist statically */
232
237
ble_gap_whitelist_t whitelist;
@@ -245,26 +250,22 @@ ble_error_t nRF5xGap::startRadioScan(const GapScanningParams &scanningParams)
245
250
return error;
246
251
}
247
252
}
253
+
254
+ scanParams.selective = scanningPolicyMode; /* *< If 1, ignore unknown devices (non whitelisted). */
255
+ scanParams.p_whitelist = &whitelist; /* *< Pointer to whitelist, NULL if none is given. */
248
256
#else
249
- uint32_t err = updateWhiteAndIdentityListInStack ();
257
+ uint32_t err = updateWhiteAndIdentityListInStack (nRF5xGap::scan_connect_purpose );
250
258
251
259
if (err != BLE_ERROR_NONE) {
252
260
return (ble_error_t )err;
253
261
}
254
- #endif
255
-
256
- ble_gap_scan_params_t scanParams;
257
262
258
- scanParams.active = scanningParams.getActiveScanning (); /* *< If 1, perform active scanning (scan requests). */
259
- #if (NRF_SD_BLE_API_VERSION <= 2)
260
- scanParams.selective = scanningPolicyMode; /* *< If 1, ignore unknown devices (non whitelisted). */
261
- scanParams.p_whitelist = &whitelist; /* *< Pointer to whitelist, NULL if none is given. */
262
- #else
263
263
scanParams.use_whitelist = scanningPolicyMode;
264
264
scanParams.adv_dir_report = 0 ;
265
-
266
-
267
265
#endif
266
+
267
+ scanParams.active = scanningParams.getActiveScanning (); /* *< If 1, perform active scanning (scan requests). */
268
+
268
269
scanParams.interval = scanningParams.getInterval (); /* *< Scan interval between 0x0004 and 0x4000 in 0.625ms units (2.5ms to 10.24s). */
269
270
scanParams.window = scanningParams.getWindow (); /* *< Scan window between 0x0004 and 0x4000 in 0.625ms units (2.5ms to 10.24s). */
270
271
scanParams.timeout = scanningParams.getTimeout (); /* *< Scan timeout between 0x0001 and 0xFFFF in seconds, 0x0000 disables timeout. */
@@ -333,6 +334,8 @@ ble_error_t nRF5xGap::connect(const Address_t peerAddr,
333
334
connParams.conn_sup_timeout = 600 ;
334
335
}
335
336
337
+ ble_gap_scan_params_t scanParams;
338
+
336
339
#if (NRF_SD_BLE_API_VERSION <= 2)
337
340
/* Allocate the stack's whitelist statically */
338
341
ble_gap_whitelist_t whitelist;
@@ -351,23 +354,17 @@ ble_error_t nRF5xGap::connect(const Address_t peerAddr,
351
354
return error;
352
355
}
353
356
}
357
+
358
+ scanParams.selective = scanningPolicyMode; /* *< If 1, ignore unknown devices (non whitelisted). */
359
+ scanParams.p_whitelist = &whitelist; /* *< Pointer to whitelist, NULL if none is given. */
354
360
#else
355
- uint32_t err = updateWhiteAndIdentityListInStack ();
361
+ uint32_t err = updateWhiteAndIdentityListInStack (nRF5xGap::scan_connect_purpose );
356
362
357
363
if (err != BLE_ERROR_NONE) {
358
364
return (ble_error_t )err;
359
365
}
360
366
#endif
361
367
362
- ble_gap_scan_params_t scanParams;
363
- #if (NRF_SD_BLE_API_VERSION <= 2)
364
- scanParams.selective = scanningPolicyMode; /* *< If 1, ignore unknown devices (non whitelisted). */
365
- scanParams.p_whitelist = &whitelist; /* *< Pointer to whitelist, NULL if none is given. */
366
- #else
367
- scanParams.use_whitelist = scanningPolicyMode;
368
- scanParams.adv_dir_report = 0 ;
369
- #endif
370
-
371
368
if (scanParamsIn != NULL ) {
372
369
scanParams.active = scanParamsIn->getActiveScanning (); /* *< If 1, perform active scanning (scan requests). */
373
370
scanParams.interval = scanParamsIn->getInterval (); /* *< Scan interval between 0x0004 and 0x4000 in 0.625ms units (2.5ms to 10.24s). */
@@ -1020,9 +1017,12 @@ ble_error_t nRF5xGap::generateStackWhitelist(ble_gap_whitelist_t &whitelist)
1020
1017
#if (NRF_SD_BLE_API_VERSION >= 3)
1021
1018
1022
1019
/* *
1023
- * Fuction for preparing setting of the whitelist-feature and identiti-reseolv-feature (privacy).
1020
+ * Fuction for preparing setting of the whitelist-feature and identiti-reseolv-feature (privacy) for SoftDevice .
1024
1021
*
1025
- * Created setting are intended to be used to configure SoftDevices.
1022
+ * Gap::setWhitelist provide base for prepartion of this settings.
1023
+ * This funtion matches resolvabele addreses (pased by Gap::setWhitelist) to IRK datas in boonds table.
1024
+ * Therefore resovable addresses instead of being passed to the whitelist (intended to be passed to Softdevice)
1025
+ * are passed to the identities list (intended to be passed to Softdevice).
1026
1026
*
1027
1027
* @param[out] gapAdrHelper Reference to the struct for storing settings.
1028
1028
*/
@@ -1158,13 +1158,21 @@ ble_error_t nRF5xGap::apllyWhiteIdentityList(GapWhiteAndIdentityList_t &gapAdrHe
1158
1158
}
1159
1159
}
1160
1160
1161
- ble_error_t nRF5xGap::updateWhiteAndIdentityListInStack (void )
1161
+ ble_error_t nRF5xGap::updateWhiteAndIdentityListInStack (whiteAndIdentityListPurpose_t purpose )
1162
1162
{
1163
1163
GapWhiteAndIdentityList_t whiteAndIdentityList;
1164
1164
uint32_t err;
1165
+ bool provide_settings;
1166
+
1167
+ if (purpose == nRF5xGap::avdvertising_purpose) {
1168
+ provide_settings = (advertisingPolicyMode != Gap::ADV_POLICY_IGNORE_WHITELIST) ? true : false ;
1169
+ } else { // it must be nRF5xGap::scan_connect_purpose
1170
+ provide_settings = (scanningPolicyMode != Gap::SCAN_POLICY_IGNORE_WHITELIST) ? true : false ;
1171
+ }
1172
+
1165
1173
1166
1174
/* Add missing IRKs to nRF5xGap's whitelist from the bond table held by the Peer Manager */
1167
- if (advertisingPolicyMode != Gap::ADV_POLICY_IGNORE_WHITELIST ) {
1175
+ if (provide_settings ) {
1168
1176
err = getStackWhiteIdentityList (whiteAndIdentityList);
1169
1177
1170
1178
if (err != BLE_ERROR_NONE) {
0 commit comments