Skip to content

Commit 2f79e78

Browse files
committed
add multiple uuid filter
1 parent c9d0359 commit 2f79e78

File tree

2 files changed

+42
-11
lines changed

2 files changed

+42
-11
lines changed

libraries/Bluefruit52Lib/src/BLEScanner.cpp

Lines changed: 38 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -38,16 +38,19 @@
3838

3939
BLEScanner::BLEScanner(void)
4040
{
41-
_runnning = false;
41+
_runnning = false;
4242
_start_if_disconnect = true;
4343

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;
4851

49-
_rx_cb = NULL;
50-
_stop_cb = NULL;
52+
_rx_cb = NULL;
53+
_stop_cb = NULL;
5154

5255
_param = (ble_gap_scan_params_t) {
5356
.active = 0,
@@ -236,6 +239,18 @@ void BLEScanner::filterUuid(BLEUuid ble_uuid)
236239
(*_filter_uuid) = ble_uuid;
237240
}
238241

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+
239254
void BLEScanner::filterMSD(uint16_t manuf_id)
240255
{
241256
_filter_msd_en = true;
@@ -244,13 +259,15 @@ void BLEScanner::filterMSD(uint16_t manuf_id)
244259

245260
void BLEScanner::clearFilters(void)
246261
{
247-
_filter_rssi = INT8_MIN;
262+
_filter_rssi = INT8_MIN;
248263
_filter_msd_en = false;
249264

250-
if ( _filter_uuid )
265+
if ( _filter_uuid_count )
251266
{
252-
delete _filter_uuid;
267+
delete[] _filter_uuid;
253268
_filter_uuid = NULL;
269+
270+
_filter_uuid_count = 0;
254271
}
255272

256273
}
@@ -271,7 +288,17 @@ void BLEScanner::_eventHandler(ble_evt_t* evt)
271288
if ( _filter_rssi > evt_report->rssi ) break;
272289

273290
// 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+
}
275302

276303
// filter by MSD if present
277304
if ( _filter_msd_en )

libraries/Bluefruit52Lib/src/BLEScanner.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,9 @@ class BLEScanner
6060

6161
void filterRssi(int8_t min_rssi);
6262
void filterMSD(uint16_t manuf_id);
63+
6364
void filterUuid(BLEUuid ble_uuid);
65+
void filterUuid(BLEUuid ble_uuid[], uint8_t count);
6466

6567
void clearFilters(void);
6668

@@ -93,7 +95,9 @@ class BLEScanner
9395
int8_t _filter_rssi;
9496
bool _filter_msd_en; // since all value of manufacturer id is valid (0-FFFF)
9597
uint16_t _filter_msd_id;
98+
9699
BLEUuid* _filter_uuid;
100+
uint8_t _filter_uuid_count;
97101

98102
rx_callback_t _rx_cb;
99103
stop_callback_t _stop_cb;

0 commit comments

Comments
 (0)