38
38
39
39
BLEScanner::BLEScanner (void )
40
40
{
41
- _runnning = false ;
41
+ _runnning = false ;
42
42
_start_if_disconnect = true ;
43
43
44
- _filter_rssi = INT8_MIN;
45
- _filter_msd_en = false ;
46
- _filter_msd_id = 0 ; // Irrelevant
47
- _filter_uuid = NULL ;
44
+ _filter_rssi = INT8_MIN;
45
+
46
+ _filter_msd_en = false ;
47
+ _filter_msd_id = 0 ; // Irrelevant
48
+
49
+ _filter_uuid_count = 0 ;
50
+ _filter_uuid = NULL ;
48
51
49
- _rx_cb = NULL ;
50
- _stop_cb = NULL ;
52
+ _rx_cb = NULL ;
53
+ _stop_cb = NULL ;
51
54
52
55
_param = (ble_gap_scan_params_t ) {
53
56
.active = 0 ,
@@ -236,6 +239,18 @@ void BLEScanner::filterUuid(BLEUuid ble_uuid)
236
239
(*_filter_uuid) = ble_uuid;
237
240
}
238
241
242
+ void BLEScanner::filterUuid (BLEUuid ble_uuid[], uint8_t count)
243
+ {
244
+ if (_filter_uuid_count) delete[] _filter_uuid;
245
+
246
+ _filter_uuid_count = count;
247
+ if (count == 0 ) return ;
248
+
249
+ _filter_uuid = new BLEUuid[count];
250
+
251
+ for (uint8_t i=0 ; i<count; i++) _filter_uuid[i] = ble_uuid[i];
252
+ }
253
+
239
254
void BLEScanner::filterMSD (uint16_t manuf_id)
240
255
{
241
256
_filter_msd_en = true ;
@@ -244,13 +259,15 @@ void BLEScanner::filterMSD(uint16_t manuf_id)
244
259
245
260
void BLEScanner::clearFilters (void )
246
261
{
247
- _filter_rssi = INT8_MIN;
262
+ _filter_rssi = INT8_MIN;
248
263
_filter_msd_en = false ;
249
264
250
- if ( _filter_uuid )
265
+ if ( _filter_uuid_count )
251
266
{
252
- delete _filter_uuid;
267
+ delete[] _filter_uuid;
253
268
_filter_uuid = NULL ;
269
+
270
+ _filter_uuid_count = 0 ;
254
271
}
255
272
256
273
}
@@ -271,7 +288,17 @@ void BLEScanner::_eventHandler(ble_evt_t* evt)
271
288
if ( _filter_rssi > evt_report->rssi ) break ;
272
289
273
290
// filter by uuid
274
- if ( _filter_uuid && !checkReportForUuid (evt_report, *_filter_uuid) ) break ;
291
+ if ( _filter_uuid_count )
292
+ {
293
+ uint8_t i;
294
+ for (i=0 ; i<_filter_uuid_count; i++)
295
+ {
296
+ if ( checkReportForUuid (evt_report, _filter_uuid[i]) ) break ;
297
+ }
298
+
299
+ // If there is no matched UUID in the list --> filter failed
300
+ if ( i == _filter_uuid_count ) break ;
301
+ }
275
302
276
303
// filter by MSD if present
277
304
if ( _filter_msd_en )
0 commit comments