8using namespace esp32_ble;
10#ifdef USE_ESP32_BLE_SERVER_CHARACTERISTIC_ON_WRITE
15 characteristic->
on_write([on_write_trigger](std::span<const uint8_t> data, uint16_t
id) {
17 on_write_trigger->
trigger(std::vector<uint8_t>(data.begin(), data.end()),
id);
19 return on_write_trigger;
23#ifdef USE_ESP32_BLE_SERVER_DESCRIPTOR_ON_WRITE
27 descriptor->
on_write([on_write_trigger](std::span<const uint8_t> data, uint16_t
id) {
29 on_write_trigger->
trigger(std::vector<uint8_t>(data.begin(), data.end()),
id);
31 return on_write_trigger;
35#ifdef USE_ESP32_BLE_SERVER_ON_CONNECT
38 server->
on_connect([on_connect_trigger](uint16_t conn_id) { on_connect_trigger->
trigger(conn_id); });
39 return on_connect_trigger;
43#ifdef USE_ESP32_BLE_SERVER_ON_DISCONNECT
46 server->
on_disconnect([on_disconnect_trigger](uint16_t conn_id) { on_disconnect_trigger->
trigger(conn_id); });
47 return on_disconnect_trigger;
51#ifdef USE_ESP32_BLE_SERVER_SET_VALUE_ACTION
53 const std::function<
void()> &pre_notify_listener) {
55 auto *existing = this->find_listener_(characteristic);
56 if (existing !=
nullptr) {
58 this->remove_listener_(characteristic);
61 this->listeners_.push_back({characteristic, pre_notify_listener});
64BLECharacteristicSetValueActionManager::ListenerEntry *BLECharacteristicSetValueActionManager::find_listener_(
66 for (
auto &entry : this->listeners_) {
67 if (entry.characteristic == characteristic) {
74void BLECharacteristicSetValueActionManager::remove_listener_(BLECharacteristic *characteristic) {
76 for (
size_t i = 0; i < this->listeners_.size(); i++) {
77 if (this->listeners_[i].characteristic == characteristic) {
79 this->listeners_[i] = this->listeners_.back();
80 this->listeners_.pop_back();
void trigger(const Ts &...x) ESPHOME_ALWAYS_INLINE
Inform the parent automation that the event has triggered.
void on_write(std::function< void(std::span< const uint8_t >, uint16_t)> &&callback)
void on_write(std::function< void(std::span< const uint8_t >, uint16_t)> &&callback)
void on_connect(std::function< void(uint16_t)> &&callback)
void on_disconnect(std::function< void(uint16_t)> &&callback)
void set_listener(BLECharacteristic *characteristic, const std::function< void()> &pre_notify_listener)
static Trigger< std::vector< uint8_t >, uint16_t > * create_characteristic_on_write_trigger(BLECharacteristic *characteristic)
static Trigger< uint16_t > * create_server_on_disconnect_trigger(BLEServer *server)
static Trigger< uint16_t > * create_server_on_connect_trigger(BLEServer *server)
static Trigger< std::vector< uint8_t >, uint16_t > * create_descriptor_on_write_trigger(BLEDescriptor *descriptor)