From 43d8e213f631f82a78791fcfb2ef4abc48f1e4ab Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Mon, 29 Sep 2025 18:15:25 -0500 Subject: [PATCH] wip --- CODEOWNERS | 1 - .../esp32_ble_server/ble_characteristic.cpp | 6 +++--- .../esp32_ble_server/ble_descriptor.cpp | 3 ++- .../components/esp32_ble_server/ble_descriptor.h | 10 ++++++---- .../components/esp32_ble_server/ble_server.cpp | 4 ++-- esphome/components/esp32_ble_server/ble_server.h | 15 ++++++++++----- 6 files changed, 23 insertions(+), 16 deletions(-) diff --git a/CODEOWNERS b/CODEOWNERS index 3747acd2b5..0b9935faf7 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -160,7 +160,6 @@ esphome/components/esp_ldo/* @clydebarrow esphome/components/espnow/* @jesserockz esphome/components/ethernet_info/* @gtjadsonsantos esphome/components/event/* @nohat -esphome/components/event_emitter/* @Rapsssito esphome/components/exposure_notifications/* @OttoWinter esphome/components/ezo/* @ssieb esphome/components/ezo_pmp/* @carlos-sarmiento diff --git a/esphome/components/esp32_ble_server/ble_characteristic.cpp b/esphome/components/esp32_ble_server/ble_characteristic.cpp index 12530b26ec..d485d9fe2d 100644 --- a/esphome/components/esp32_ble_server/ble_characteristic.cpp +++ b/esphome/components/esp32_ble_server/ble_characteristic.cpp @@ -209,7 +209,7 @@ void BLECharacteristic::gatts_event_handler(esp_gatts_cb_event_t event, esp_gatt break; // For some reason you can request a read but not want a response if (this->on_read_callback_) { - this->on_read_callback_(param->read.conn_id); + (*this->on_read_callback_)(param->read.conn_id); } uint16_t max_offset = 22; @@ -279,7 +279,7 @@ void BLECharacteristic::gatts_event_handler(esp_gatts_cb_event_t event, esp_gatt if (!param->write.is_prep) { if (this->on_write_callback_) { - this->on_write_callback_(this->value_, param->write.conn_id); + (*this->on_write_callback_)(this->value_, param->write.conn_id); } } @@ -292,7 +292,7 @@ void BLECharacteristic::gatts_event_handler(esp_gatts_cb_event_t event, esp_gatt this->write_event_ = false; if (param->exec_write.exec_write_flag == ESP_GATT_PREP_WRITE_EXEC) { if (this->on_write_callback_) { - this->on_write_callback_(this->value_, param->exec_write.conn_id); + (*this->on_write_callback_)(this->value_, param->exec_write.conn_id); } } esp_err_t err = diff --git a/esphome/components/esp32_ble_server/ble_descriptor.cpp b/esphome/components/esp32_ble_server/ble_descriptor.cpp index 1182a83b82..16941cca0f 100644 --- a/esphome/components/esp32_ble_server/ble_descriptor.cpp +++ b/esphome/components/esp32_ble_server/ble_descriptor.cpp @@ -75,7 +75,8 @@ void BLEDescriptor::gatts_event_handler(esp_gatts_cb_event_t event, esp_gatt_if_ this->value_.attr_len = param->write.len; memcpy(this->value_.attr_value, param->write.value, param->write.len); if (this->on_write_callback_) { - this->on_write_callback_(std::span(param->write.value, param->write.len), param->write.conn_id); + (*this->on_write_callback_)(std::span(param->write.value, param->write.len), + param->write.conn_id); } break; } diff --git a/esphome/components/esp32_ble_server/ble_descriptor.h b/esphome/components/esp32_ble_server/ble_descriptor.h index a43d9a84a0..425462a316 100644 --- a/esphome/components/esp32_ble_server/ble_descriptor.h +++ b/esphome/components/esp32_ble_server/ble_descriptor.h @@ -8,13 +8,14 @@ #include #include #include +#include +#include namespace esphome { namespace esp32_ble_server { using namespace esp32_ble; using namespace bytebuffer; -using namespace event_emitter; class BLECharacteristic; @@ -34,9 +35,10 @@ class BLEDescriptor { bool is_created() { return this->state_ == CREATED; } bool is_failed() { return this->state_ == FAILED; } - // Direct callback registration + // Direct callback registration - only allocates when callback is set void on_write(std::function, uint16_t)> &&callback) { - this->on_write_callback_ = std::move(callback); + this->on_write_callback_ = + std::make_unique, uint16_t)>>(std::move(callback)); } protected: @@ -46,7 +48,7 @@ class BLEDescriptor { esp_attr_value_t value_{}; - std::function, uint16_t)> on_write_callback_{nullptr}; + std::unique_ptr, uint16_t)>> on_write_callback_; esp_gatt_perm_t permissions_{}; diff --git a/esphome/components/esp32_ble_server/ble_server.cpp b/esphome/components/esp32_ble_server/ble_server.cpp index 0f993cad02..8f7931d40e 100644 --- a/esphome/components/esp32_ble_server/ble_server.cpp +++ b/esphome/components/esp32_ble_server/ble_server.cpp @@ -154,7 +154,7 @@ void BLEServer::gatts_event_handler(esp_gatts_cb_event_t event, esp_gatt_if_t ga ESP_LOGD(TAG, "BLE Client connected"); this->add_client_(param->connect.conn_id); if (this->on_connect_callback_) { - this->on_connect_callback_(param->connect.conn_id); + (*this->on_connect_callback_)(param->connect.conn_id); } break; } @@ -163,7 +163,7 @@ void BLEServer::gatts_event_handler(esp_gatts_cb_event_t event, esp_gatt_if_t ga this->remove_client_(param->disconnect.conn_id); this->parent_->advertising_start(); if (this->on_disconnect_callback_) { - this->on_disconnect_callback_(param->disconnect.conn_id); + (*this->on_disconnect_callback_)(param->disconnect.conn_id); } break; } diff --git a/esphome/components/esp32_ble_server/ble_server.h b/esphome/components/esp32_ble_server/ble_server.h index 8bb9429856..7b3ee9bae0 100644 --- a/esphome/components/esp32_ble_server/ble_server.h +++ b/esphome/components/esp32_ble_server/ble_server.h @@ -13,6 +13,7 @@ #include #include #include +#include #ifdef USE_ESP32 @@ -55,9 +56,13 @@ class BLEServer : public Component, public GATTsEventHandler, public BLEStatusEv void ble_before_disabled_event_handler() override; - // Direct callback registration - void on_connect(std::function &&callback) { this->on_connect_callback_ = std::move(callback); } - void on_disconnect(std::function &&callback) { this->on_disconnect_callback_ = std::move(callback); } + // Direct callback registration - only allocates when callback is set + void on_connect(std::function &&callback) { + this->on_connect_callback_ = std::make_unique>(std::move(callback)); + } + void on_disconnect(std::function &&callback) { + this->on_disconnect_callback_ = std::make_unique>(std::move(callback)); + } protected: struct ServiceEntry { @@ -71,8 +76,8 @@ class BLEServer : public Component, public GATTsEventHandler, public BLEStatusEv void add_client_(uint16_t conn_id) { this->clients_.insert(conn_id); } void remove_client_(uint16_t conn_id) { this->clients_.erase(conn_id); } - std::function on_connect_callback_{nullptr}; - std::function on_disconnect_callback_{nullptr}; + std::unique_ptr> on_connect_callback_; + std::unique_ptr> on_disconnect_callback_; std::vector manufacturer_data_{}; esp_gatt_if_t gatts_if_{0};