17using namespace esp32_ble;
21template<
typename T,
typename V,
typename... Xs>
void apply_value(T *target,
const V &value, Xs &&...
x) {
22 if (value.is_static()) {
23 target->set_value(value.data(), value.size());
25 target->set_value(value.value(
x...));
31#ifdef USE_ESP32_BLE_SERVER_CHARACTERISTIC_ON_WRITE
35#ifdef USE_ESP32_BLE_SERVER_DESCRIPTOR_ON_WRITE
38#ifdef USE_ESP32_BLE_SERVER_ON_CONNECT
41#ifdef USE_ESP32_BLE_SERVER_ON_DISCONNECT
46#ifdef USE_ESP32_BLE_SERVER_SET_VALUE_ACTION
58 for (
const auto &entry : this->listeners_) {
59 if (entry.characteristic == characteristic) {
60 entry.pre_notify_listener();
67 struct ListenerEntry {
69 std::function<void()> pre_notify_listener;
71 std::vector<ListenerEntry> listeners_;
81 void play(
const Ts &...
x)
override {
92 apply_value(this->parent_, this->buffer_, x...);
96 this->
parent_, [
this, x...]()
mutable { apply_value(this->parent_, this->buffer_, x...); });
104#ifdef USE_ESP32_BLE_SERVER_NOTIFY_ACTION
108 void play(
const Ts &...
x)
override {
109#ifdef USE_ESP32_BLE_SERVER_SET_VALUE_ACTION
122#ifdef USE_ESP32_BLE_SERVER_DESCRIPTOR_SET_VALUE_ACTION
virtual void play(const Ts &...x)=0
void on_read(std::function< void(uint16_t)> &&callback)
BLECharacteristicNotifyAction(BLECharacteristic *characteristic)
BLECharacteristic * parent_
void play(const Ts &...x) override
BLECharacteristicSetValueAction(BLECharacteristic *characteristic)
TEMPLATABLE_BYTES(buffer) void play(const Ts &...x) override
BLECharacteristic * parent_
bool has_listener(BLECharacteristic *characteristic)
static BLECharacteristicSetValueActionManager * get_instance()
void set_listener(BLECharacteristic *characteristic, const std::function< void()> &pre_notify_listener)
void emit_pre_notify(BLECharacteristic *characteristic)
TEMPLATABLE_BYTES(buffer) void play(const Ts &...x) override
BLEDescriptorSetValueAction(BLEDescriptor *descriptor)
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)
void apply_value(T *target, const V &value, Xs &&...x)
Sets a characteristic or descriptor value from a constant flash table or a lambda's vector.