@@ -1341,15 +1341,32 @@ bool BLEDeviceManager::deviceInDuplicateFilterBuffer(const bt_addr_le_t* addr)
1341
1341
return retVal;
1342
1342
}
1343
1343
1344
- void BLEDeviceManager::updateDuplicateFilter (const bt_addr_le_t * addr)
1344
+ void BLEDeviceManager::updateDuplicateFilter (const bt_addr_le_t * addr, uint8_t scanRespLength )
1345
1345
{
1346
1346
uint8_t i = (_duplicate_filter_header + 1 ) % (ARRAY_SIZE (_peer_duplicate_address_buffer));
1347
1347
if (deviceInDuplicateFilterBuffer (addr))
1348
1348
{
1349
+ uint8_t j = 0 ;
1350
+ for (j = 0 ;
1351
+ j < (sizeof (_peer_duplicate_address_buffer) / sizeof (bt_addr_le_t ));
1352
+ j++)
1353
+ {
1354
+ if (0 == bt_addr_le_cmp (addr, &_peer_duplicate_address_buffer[j]))
1355
+ {
1356
+ if (_peer_duplicate_device_scanresp_len[j] != scanRespLength)
1357
+ {
1358
+ // Clear the filter
1359
+ memset (&_peer_duplicate_address_buffer[j], 0 , sizeof (_peer_duplicate_address_buffer[j]));
1360
+ _peer_duplicate_device_scanresp_len[j] = 0 ;
1361
+ }
1362
+ break ;
1363
+ }
1364
+ }
1349
1365
return ;
1350
1366
}
1351
1367
bt_addr_le_copy (&_peer_duplicate_address_buffer[_duplicate_filter_header],
1352
1368
addr);
1369
+ _peer_duplicate_device_scanresp_len[_duplicate_filter_header] = scanRespLength;
1353
1370
if (i == _duplicate_filter_tail)
1354
1371
{
1355
1372
_duplicate_filter_tail = (_duplicate_filter_tail + 1 ) % (ARRAY_SIZE (_peer_duplicate_address_buffer));
@@ -1402,7 +1419,7 @@ BLEDevice BLEDeviceManager::available()
1402
1419
_peer_adv_mill[index ] -= 2000 ; // Set it as expired
1403
1420
if (_adv_duplicate_filter_enabled)
1404
1421
{
1405
- updateDuplicateFilter (temp);
1422
+ updateDuplicateFilter (temp, _available_for_connect_peripheral_scan_rsp_data_len );
1406
1423
}
1407
1424
}
1408
1425
}
@@ -1504,6 +1521,10 @@ bool BLEDeviceManager::setScanRespBuffer(const bt_addr_le_t* bt_addr,
1504
1521
// _peer_adv_rssi[index] = rssi;
1505
1522
// Update the timestamp
1506
1523
_peer_adv_mill[index ] = timestamp;
1524
+ if (_adv_duplicate_filter_enabled && deviceInDuplicateFilterBuffer (temp))
1525
+ {
1526
+ updateDuplicateFilter (temp, data_len);
1527
+ }
1507
1528
retval = true ;
1508
1529
}
1509
1530
0 commit comments