mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-31 07:03:55 +00:00 
			
		
		
		
	Merge branch 'service_discovery' into integration
This commit is contained in:
		| @@ -132,24 +132,6 @@ void BLEClientBase::connect() { | |||||||
|            this->remote_addr_type_); |            this->remote_addr_type_); | ||||||
|   this->paired_ = false; |   this->paired_ = false; | ||||||
|  |  | ||||||
|   // For connections without cache, set fast connection parameters before connecting |  | ||||||
|   // This ensures service discovery completes within the 10-second timeout that |  | ||||||
|   // some devices like HomeKit BLE sensors enforce |  | ||||||
|   if (this->connection_type_ == espbt::ConnectionType::V3_WITHOUT_CACHE) { |  | ||||||
|     auto ret = esp_ble_gap_set_prefer_conn_params(this->remote_bda_, |  | ||||||
|                                                   0x06,   // min_int: 7.5ms |  | ||||||
|                                                   0x06,   // max_int: 7.5ms |  | ||||||
|                                                   0,      // latency: 0 |  | ||||||
|                                                   1000);  // timeout: 10s |  | ||||||
|     if (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(), ret); |  | ||||||
|     } else { |  | ||||||
|       ESP_LOGD(TAG, "[%d] [%s] Set preferred connection params for fast discovery (no cache)", this->connection_index_, |  | ||||||
|                this->address_str_.c_str()); |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   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) { | ||||||
|     ESP_LOGW(TAG, "[%d] [%s] esp_ble_gattc_open error, status=%d", this->connection_index_, this->address_str_.c_str(), |     ESP_LOGW(TAG, "[%d] [%s] esp_ble_gattc_open error, status=%d", this->connection_index_, this->address_str_.c_str(), | ||||||
| @@ -157,6 +139,23 @@ void BLEClientBase::connect() { | |||||||
|     this->set_state(espbt::ClientState::IDLE); |     this->set_state(espbt::ClientState::IDLE); | ||||||
|   } else { |   } else { | ||||||
|     this->set_state(espbt::ClientState::CONNECTING); |     this->set_state(espbt::ClientState::CONNECTING); | ||||||
|  |  | ||||||
|  |     // For connections without cache, set fast connection parameters after initiating connection | ||||||
|  |     // This ensures service discovery completes within the 10-second timeout that | ||||||
|  |     // some devices like HomeKit BLE sensors enforce | ||||||
|  |     if (this->connection_type_ == espbt::ConnectionType::V3_WITHOUT_CACHE) { | ||||||
|  |       auto param_ret = esp_ble_gap_set_prefer_conn_params(this->remote_bda_, | ||||||
|  |                                                           0x06,   // min_int: 7.5ms | ||||||
|  |                                                           0x06,   // max_int: 7.5ms | ||||||
|  |                                                           0,      // latency: 0 | ||||||
|  |                                                           1000);  // timeout: 10s | ||||||
|  |       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 { | ||||||
|  |         ESP_LOGD(TAG, "[%d] [%s] Set fast conn params", this->connection_index_, this->address_str_.c_str()); | ||||||
|  |       } | ||||||
|  |     } | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -395,8 +394,7 @@ bool BLEClientBase::gattc_event_handler(esp_gattc_cb_event_t event, esp_gatt_if_ | |||||||
|         conn_params.max_int = 0x0C;  // 15ms - ESP-IDF default maximum (BTM_BLE_CONN_INT_MAX_DEF) |         conn_params.max_int = 0x0C;  // 15ms - ESP-IDF default maximum (BTM_BLE_CONN_INT_MAX_DEF) | ||||||
|         conn_params.latency = 0; |         conn_params.latency = 0; | ||||||
|         conn_params.timeout = 600;  // 6s - ESP-IDF default timeout (BTM_BLE_CONN_TIMEOUT_DEF) |         conn_params.timeout = 600;  // 6s - ESP-IDF default timeout (BTM_BLE_CONN_TIMEOUT_DEF) | ||||||
|         ESP_LOGD(TAG, "[%d] [%s] Restoring default connection parameters after service discovery", |         ESP_LOGD(TAG, "[%d] [%s] Restored default conn params", this->connection_index_, this->address_str_.c_str()); | ||||||
|                  this->connection_index_, this->address_str_.c_str()); |  | ||||||
|         esp_ble_gap_update_conn_params(&conn_params); |         esp_ble_gap_update_conn_params(&conn_params); | ||||||
|       } |       } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user