mirror of
https://github.com/esphome/esphome.git
synced 2025-09-03 20:02:22 +01:00
Merge branch 'integration' into memory_api
This commit is contained in:
@@ -111,36 +111,8 @@ void BLEClientBase::connect() {
|
|||||||
this->remote_addr_type_);
|
this->remote_addr_type_);
|
||||||
this->paired_ = false;
|
this->paired_ = false;
|
||||||
|
|
||||||
// Set preferred connection parameters before connecting
|
// Open the connection without setting connection parameters
|
||||||
// Use FAST for all V3 connections (better latency and reliability)
|
// Parameters will be set after connection is established if needed
|
||||||
// Use MEDIUM for V1/legacy connections (balanced performance)
|
|
||||||
uint16_t min_interval, max_interval, timeout;
|
|
||||||
const char *param_type;
|
|
||||||
|
|
||||||
if (this->connection_type_ == espbt::ConnectionType::V3_WITHOUT_CACHE ||
|
|
||||||
this->connection_type_ == espbt::ConnectionType::V3_WITH_CACHE) {
|
|
||||||
min_interval = FAST_MIN_CONN_INTERVAL;
|
|
||||||
max_interval = FAST_MAX_CONN_INTERVAL;
|
|
||||||
timeout = FAST_CONN_TIMEOUT;
|
|
||||||
param_type = "fast";
|
|
||||||
} else {
|
|
||||||
min_interval = MEDIUM_MIN_CONN_INTERVAL;
|
|
||||||
max_interval = MEDIUM_MAX_CONN_INTERVAL;
|
|
||||||
timeout = MEDIUM_CONN_TIMEOUT;
|
|
||||||
param_type = "medium";
|
|
||||||
}
|
|
||||||
|
|
||||||
auto param_ret = esp_ble_gap_set_prefer_conn_params(this->remote_bda_, min_interval, max_interval,
|
|
||||||
0, // latency: 0
|
|
||||||
timeout);
|
|
||||||
if (param_ret != ESP_OK) {
|
|
||||||
ESP_LOGW(TAG, "[%d] [%s] esp_ble_gap_set_prefer_conn_params failed: %d", this->connection_index_,
|
|
||||||
this->address_str_.c_str(), param_ret);
|
|
||||||
} else {
|
|
||||||
this->log_connection_params_(param_type);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Now open the connection
|
|
||||||
auto ret = esp_ble_gattc_open(this->gattc_if_, this->remote_bda_, this->remote_addr_type_, true);
|
auto ret = esp_ble_gattc_open(this->gattc_if_, this->remote_bda_, this->remote_addr_type_, true);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
this->log_gattc_warning_("esp_ble_gattc_open", ret);
|
this->log_gattc_warning_("esp_ble_gattc_open", ret);
|
||||||
@@ -243,8 +215,21 @@ void BLEClientBase::log_warning_(const char *message) {
|
|||||||
ESP_LOGW(TAG, "[%d] [%s] %s", this->connection_index_, this->address_str_.c_str(), message);
|
ESP_LOGW(TAG, "[%d] [%s] %s", this->connection_index_, this->address_str_.c_str(), message);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BLEClientBase::restore_medium_conn_params_() {
|
void BLEClientBase::set_fast_conn_params_() {
|
||||||
// Restore to medium connection parameters after initial connection phase
|
// Switch to fast connection parameters for service discovery
|
||||||
|
// This improves discovery speed for devices with short timeouts
|
||||||
|
esp_ble_conn_update_params_t conn_params = {{0}};
|
||||||
|
memcpy(conn_params.bda, this->remote_bda_, sizeof(esp_bd_addr_t));
|
||||||
|
conn_params.min_int = FAST_MIN_CONN_INTERVAL;
|
||||||
|
conn_params.max_int = FAST_MAX_CONN_INTERVAL;
|
||||||
|
conn_params.latency = 0;
|
||||||
|
conn_params.timeout = FAST_CONN_TIMEOUT;
|
||||||
|
this->log_connection_params_("fast");
|
||||||
|
esp_ble_gap_update_conn_params(&conn_params);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BLEClientBase::set_medium_conn_params_() {
|
||||||
|
// Set medium connection parameters for balanced performance
|
||||||
// This balances performance with bandwidth usage for normal operation
|
// This balances performance with bandwidth usage for normal operation
|
||||||
esp_ble_conn_update_params_t conn_params = {{0}};
|
esp_ble_conn_update_params_t conn_params = {{0}};
|
||||||
memcpy(conn_params.bda, this->remote_bda_, sizeof(esp_bd_addr_t));
|
memcpy(conn_params.bda, this->remote_bda_, sizeof(esp_bd_addr_t));
|
||||||
@@ -319,12 +304,19 @@ bool BLEClientBase::gattc_event_handler(esp_gattc_cb_event_t event, esp_gatt_if_
|
|||||||
this->set_state(espbt::ClientState::CONNECTED);
|
this->set_state(espbt::ClientState::CONNECTED);
|
||||||
ESP_LOGI(TAG, "[%d] [%s] Connection open", this->connection_index_, this->address_str_.c_str());
|
ESP_LOGI(TAG, "[%d] [%s] Connection open", this->connection_index_, this->address_str_.c_str());
|
||||||
if (this->connection_type_ == espbt::ConnectionType::V3_WITH_CACHE) {
|
if (this->connection_type_ == espbt::ConnectionType::V3_WITH_CACHE) {
|
||||||
// Restore to medium connection parameters for cached connections too
|
// Cached connections use medium connection parameters
|
||||||
this->restore_medium_conn_params_();
|
this->set_medium_conn_params_();
|
||||||
// only set our state, subclients might have more stuff to do yet.
|
// only set our state, subclients might have more stuff to do yet.
|
||||||
this->state_ = espbt::ClientState::ESTABLISHED;
|
this->state_ = espbt::ClientState::ESTABLISHED;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
// For V3_WITHOUT_CACHE, switch to fast params for service discovery
|
||||||
|
// Service discovery period is critical - we typically have only 10s to complete
|
||||||
|
// discovery before the device disconnects us. Fast connection parameters are
|
||||||
|
// essential to finish service resolution in time and avoid retry loops.
|
||||||
|
if (this->connection_type_ == espbt::ConnectionType::V3_WITHOUT_CACHE) {
|
||||||
|
this->set_fast_conn_params_();
|
||||||
|
}
|
||||||
this->log_event_("Searching for services");
|
this->log_event_("Searching for services");
|
||||||
esp_ble_gattc_search_service(esp_gattc_if, param->cfg_mtu.conn_id, nullptr);
|
esp_ble_gattc_search_service(esp_gattc_if, param->cfg_mtu.conn_id, nullptr);
|
||||||
break;
|
break;
|
||||||
@@ -406,12 +398,11 @@ bool BLEClientBase::gattc_event_handler(esp_gattc_cb_event_t event, esp_gatt_if_
|
|||||||
if (this->conn_id_ != param->search_cmpl.conn_id)
|
if (this->conn_id_ != param->search_cmpl.conn_id)
|
||||||
return false;
|
return false;
|
||||||
this->log_gattc_event_("SEARCH_CMPL");
|
this->log_gattc_event_("SEARCH_CMPL");
|
||||||
// For V3 connections, restore to medium connection parameters after service discovery
|
// For V3_WITHOUT_CACHE, switch back to medium connection parameters after service discovery
|
||||||
// This balances performance with bandwidth usage after the critical discovery phase
|
// This balances performance with bandwidth usage after the critical discovery phase
|
||||||
if (this->connection_type_ == espbt::ConnectionType::V3_WITHOUT_CACHE ||
|
if (this->connection_type_ == espbt::ConnectionType::V3_WITHOUT_CACHE) {
|
||||||
this->connection_type_ == espbt::ConnectionType::V3_WITH_CACHE) {
|
this->set_medium_conn_params_();
|
||||||
this->restore_medium_conn_params_();
|
} else if (this->connection_type_ != espbt::ConnectionType::V3_WITH_CACHE) {
|
||||||
} else {
|
|
||||||
#ifdef USE_ESP32_BLE_DEVICE
|
#ifdef USE_ESP32_BLE_DEVICE
|
||||||
for (auto &svc : this->services_) {
|
for (auto &svc : this->services_) {
|
||||||
ESP_LOGV(TAG, "[%d] [%s] Service UUID: %s", this->connection_index_, this->address_str_.c_str(),
|
ESP_LOGV(TAG, "[%d] [%s] Service UUID: %s", this->connection_index_, this->address_str_.c_str(),
|
||||||
|
@@ -133,7 +133,8 @@ class BLEClientBase : public espbt::ESPBTClient, public Component {
|
|||||||
|
|
||||||
void log_event_(const char *name);
|
void log_event_(const char *name);
|
||||||
void log_gattc_event_(const char *name);
|
void log_gattc_event_(const char *name);
|
||||||
void restore_medium_conn_params_();
|
void set_fast_conn_params_();
|
||||||
|
void set_medium_conn_params_();
|
||||||
void log_gattc_warning_(const char *operation, esp_gatt_status_t status);
|
void log_gattc_warning_(const char *operation, esp_gatt_status_t status);
|
||||||
void log_gattc_warning_(const char *operation, esp_err_t err);
|
void log_gattc_warning_(const char *operation, esp_err_t err);
|
||||||
void log_connection_params_(const char *param_type);
|
void log_connection_params_(const char *param_type);
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
#include "text_sensor.h"
|
#include "ld2420_text_sensor.h"
|
||||||
#include "esphome/core/helpers.h"
|
#include "esphome/core/helpers.h"
|
||||||
#include "esphome/core/log.h"
|
#include "esphome/core/log.h"
|
||||||
|
|
@@ -1,10 +1,10 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
#include "esphome/core/component.h"
|
||||||
#include "esphome/core/defines.h"
|
#include "esphome/core/defines.h"
|
||||||
#include "esphome/core/hal.h"
|
#include "esphome/core/hal.h"
|
||||||
#include "esphome/core/component.h"
|
|
||||||
#include "esphome/core/log.h"
|
#include "esphome/core/log.h"
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
#include "opentherm.h"
|
#include "opentherm.h"
|
||||||
|
|
||||||
@@ -17,21 +17,21 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef OPENTHERM_USE_SWITCH
|
#ifdef OPENTHERM_USE_SWITCH
|
||||||
#include "esphome/components/opentherm/switch/switch.h"
|
#include "esphome/components/opentherm/switch/opentherm_switch.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef OPENTHERM_USE_OUTPUT
|
#ifdef OPENTHERM_USE_OUTPUT
|
||||||
#include "esphome/components/opentherm/output/output.h"
|
#include "esphome/components/opentherm/output/opentherm_output.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef OPENTHERM_USE_NUMBER
|
#ifdef OPENTHERM_USE_NUMBER
|
||||||
#include "esphome/components/opentherm/number/number.h"
|
#include "esphome/components/opentherm/number/opentherm_number.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <functional>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
#include <unordered_set>
|
#include <unordered_set>
|
||||||
#include <functional>
|
|
||||||
|
|
||||||
#include "opentherm_macros.h"
|
#include "opentherm_macros.h"
|
||||||
|
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
#include "number.h"
|
#include "opentherm_number.h"
|
||||||
|
|
||||||
namespace esphome {
|
namespace esphome {
|
||||||
namespace opentherm {
|
namespace opentherm {
|
@@ -1,5 +1,5 @@
|
|||||||
#include "esphome/core/helpers.h" // for clamp() and lerp()
|
#include "esphome/core/helpers.h" // for clamp() and lerp()
|
||||||
#include "output.h"
|
#include "opentherm_output.h"
|
||||||
|
|
||||||
namespace esphome {
|
namespace esphome {
|
||||||
namespace opentherm {
|
namespace opentherm {
|
@@ -1,4 +1,4 @@
|
|||||||
#include "switch.h"
|
#include "opentherm_switch.h"
|
||||||
|
|
||||||
namespace esphome {
|
namespace esphome {
|
||||||
namespace opentherm {
|
namespace opentherm {
|
Reference in New Issue
Block a user