#pragma once #ifdef USE_ZEPHYR #include "esphome/core/component.h" #include #include "esphome/core/automation.h" namespace esphome::zephyr_ble_server { class BLEServer : public Component { public: void setup() override; void dump_config() override; template void add_passkey_callback(F &&callback) { this->passkey_cb_.add(std::forward(callback)); } void numeric_comparison_reply(bool accept); protected: static void connected(bt_conn *conn, uint8_t err); static void disconnected(bt_conn *conn, uint8_t reason); static void auth_passkey_confirm(bt_conn *conn, unsigned int passkey); bt_conn *conn_{}; CallbackManager passkey_cb_; }; template class BLENumericComparisonReplyAction : public Action { public: explicit BLENumericComparisonReplyAction(BLEServer *parent) : parent_(parent) {} TEMPLATABLE_VALUE(bool, accept) void play(const Ts &...x) override { this->parent_->numeric_comparison_reply(this->accept_.value(x...)); } protected: BLEServer *parent_; }; } // namespace esphome::zephyr_ble_server #endif