mirror of
https://github.com/esphome/esphome.git
synced 2024-11-05 09:16:46 +01:00
Speed up BLE connections (#4093)
This commit is contained in:
parent
53e0af18fb
commit
9052947a71
@ -35,11 +35,34 @@ bool BluetoothConnection::gattc_event_handler(esp_gattc_cb_event_t event, esp_ga
|
|||||||
api::global_api_server->send_bluetooth_connections_free(this->proxy_->get_bluetooth_connections_free(),
|
api::global_api_server->send_bluetooth_connections_free(this->proxy_->get_bluetooth_connections_free(),
|
||||||
this->proxy_->get_bluetooth_connections_limit());
|
this->proxy_->get_bluetooth_connections_limit());
|
||||||
}
|
}
|
||||||
|
this->seen_mtu_or_services_ = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case ESP_GATTC_CFG_MTU_EVT: {
|
||||||
|
if (param->cfg_mtu.conn_id != this->conn_id_)
|
||||||
|
break;
|
||||||
|
if (!this->seen_mtu_or_services_) {
|
||||||
|
// We don't know if we will get the MTU or the services first, so
|
||||||
|
// only send the device connection true if we have already received
|
||||||
|
// the services.
|
||||||
|
this->seen_mtu_or_services_ = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
api::global_api_server->send_bluetooth_device_connection(this->address_, true, this->mtu_);
|
||||||
|
api::global_api_server->send_bluetooth_connections_free(this->proxy_->get_bluetooth_connections_free(),
|
||||||
|
this->proxy_->get_bluetooth_connections_limit());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ESP_GATTC_SEARCH_CMPL_EVT: {
|
case ESP_GATTC_SEARCH_CMPL_EVT: {
|
||||||
if (param->search_cmpl.conn_id != this->conn_id_)
|
if (param->search_cmpl.conn_id != this->conn_id_)
|
||||||
break;
|
break;
|
||||||
|
if (!this->seen_mtu_or_services_) {
|
||||||
|
// We don't know if we will get the MTU or the services first, so
|
||||||
|
// only send the device connection true if we have already received
|
||||||
|
// the mtu.
|
||||||
|
this->seen_mtu_or_services_ = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
api::global_api_server->send_bluetooth_device_connection(this->address_, true, this->mtu_);
|
api::global_api_server->send_bluetooth_device_connection(this->address_, true, this->mtu_);
|
||||||
api::global_api_server->send_bluetooth_connections_free(this->proxy_->get_bluetooth_connections_free(),
|
api::global_api_server->send_bluetooth_connections_free(this->proxy_->get_bluetooth_connections_free(),
|
||||||
this->proxy_->get_bluetooth_connections_limit());
|
this->proxy_->get_bluetooth_connections_limit());
|
||||||
|
@ -23,6 +23,7 @@ class BluetoothConnection : public esp32_ble_client::BLEClientBase {
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
friend class BluetoothProxy;
|
friend class BluetoothProxy;
|
||||||
|
bool seen_mtu_or_services_{false};
|
||||||
|
|
||||||
int16_t send_service_{-1};
|
int16_t send_service_{-1};
|
||||||
BluetoothProxy *proxy_;
|
BluetoothProxy *proxy_;
|
||||||
|
@ -112,6 +112,7 @@ bool BLEClientBase::gattc_event_handler(esp_gattc_cb_event_t event, esp_gatt_if_
|
|||||||
ESP_LOGW(TAG, "[%d] [%s] esp_ble_gattc_send_mtu_req failed, status=%x", this->connection_index_,
|
ESP_LOGW(TAG, "[%d] [%s] esp_ble_gattc_send_mtu_req failed, status=%x", this->connection_index_,
|
||||||
this->address_str_.c_str(), ret);
|
this->address_str_.c_str(), ret);
|
||||||
}
|
}
|
||||||
|
esp_ble_gattc_search_service(esp_gattc_if, param->cfg_mtu.conn_id, nullptr);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ESP_GATTC_CFG_MTU_EVT: {
|
case ESP_GATTC_CFG_MTU_EVT: {
|
||||||
@ -124,7 +125,6 @@ bool BLEClientBase::gattc_event_handler(esp_gattc_cb_event_t event, esp_gatt_if_
|
|||||||
ESP_LOGV(TAG, "[%d] [%s] cfg_mtu status %d, mtu %d", this->connection_index_, this->address_str_.c_str(),
|
ESP_LOGV(TAG, "[%d] [%s] cfg_mtu status %d, mtu %d", this->connection_index_, this->address_str_.c_str(),
|
||||||
param->cfg_mtu.status, param->cfg_mtu.mtu);
|
param->cfg_mtu.status, param->cfg_mtu.mtu);
|
||||||
this->mtu_ = param->cfg_mtu.mtu;
|
this->mtu_ = param->cfg_mtu.mtu;
|
||||||
esp_ble_gattc_search_service(esp_gattc_if, param->cfg_mtu.conn_id, nullptr);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ESP_GATTC_DISCONNECT_EVT: {
|
case ESP_GATTC_DISCONNECT_EVT: {
|
||||||
|
Loading…
Reference in New Issue
Block a user