14 #include <esp_gap_ble_api.h> 15 #include <esp_gattc_api.h> 16 #include <esp_bt_defs.h> 19 namespace esp32_ble_tracker {
37 bool contains(uint8_t data1, uint8_t data2)
const;
62 ESPBLEiBeacon() { memset(&this->beacon_data_, 0,
sizeof(this->beacon_data_)); }
66 uint16_t
get_major() {
return ((this->beacon_data_.major & 0xFF) << 8) | (this->beacon_data_.major >> 8); }
67 uint16_t
get_minor() {
return ((this->beacon_data_.minor & 0xFF) << 8) | (this->beacon_data_.minor >> 8); }
75 uint8_t proximity_uuid[16];
84 void parse_scan_rst(
const esp_ble_gap_cb_param_t::ble_scan_result_evt_param ¶m);
86 std::string address_str()
const;
88 uint64_t address_uint64()
const;
90 const uint8_t *
address()
const {
return address_; }
94 const std::string &
get_name()
const {
return this->name_; }
106 const esp_ble_gap_cb_param_t::ble_scan_result_evt_param &
get_scan_result()
const {
return scan_result_; }
109 for (
auto &it : this->manufacturer_datas_) {
118 void parse_adv_(
const esp_ble_gap_cb_param_t::ble_scan_result_evt_param ¶m);
120 esp_bd_addr_t address_{
123 esp_ble_addr_type_t address_type_{BLE_ADDR_TYPE_PUBLIC};
126 std::vector<int8_t> tx_powers_{};
130 std::vector<ServiceData> manufacturer_datas_{};
131 std::vector<ServiceData> service_datas_{};
132 esp_ble_gap_cb_param_t::ble_scan_result_evt_param scan_result_{};
140 virtual bool parse_device(
const ESPBTDevice &device) = 0;
182 virtual bool gattc_event_handler(esp_gattc_cb_event_t event, esp_gatt_if_t gattc_if,
183 esp_ble_gattc_cb_param_t *param) = 0;
184 virtual void gap_event_handler(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param_t *param) = 0;
185 virtual void connect() = 0;
203 void setup()
override;
204 void dump_config()
override;
205 float get_setup_priority()
const override;
207 void loop()
override;
211 this->listeners_.push_back(listener);
216 void print_bt_device_info(
const ESPBTDevice &device);
223 static bool ble_setup();
225 void start_scan_(
bool first);
229 static void gap_event_handler(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param_t *param);
230 void real_gap_event_handler_(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param_t *param);
232 void gap_scan_result_(
const esp_ble_gap_cb_param_t::ble_scan_result_evt_param ¶m);
234 void gap_scan_set_param_complete_(
const esp_ble_gap_cb_param_t::ble_scan_param_cmpl_evt_param ¶m);
236 void gap_scan_start_complete_(
const esp_ble_gap_cb_param_t::ble_scan_start_cmpl_evt_param ¶m);
238 void gap_scan_stop_complete_(
const esp_ble_gap_cb_param_t::ble_scan_stop_cmpl_evt_param ¶m);
242 static void gattc_event_handler(esp_gattc_cb_event_t event, esp_gatt_if_t gattc_if, esp_ble_gattc_cb_param_t *param);
243 void real_gattc_event_handler_(esp_gattc_cb_event_t event, esp_gatt_if_t gattc_if, esp_ble_gattc_cb_param_t *param);
262 size_t scan_result_index_{0};
263 esp_ble_gap_cb_param_t::ble_scan_result_evt_param scan_result_buffer_[16];
264 esp_bt_status_t scan_start_failed_{ESP_BT_STATUS_SUCCESS};
265 esp_bt_status_t scan_set_param_failed_{ESP_BT_STATUS_SUCCESS};
ESPBTUUID as_128bit() const
optional< ESPBLEiBeacon > get_ibeacon() const
std::string to_string() const
struct esphome::sen5x::Sen5xBaselines PACKED
void register_listener(ESPBTDeviceListener *listener)
void set_scan_active(bool scan_active)
virtual void on_scan_end()
const std::vector< int8_t > & get_tx_powers() const
const optional< uint16_t > & get_appearance() const
const std::vector< ServiceData > & get_manufacturer_datas() const
const std::vector< ESPBTUUID > & get_service_uuids() const
esp_ble_scan_params_t scan_params_
A structure holding the ESP BLE scan parameters.
static ESPBTUUID from_raw(const uint8_t *data)
SemaphoreHandle_t scan_end_lock_
ESP32BLETracker * global_esp32_ble_tracker
virtual void set_state(ClientState st)
void set_parent(ESP32BLETracker *parent)
ClientState state() const
bool operator!=(const ESPBTUUID &uuid) const
Queue< BLEEvent > ble_events_
const std::vector< ServiceData > & get_service_datas() const
std::vector< ESPBTUUID > service_uuids_
esp_ble_addr_type_t get_address_type() const
const esp_ble_gap_cb_param_t::ble_scan_result_evt_param & get_scan_result() const
esp_bt_uuid_t get_uuid() const
bool contains(uint8_t data1, uint8_t data2) const
uint64_t get_128bit_high() const
const uint8_t * address() const
uint8_t scan_start_fail_count_
SemaphoreHandle_t scan_result_lock_
uint32_t scan_duration_
The interval in seconds to perform scans.
std::vector< uint8_t > adv_data_t
std::vector< uint64_t > already_discovered_
Vector of addresses that have already been printed in print_bt_device_info.
int8_t get_signal_power()
static ESPBTUUID from_uint16(uint16_t uuid)
static ESPBTUUID from_uint32(uint32_t uuid)
void set_scan_duration(uint32_t scan_duration)
const std::string & get_name() const
void set_scan_interval(uint32_t scan_interval)
bool operator==(const ESPBTUUID &uuid) const
uint64_t get_128bit_low() const
void set_scan_window(uint32_t scan_window)
static optional< ESPBLEiBeacon > from_manufacturer_data(const ServiceData &data)
void set_scan_continuous(bool scan_continuous)
std::vector< ESPBTDeviceListener * > listeners_
std::vector< ESPBTClient * > clients_
Client parameters.
const optional< uint8_t > & get_ad_flag() const
static ESPBTUUID from_uuid(esp_bt_uuid_t uuid)