A few esp32_ble_server/improv fixes (#2562)

This commit is contained in:
Jesse Hills 2021-10-21 06:45:10 +13:00
parent adb5d27d95
commit dad244fb7a
No known key found for this signature in database
GPG key ID: BEAAE804EFD8E83A
3 changed files with 18 additions and 15 deletions

View file

@ -98,19 +98,20 @@ bool BLEServer::create_device_characteristics_() {
return true; return true;
} }
BLEService *BLEServer::create_service(const uint8_t *uuid, bool advertise) { std::shared_ptr<BLEService> BLEServer::create_service(const uint8_t *uuid, bool advertise) {
return this->create_service(ESPBTUUID::from_raw(uuid), advertise); return this->create_service(ESPBTUUID::from_raw(uuid), advertise);
} }
BLEService *BLEServer::create_service(uint16_t uuid, bool advertise) { std::shared_ptr<BLEService> BLEServer::create_service(uint16_t uuid, bool advertise) {
return this->create_service(ESPBTUUID::from_uint16(uuid), advertise); return this->create_service(ESPBTUUID::from_uint16(uuid), advertise);
} }
BLEService *BLEServer::create_service(const std::string &uuid, bool advertise) { std::shared_ptr<BLEService> BLEServer::create_service(const std::string &uuid, bool advertise) {
return this->create_service(ESPBTUUID::from_raw(uuid), advertise); return this->create_service(ESPBTUUID::from_raw(uuid), advertise);
} }
BLEService *BLEServer::create_service(ESPBTUUID uuid, bool advertise, uint16_t num_handles, uint8_t inst_id) { std::shared_ptr<BLEService> BLEServer::create_service(ESPBTUUID uuid, bool advertise, uint16_t num_handles,
uint8_t inst_id) {
ESP_LOGV(TAG, "Creating service - %s", uuid.to_string().c_str()); ESP_LOGV(TAG, "Creating service - %s", uuid.to_string().c_str());
BLEService *service = new BLEService(uuid, num_handles, inst_id); // NOLINT(cppcoreguidelines-owning-memory) std::shared_ptr<BLEService> service = std::make_shared<BLEService>(uuid, num_handles, inst_id);
this->services_.push_back(service); this->services_.emplace_back(service);
if (advertise) { if (advertise) {
esp32_ble::global_ble->get_advertising()->add_service_uuid(uuid); esp32_ble::global_ble->get_advertising()->add_service_uuid(uuid);
} }
@ -149,12 +150,12 @@ void BLEServer::gatts_event_handler(esp_gatts_cb_event_t event, esp_gatt_if_t ga
break; break;
} }
for (auto *service : this->services_) { for (const auto &service : this->services_) {
service->gatts_event_handler(event, gatts_if, param); service->gatts_event_handler(event, gatts_if, param);
} }
} }
float BLEServer::get_setup_priority() const { return setup_priority::AFTER_BLUETOOTH; } float BLEServer::get_setup_priority() const { return setup_priority::AFTER_BLUETOOTH + 10; }
void BLEServer::dump_config() { ESP_LOGCONFIG(TAG, "ESP32 BLE Server:"); } void BLEServer::dump_config() { ESP_LOGCONFIG(TAG, "ESP32 BLE Server:"); }

View file

@ -11,6 +11,7 @@
#include "esphome/core/preferences.h" #include "esphome/core/preferences.h"
#include <map> #include <map>
#include <memory>
#ifdef USE_ESP32 #ifdef USE_ESP32
@ -43,10 +44,11 @@ class BLEServer : public Component {
void set_manufacturer(const std::string &manufacturer) { this->manufacturer_ = manufacturer; } void set_manufacturer(const std::string &manufacturer) { this->manufacturer_ = manufacturer; }
void set_model(const std::string &model) { this->model_ = model; } void set_model(const std::string &model) { this->model_ = model; }
BLEService *create_service(const uint8_t *uuid, bool advertise = false); std::shared_ptr<BLEService> create_service(const uint8_t *uuid, bool advertise = false);
BLEService *create_service(uint16_t uuid, bool advertise = false); std::shared_ptr<BLEService> create_service(uint16_t uuid, bool advertise = false);
BLEService *create_service(const std::string &uuid, bool advertise = false); std::shared_ptr<BLEService> create_service(const std::string &uuid, bool advertise = false);
BLEService *create_service(ESPBTUUID uuid, bool advertise = false, uint16_t num_handles = 15, uint8_t inst_id = 0); std::shared_ptr<BLEService> create_service(ESPBTUUID uuid, bool advertise = false, uint16_t num_handles = 15,
uint8_t inst_id = 0);
esp_gatt_if_t get_gatts_if() { return this->gatts_if_; } esp_gatt_if_t get_gatts_if() { return this->gatts_if_; }
uint32_t get_connected_client_count() { return this->connected_clients_; } uint32_t get_connected_client_count() { return this->connected_clients_; }
@ -74,8 +76,8 @@ class BLEServer : public Component {
uint32_t connected_clients_{0}; uint32_t connected_clients_{0};
std::map<uint16_t, void *> clients_; std::map<uint16_t, void *> clients_;
std::vector<BLEService *> services_; std::vector<std::shared_ptr<BLEService>> services_;
BLEService *device_information_service_; std::shared_ptr<BLEService> device_information_service_;
std::vector<BLEServiceComponent *> service_components_; std::vector<BLEServiceComponent *> service_components_;

View file

@ -48,7 +48,7 @@ class ESP32ImprovComponent : public Component, public BLEServiceComponent {
std::vector<uint8_t> incoming_data_; std::vector<uint8_t> incoming_data_;
wifi::WiFiAP connecting_sta_; wifi::WiFiAP connecting_sta_;
BLEService *service_; std::shared_ptr<BLEService> service_;
BLECharacteristic *status_; BLECharacteristic *status_;
BLECharacteristic *error_; BLECharacteristic *error_;
BLECharacteristic *rpc_; BLECharacteristic *rpc_;