From 269786cac9544b8f8c08e5af05961bc211c4626f Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Thu, 14 Aug 2025 21:59:46 -0500 Subject: [PATCH] preen --- esphome/components/esp32_ble/ble_event.h | 60 ++++++++++++++++-------- 1 file changed, 41 insertions(+), 19 deletions(-) diff --git a/esphome/components/esp32_ble/ble_event.h b/esphome/components/esp32_ble/ble_event.h index 884fc9ba65..d883d367b2 100644 --- a/esphome/components/esp32_ble/ble_event.h +++ b/esphome/components/esp32_ble/ble_event.h @@ -3,7 +3,9 @@ #ifdef USE_ESP32 #include // for offsetof +#include // for memcpy #include +#include // for std::unique_ptr #include #include @@ -145,16 +147,14 @@ class BLEEvent { } if (this->type_ == GATTC) { delete this->event_.gattc.gattc_param; - delete this->event_.gattc.data; this->event_.gattc.gattc_param = nullptr; - this->event_.gattc.data = nullptr; + this->reset_gattc_data_(); return; } if (this->type_ == GATTS) { delete this->event_.gatts.gatts_param; - delete this->event_.gatts.data; this->event_.gatts.gatts_param = nullptr; - this->event_.gatts.data = nullptr; + this->reset_gatts_data_(); } } @@ -209,17 +209,19 @@ class BLEEvent { esp_gattc_cb_event_t gattc_event; esp_gatt_if_t gattc_if; esp_ble_gattc_cb_param_t *gattc_param; // Heap-allocated - std::vector *data; // Heap-allocated - } gattc; // 16 bytes (pointers only) + uint8_t *data; // Heap-allocated raw buffer (manually managed) + uint16_t data_len; // Track size separately + } gattc; // NOLINTNEXTLINE(readability-identifier-naming) struct gatts_event { esp_gatts_cb_event_t gatts_event; esp_gatt_if_t gatts_if; esp_ble_gatts_cb_param_t *gatts_param; // Heap-allocated - std::vector *data; // Heap-allocated - } gatts; // 16 bytes (pointers only) - } event_; // 80 bytes + uint8_t *data; // Heap-allocated raw buffer (manually managed) + uint16_t data_len; // Track size separately + } gatts; + } event_; // 80 bytes ble_event_t type_; @@ -233,6 +235,20 @@ class BLEEvent { const esp_ble_sec_t &security() const { return event_.gap.security; } private: + // Helper to reset GATTC data + void reset_gattc_data_() { + delete[] this->event_.gattc.data; + this->event_.gattc.data = nullptr; + this->event_.gattc.data_len = 0; + } + + // Helper to reset GATTS data + void reset_gatts_data_() { + delete[] this->event_.gatts.data; + this->event_.gatts.data = nullptr; + this->event_.gatts.data_len = 0; + } + // Initialize GAP event data void init_gap_data_(esp_gap_ble_cb_event_t e, esp_ble_gap_cb_param_t *p) { this->event_.gap.gap_event = e; @@ -318,7 +334,7 @@ class BLEEvent { if (p == nullptr) { this->event_.gattc.gattc_param = nullptr; - this->event_.gattc.data = nullptr; + this->reset_gattc_data_(); return; // Invalid event, but we can't log in header file } @@ -336,16 +352,20 @@ class BLEEvent { // We must copy this data to ensure it remains valid when the event is processed later. switch (e) { case ESP_GATTC_NOTIFY_EVT: - this->event_.gattc.data = new std::vector(p->notify.value, p->notify.value + p->notify.value_len); - this->event_.gattc.gattc_param->notify.value = this->event_.gattc.data->data(); + this->event_.gattc.data_len = p->notify.value_len; + this->event_.gattc.data = new uint8_t[p->notify.value_len]; + memcpy(this->event_.gattc.data, p->notify.value, p->notify.value_len); + this->event_.gattc.gattc_param->notify.value = this->event_.gattc.data; break; case ESP_GATTC_READ_CHAR_EVT: case ESP_GATTC_READ_DESCR_EVT: - this->event_.gattc.data = new std::vector(p->read.value, p->read.value + p->read.value_len); - this->event_.gattc.gattc_param->read.value = this->event_.gattc.data->data(); + this->event_.gattc.data_len = p->read.value_len; + this->event_.gattc.data = new uint8_t[p->read.value_len]; + memcpy(this->event_.gattc.data, p->read.value, p->read.value_len); + this->event_.gattc.gattc_param->read.value = this->event_.gattc.data; break; default: - this->event_.gattc.data = nullptr; + this->reset_gattc_data_(); break; } } @@ -357,7 +377,7 @@ class BLEEvent { if (p == nullptr) { this->event_.gatts.gatts_param = nullptr; - this->event_.gatts.data = nullptr; + this->reset_gatts_data_(); return; // Invalid event, but we can't log in header file } @@ -375,11 +395,13 @@ class BLEEvent { // We must copy this data to ensure it remains valid when the event is processed later. switch (e) { case ESP_GATTS_WRITE_EVT: - this->event_.gatts.data = new std::vector(p->write.value, p->write.value + p->write.len); - this->event_.gatts.gatts_param->write.value = this->event_.gatts.data->data(); + this->event_.gatts.data_len = p->write.len; + this->event_.gatts.data = new uint8_t[p->write.len]; + memcpy(this->event_.gatts.data, p->write.value, p->write.len); + this->event_.gatts.gatts_param->write.value = this->event_.gatts.data; break; default: - this->event_.gatts.data = nullptr; + this->reset_gatts_data_(); break; } }