mirror of
https://github.com/esphome/esphome.git
synced 2025-09-14 17:22:20 +01:00
Merge branch 'ble_queue_lock_free' into integration
This commit is contained in:
@@ -370,7 +370,7 @@ void ESP32BLE::loop() {
|
|||||||
|
|
||||||
template<typename... Args> void enqueue_ble_event(Args... args) {
|
template<typename... Args> void enqueue_ble_event(Args... args) {
|
||||||
// Check if buffer is full before allocating
|
// Check if buffer is full before allocating
|
||||||
if (global_ble->ble_events_.size() >= (SCAN_RESULT_BUFFER_SIZE * 2 - 1)) {
|
if (global_ble->ble_events_.size() >= (MAX_BLE_QUEUE_SIZE - 1)) {
|
||||||
// Buffer is full, push will fail and increment dropped count internally
|
// Buffer is full, push will fail and increment dropped count internally
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@@ -30,6 +30,9 @@ static constexpr uint8_t SCAN_RESULT_BUFFER_SIZE = 32;
|
|||||||
static constexpr uint8_t SCAN_RESULT_BUFFER_SIZE = 20;
|
static constexpr uint8_t SCAN_RESULT_BUFFER_SIZE = 20;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// Maximum size of the BLE event queue
|
||||||
|
static constexpr size_t MAX_BLE_QUEUE_SIZE = SCAN_RESULT_BUFFER_SIZE * 2;
|
||||||
|
|
||||||
uint64_t ble_addr_to_uint64(const esp_bd_addr_t address);
|
uint64_t ble_addr_to_uint64(const esp_bd_addr_t address);
|
||||||
|
|
||||||
// NOLINTNEXTLINE(modernize-use-using)
|
// NOLINTNEXTLINE(modernize-use-using)
|
||||||
@@ -144,7 +147,7 @@ class ESP32BLE : public Component {
|
|||||||
std::vector<BLEStatusEventHandler *> ble_status_event_handlers_;
|
std::vector<BLEStatusEventHandler *> ble_status_event_handlers_;
|
||||||
BLEComponentState state_{BLE_COMPONENT_STATE_OFF};
|
BLEComponentState state_{BLE_COMPONENT_STATE_OFF};
|
||||||
|
|
||||||
LockFreeQueue<BLEEvent, SCAN_RESULT_BUFFER_SIZE * 2> ble_events_;
|
LockFreeQueue<BLEEvent, MAX_BLE_QUEUE_SIZE> ble_events_;
|
||||||
BLEAdvertising *advertising_{};
|
BLEAdvertising *advertising_{};
|
||||||
esp_ble_io_cap_t io_cap_{ESP_IO_CAP_NONE};
|
esp_ble_io_cap_t io_cap_{ESP_IO_CAP_NONE};
|
||||||
uint32_t advertising_cycle_time_{};
|
uint32_t advertising_cycle_time_{};
|
||||||
|
@@ -50,7 +50,7 @@ void ESP32BLETracker::setup() {
|
|||||||
ESP_LOGE(TAG, "BLE Tracker was marked failed by ESP32BLE");
|
ESP_LOGE(TAG, "BLE Tracker was marked failed by ESP32BLE");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ExternalRAMAllocator<BLEScanResult> allocator(ExternalRAMAllocator<BLEScanResult>::ALLOW_FAILURE);
|
RAMAllocator<BLEScanResult> allocator;
|
||||||
this->scan_ring_buffer_ = allocator.allocate(SCAN_RESULT_BUFFER_SIZE);
|
this->scan_ring_buffer_ = allocator.allocate(SCAN_RESULT_BUFFER_SIZE);
|
||||||
|
|
||||||
if (this->scan_ring_buffer_ == nullptr) {
|
if (this->scan_ring_buffer_ == nullptr) {
|
||||||
|
Reference in New Issue
Block a user