ESPHome 2025.5.0
Loading...
Searching...
No Matches
ble_server.h
Go to the documentation of this file.
1#pragma once
2
3#include "ble_service.h"
5
11
12#include <memory>
13#include <vector>
14#include <unordered_map>
15#include <unordered_set>
16
17#ifdef USE_ESP32
18
19#include <esp_gatts_api.h>
20
21namespace esphome {
22namespace esp32_ble_server {
23
24using namespace esp32_ble;
25using namespace bytebuffer;
26
27namespace BLEServerEvt {
32} // namespace BLEServerEvt
33
34class BLEServer : public Component,
35 public GATTsEventHandler,
37 public Parented<ESP32BLE>,
38 public EventEmitter<BLEServerEvt::EmptyEvt, uint16_t> {
39 public:
40 void setup() override;
41 void loop() override;
42 void dump_config() override;
43 float get_setup_priority() const override;
44 bool can_proceed() override;
45
46 void teardown();
47 bool is_running();
48
49 void set_manufacturer_data(const std::vector<uint8_t> &data) {
50 this->manufacturer_data_ = data;
52 }
53
54 BLEService *create_service(ESPBTUUID uuid, bool advertise = false, uint16_t num_handles = 15);
55 void remove_service(ESPBTUUID uuid, uint8_t inst_id = 0);
56 BLEService *get_service(ESPBTUUID uuid, uint8_t inst_id = 0);
57 void enqueue_start_service(BLEService *service) { this->services_to_start_.push_back(service); }
59
60 esp_gatt_if_t get_gatts_if() { return this->gatts_if_; }
61 uint32_t get_connected_client_count() { return this->clients_.size(); }
62 const std::unordered_set<uint16_t> &get_clients() { return this->clients_; }
63
64 void gatts_event_handler(esp_gatts_cb_event_t event, esp_gatt_if_t gatts_if,
65 esp_ble_gatts_cb_param_t *param) override;
66
68
69 protected:
70 static std::string get_service_key(ESPBTUUID uuid, uint8_t inst_id);
72
73 void add_client_(uint16_t conn_id) { this->clients_.insert(conn_id); }
74 void remove_client_(uint16_t conn_id) { this->clients_.erase(conn_id); }
75
76 std::vector<uint8_t> manufacturer_data_{};
77 esp_gatt_if_t gatts_if_{0};
78 bool registered_{false};
79
80 std::unordered_set<uint16_t> clients_;
81 std::unordered_map<std::string, BLEService *> services_{};
82 std::vector<BLEService *> services_to_start_{};
84
85 enum State : uint8_t {
86 INIT = 0x00,
90 } state_{INIT};
91};
92
93// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
94extern BLEServer *global_ble_server;
95
96} // namespace esp32_ble_server
97} // namespace esphome
98
99#endif
Helper class to easily give an object a parent of type T.
Definition helpers.h:538
const std::unordered_set< uint16_t > & get_clients()
Definition ble_server.h:62
void ble_before_disabled_event_handler() override
std::vector< uint8_t > manufacturer_data_
Definition ble_server.h:76
void set_device_information_service(BLEService *service)
Definition ble_server.h:58
static std::string get_service_key(ESPBTUUID uuid, uint8_t inst_id)
void set_manufacturer_data(const std::vector< uint8_t > &data)
Definition ble_server.h:49
void remove_client_(uint16_t conn_id)
Definition ble_server.h:74
float get_setup_priority() const override
enum esphome::esp32_ble_server::BLEServer::State INIT
BLEService * get_service(ESPBTUUID uuid, uint8_t inst_id=0)
std::vector< BLEService * > services_to_start_
Definition ble_server.h:82
void enqueue_start_service(BLEService *service)
Definition ble_server.h:57
BLEService * create_service(ESPBTUUID uuid, bool advertise=false, uint16_t num_handles=15)
void gatts_event_handler(esp_gatts_cb_event_t event, esp_gatt_if_t gatts_if, esp_ble_gatts_cb_param_t *param) override
void remove_service(ESPBTUUID uuid, uint8_t inst_id=0)
void add_client_(uint16_t conn_id)
Definition ble_server.h:73
std::unordered_map< std::string, BLEService * > services_
Definition ble_server.h:81
std::unordered_set< uint16_t > clients_
Definition ble_server.h:80
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7