mirror of
https://github.com/h2zero/esp-nimble-cpp.git
synced 2024-11-22 05:00:55 +01:00
Add clear scan duplicate filter cache method + clear on start.
This allows for clearing the duplicate filter cache when required and will also clear it automatically when starting a scan. This is useful when unexpectedly disconnected from a device and attempting to reconnect. Previously the scan filter would not report advertisements from a device if it was multi-connectable and advertising while connected. The result was long delays until the device would be scanned again. This resolves it by clearing the filter cache on each scan start/clearResults call and adding a method to NimBLEScan for manually clearing the cache on demand.
This commit is contained in:
parent
f5eab87a87
commit
05080abad4
2 changed files with 12 additions and 0 deletions
|
@ -316,6 +316,8 @@ bool NimBLEScan::start(uint32_t duration, void (*scanCompleteCB)(NimBLEScanResul
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BLE_HS_EALREADY:
|
case BLE_HS_EALREADY:
|
||||||
|
// Clear the cache if already scanning in case an advertiser was missed.
|
||||||
|
clearDuplicateCache();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BLE_HS_EBUSY:
|
case BLE_HS_EBUSY:
|
||||||
|
@ -398,6 +400,14 @@ bool NimBLEScan::stop() {
|
||||||
} // stop
|
} // stop
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Clears the duplicate scan filter cache.
|
||||||
|
*/
|
||||||
|
void NimBLEScan::clearDuplicateCache() {
|
||||||
|
esp_ble_scan_dupilcate_list_flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Delete peer device from the scan results vector.
|
* @brief Delete peer device from the scan results vector.
|
||||||
* @param [in] address The address of the device to delete from the results.
|
* @param [in] address The address of the device to delete from the results.
|
||||||
|
@ -453,6 +463,7 @@ void NimBLEScan::clearResults() {
|
||||||
delete it;
|
delete it;
|
||||||
}
|
}
|
||||||
m_scanResults.m_advertisedDevicesVector.clear();
|
m_scanResults.m_advertisedDevicesVector.clear();
|
||||||
|
clearDuplicateCache();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -70,6 +70,7 @@ public:
|
||||||
void setDuplicateFilter(bool enabled);
|
void setDuplicateFilter(bool enabled);
|
||||||
void setLimitedOnly(bool enabled);
|
void setLimitedOnly(bool enabled);
|
||||||
void setFilterPolicy(uint8_t filter);
|
void setFilterPolicy(uint8_t filter);
|
||||||
|
void clearDuplicateCache();
|
||||||
bool stop();
|
bool stop();
|
||||||
void clearResults();
|
void clearResults();
|
||||||
NimBLEScanResults getResults();
|
NimBLEScanResults getResults();
|
||||||
|
|
Loading…
Reference in a new issue