Skip to content

Commit 001de9d

Browse files
committed
Fix GIT 497 CurieBLE: SensorTag example no longer works out of the box
Add mechanism to promise the scan response can be returned. Changed Files BLEDeviceManager.cpp - Change the API to return the device when scan response changed BLEDeviceManager.h - Modify the API
1 parent 82eb1be commit 001de9d

File tree

2 files changed

+25
-3
lines changed

2 files changed

+25
-3
lines changed

Diff for: libraries/CurieBLE/src/internal/BLEDeviceManager.cpp

+23-2
Original file line numberDiff line numberDiff line change
@@ -1341,15 +1341,32 @@ bool BLEDeviceManager::deviceInDuplicateFilterBuffer(const bt_addr_le_t* addr)
13411341
return retVal;
13421342
}
13431343

1344-
void BLEDeviceManager::updateDuplicateFilter(const bt_addr_le_t* addr)
1344+
void BLEDeviceManager::updateDuplicateFilter(const bt_addr_le_t* addr, uint8_t scanRespLength)
13451345
{
13461346
uint8_t i = (_duplicate_filter_header + 1) % (ARRAY_SIZE(_peer_duplicate_address_buffer));
13471347
if (deviceInDuplicateFilterBuffer(addr))
13481348
{
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+
}
13491365
return;
13501366
}
13511367
bt_addr_le_copy(&_peer_duplicate_address_buffer[_duplicate_filter_header],
13521368
addr);
1369+
_peer_duplicate_device_scanresp_len[_duplicate_filter_header] = scanRespLength;
13531370
if (i == _duplicate_filter_tail)
13541371
{
13551372
_duplicate_filter_tail = (_duplicate_filter_tail + 1) % (ARRAY_SIZE(_peer_duplicate_address_buffer));
@@ -1402,7 +1419,7 @@ BLEDevice BLEDeviceManager::available()
14021419
_peer_adv_mill[index] -= 2000; // Set it as expired
14031420
if (_adv_duplicate_filter_enabled)
14041421
{
1405-
updateDuplicateFilter(temp);
1422+
updateDuplicateFilter(temp, _available_for_connect_peripheral_scan_rsp_data_len);
14061423
}
14071424
}
14081425
}
@@ -1504,6 +1521,10 @@ bool BLEDeviceManager::setScanRespBuffer(const bt_addr_le_t* bt_addr,
15041521
//_peer_adv_rssi[index] = rssi;
15051522
// Update the timestamp
15061523
_peer_adv_mill[index] = timestamp;
1524+
if (_adv_duplicate_filter_enabled && deviceInDuplicateFilterBuffer(temp))
1525+
{
1526+
updateDuplicateFilter(temp, data_len);
1527+
}
15071528
retval = true;
15081529
}
15091530

Diff for: libraries/CurieBLE/src/internal/BLEDeviceManager.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -382,7 +382,7 @@ class BLEDeviceManager
382382
const uint8_t* &data,
383383
uint8_t &data_len) const;
384384
bool disconnectSingle(const bt_addr_le_t *peer);
385-
void updateDuplicateFilter(const bt_addr_le_t* addr);
385+
void updateDuplicateFilter(const bt_addr_le_t* addr, uint8_t scanRespLength);
386386
bool deviceInDuplicateFilterBuffer(const bt_addr_le_t* addr);
387387
void advertiseAcceptHandler(const bt_addr_le_t *addr,
388388
int8_t rssi,
@@ -487,6 +487,7 @@ class BLEDeviceManager
487487
uint8_t _peer_peripheral_scan_rsp_data_len[BLE_MAX_CONN_CFG];
488488
uint8_t _peer_peripheral_adv_rssi[BLE_MAX_CONN_CFG];
489489
bt_addr_le_t _peer_duplicate_address_buffer[BLE_MAX_ADV_FILTER_SIZE_CFG];
490+
uint8_t _peer_duplicate_device_scanresp_len[BLE_MAX_ADV_FILTER_SIZE_CFG];
490491
uint8_t _duplicate_filter_header;
491492
uint8_t _duplicate_filter_tail;
492493
bool _adv_duplicate_filter_enabled;

0 commit comments

Comments
 (0)