mirror of
https://github.com/esphome/esphome.git
synced 2026-08-31 01:56:01 +00:00
Merge branch 'esp32-gatt-backend' into neutral-ble-client
This commit is contained in:
@@ -35,6 +35,11 @@ using esp32_ble_tracker::ClientState;
|
||||
using esp32_ble_tracker::ConnectionType;
|
||||
|
||||
static constexpr uint16_t UNSET_CONN_ID = 0xFFFF;
|
||||
// Wire default before any MTU exchange (Bluetooth spec ATT_MTU minimum).
|
||||
static constexpr uint16_t DEFAULT_ATT_MTU = 23;
|
||||
// Sanity bound for one characteristic's descriptor enumeration: real devices
|
||||
// carry a handful; a stack that never reports end-of-range must not hang.
|
||||
static constexpr uint16_t MAX_DESCRIPTORS_PER_CHARACTERISTIC = 64;
|
||||
|
||||
// ---- tracker surface ----
|
||||
|
||||
@@ -313,8 +318,7 @@ bool BluedroidGattClient::walk_database_(ServiceFn &&on_service, CharFn &&on_cha
|
||||
if (!on_char(svc, chr)) {
|
||||
return false;
|
||||
}
|
||||
// Bounded: a stack that never reports end-of-range must not hang setup.
|
||||
for (uint16_t d = 0; d != UINT16_MAX; d++) {
|
||||
for (uint16_t d = 0; d != MAX_DESCRIPTORS_PER_CHARACTERISTIC; d++) {
|
||||
esp_gattc_descr_elem_t desc;
|
||||
uint16_t desc_count = 1;
|
||||
auto desc_status =
|
||||
@@ -679,7 +683,7 @@ void BluedroidGattClient::handle_open_evt_(esp_ble_gattc_cb_param_t *param) {
|
||||
this->seen_mtu_ = true;
|
||||
// Wire parity with the old class: no MTU exchange happened yet, and HA
|
||||
// has always been handed the default 23 on the cached path.
|
||||
this->report_connection_state_(true, 23, 0);
|
||||
this->report_connection_state_(true, DEFAULT_ATT_MTU, 0);
|
||||
if (this->state_() != ClientState::DISCONNECTING) {
|
||||
// Settled: only the disconnect safety net needs the loop, and
|
||||
// set_disconnecting_() re-enables it.
|
||||
@@ -751,7 +755,8 @@ bool BluedroidGattClient::handle_gattc_event_(esp_gattc_cb_event_t event, esp_ga
|
||||
this->seen_mtu_ = true;
|
||||
// The connected report waited for the MTU so HA never sees 23; the
|
||||
// value is forwarded rather than stored (the consumer keeps it).
|
||||
this->report_connection_state_(true, param->cfg_mtu.status == ESP_GATT_OK ? param->cfg_mtu.mtu : 23, 0);
|
||||
this->report_connection_state_(true,
|
||||
param->cfg_mtu.status == ESP_GATT_OK ? param->cfg_mtu.mtu : DEFAULT_ATT_MTU, 0);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user