mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-30 22:53:59 +00:00 
			
		
		
		
	Merge branch 'remove_searching' into integration
This commit is contained in:
		| @@ -183,6 +183,12 @@ void BluetoothProxy::bluetooth_device_request(const api::BluetoothDeviceRequest | ||||
|         this->send_device_connection(msg.address, false); | ||||
|         return; | ||||
|       } | ||||
|       if (!msg.has_address_type) { | ||||
|         ESP_LOGE(TAG, "[%d] [%s] Missing address type in connect request", connection->get_connection_index(), | ||||
|                  connection->address_str().c_str()); | ||||
|         this->send_device_connection(msg.address, false); | ||||
|         return; | ||||
|       } | ||||
|       if (connection->state() == espbt::ClientState::CONNECTED || | ||||
|           connection->state() == espbt::ClientState::ESTABLISHED) { | ||||
|         this->log_connection_request_ignored_(connection, connection->state()); | ||||
| @@ -209,13 +215,9 @@ void BluetoothProxy::bluetooth_device_request(const api::BluetoothDeviceRequest | ||||
|         connection->set_connection_type(espbt::ConnectionType::V3_WITHOUT_CACHE); | ||||
|         this->log_connection_info_(connection, "v3 without cache"); | ||||
|       } | ||||
|       if (msg.has_address_type) { | ||||
|         uint64_to_bd_addr(msg.address, connection->remote_bda_); | ||||
|         connection->set_remote_addr_type(static_cast<esp_ble_addr_type_t>(msg.address_type)); | ||||
|         connection->set_state(espbt::ClientState::DISCOVERED); | ||||
|       } else { | ||||
|         connection->set_state(espbt::ClientState::SEARCHING); | ||||
|       } | ||||
|       uint64_to_bd_addr(msg.address, connection->remote_bda_); | ||||
|       connection->set_remote_addr_type(static_cast<esp_ble_addr_type_t>(msg.address_type)); | ||||
|       connection->set_state(espbt::ClientState::DISCOVERED); | ||||
|       this->send_connections_free(); | ||||
|       break; | ||||
|     } | ||||
|   | ||||
| @@ -92,7 +92,7 @@ bool BLEClientBase::parse_device(const espbt::ESPBTDevice &device) { | ||||
|     return false; | ||||
|   if (this->address_ == 0 || device.address_uint64() != this->address_) | ||||
|     return false; | ||||
|   if (this->state_ != espbt::ClientState::IDLE && this->state_ != espbt::ClientState::SEARCHING) | ||||
|   if (this->state_ != espbt::ClientState::IDLE) | ||||
|     return false; | ||||
|  | ||||
|   this->log_event_("Found device"); | ||||
| @@ -190,8 +190,7 @@ void BLEClientBase::unconditional_disconnect() { | ||||
|     this->log_gattc_warning_("esp_ble_gattc_close", err); | ||||
|   } | ||||
|  | ||||
|   if (this->state_ == espbt::ClientState::SEARCHING || this->state_ == espbt::ClientState::READY_TO_CONNECT || | ||||
|       this->state_ == espbt::ClientState::DISCOVERED) { | ||||
|   if (this->state_ == espbt::ClientState::READY_TO_CONNECT || this->state_ == espbt::ClientState::DISCOVERED) { | ||||
|     this->set_address(0); | ||||
|     this->set_state(espbt::ClientState::IDLE); | ||||
|   } else { | ||||
|   | ||||
| @@ -49,8 +49,6 @@ const char *client_state_to_string(ClientState state) { | ||||
|       return "DISCONNECTING"; | ||||
|     case ClientState::IDLE: | ||||
|       return "IDLE"; | ||||
|     case ClientState::SEARCHING: | ||||
|       return "SEARCHING"; | ||||
|     case ClientState::DISCOVERED: | ||||
|       return "DISCOVERED"; | ||||
|     case ClientState::READY_TO_CONNECT: | ||||
| @@ -136,9 +134,8 @@ void ESP32BLETracker::loop() { | ||||
|   ClientStateCounts counts = this->count_client_states_(); | ||||
|   if (counts != this->client_state_counts_) { | ||||
|     this->client_state_counts_ = counts; | ||||
|     ESP_LOGD(TAG, "connecting: %d, discovered: %d, searching: %d, disconnecting: %d", | ||||
|              this->client_state_counts_.connecting, this->client_state_counts_.discovered, | ||||
|              this->client_state_counts_.searching, this->client_state_counts_.disconnecting); | ||||
|     ESP_LOGD(TAG, "connecting: %d, discovered: %d, disconnecting: %d", this->client_state_counts_.connecting, | ||||
|              this->client_state_counts_.discovered, this->client_state_counts_.disconnecting); | ||||
|   } | ||||
|  | ||||
|   if (this->scanner_state_ == ScannerState::FAILED || | ||||
| @@ -158,10 +155,8 @@ void ESP32BLETracker::loop() { | ||||
|     https://github.com/espressif/esp-idf/issues/6688 | ||||
|  | ||||
|   */ | ||||
|   bool promote_to_connecting = counts.discovered && !counts.searching && !counts.connecting; | ||||
|  | ||||
|   if (this->scanner_state_ == ScannerState::IDLE && !counts.connecting && !counts.disconnecting && | ||||
|       !promote_to_connecting) { | ||||
|   if (this->scanner_state_ == ScannerState::IDLE && !counts.connecting && !counts.disconnecting && !counts.discovered) { | ||||
| #ifdef USE_ESP32_BLE_SOFTWARE_COEXISTENCE | ||||
|     this->update_coex_preference_(false); | ||||
| #endif | ||||
| @@ -170,12 +165,11 @@ void ESP32BLETracker::loop() { | ||||
|     } | ||||
|   } | ||||
|   // If there is a discovered client and no connecting | ||||
|   // clients and no clients using the scanner to search for | ||||
|   // devices, then promote the discovered client to ready to connect. | ||||
|   // clients, then promote the discovered client to ready to connect. | ||||
|   // We check both RUNNING and IDLE states because: | ||||
|   // - RUNNING: gap_scan_event_handler initiates stop_scan_() but promotion can happen immediately | ||||
|   // - IDLE: Scanner has already stopped (naturally or by gap_scan_event_handler) | ||||
|   if (promote_to_connecting && | ||||
|   if (counts.discovered && !counts.connecting && | ||||
|       (this->scanner_state_ == ScannerState::RUNNING || this->scanner_state_ == ScannerState::IDLE)) { | ||||
|     this->try_promote_discovered_clients_(); | ||||
|   } | ||||
| @@ -633,9 +627,8 @@ void ESP32BLETracker::dump_config() { | ||||
|                 this->scan_duration_, this->scan_interval_ * 0.625f, this->scan_window_ * 0.625f, | ||||
|                 this->scan_active_ ? "ACTIVE" : "PASSIVE", YESNO(this->scan_continuous_)); | ||||
|   ESP_LOGCONFIG(TAG, "  Scanner State: %s", this->scanner_state_to_string_(this->scanner_state_)); | ||||
|   ESP_LOGCONFIG(TAG, "  Connecting: %d, discovered: %d, searching: %d, disconnecting: %d", | ||||
|                 this->client_state_counts_.connecting, this->client_state_counts_.discovered, | ||||
|                 this->client_state_counts_.searching, this->client_state_counts_.disconnecting); | ||||
|   ESP_LOGCONFIG(TAG, "  Connecting: %d, discovered: %d, disconnecting: %d", this->client_state_counts_.connecting, | ||||
|                 this->client_state_counts_.discovered, this->client_state_counts_.disconnecting); | ||||
|   if (this->scan_start_fail_count_) { | ||||
|     ESP_LOGCONFIG(TAG, "  Scan Start Fail Count: %d", this->scan_start_fail_count_); | ||||
|   } | ||||
|   | ||||
| @@ -141,12 +141,10 @@ class ESPBTDeviceListener { | ||||
| struct ClientStateCounts { | ||||
|   uint8_t connecting = 0; | ||||
|   uint8_t discovered = 0; | ||||
|   uint8_t searching = 0; | ||||
|   uint8_t disconnecting = 0; | ||||
|  | ||||
|   bool operator==(const ClientStateCounts &other) const { | ||||
|     return connecting == other.connecting && discovered == other.discovered && searching == other.searching && | ||||
|            disconnecting == other.disconnecting; | ||||
|     return connecting == other.connecting && discovered == other.discovered && disconnecting == other.disconnecting; | ||||
|   } | ||||
|  | ||||
|   bool operator!=(const ClientStateCounts &other) const { return !(*this == other); } | ||||
| @@ -159,8 +157,6 @@ enum class ClientState : uint8_t { | ||||
|   DISCONNECTING, | ||||
|   // Connection is idle, no device detected. | ||||
|   IDLE, | ||||
|   // Searching for device. | ||||
|   SEARCHING, | ||||
|   // Device advertisement found. | ||||
|   DISCOVERED, | ||||
|   // Device is discovered and the scanner is stopped | ||||
| @@ -321,9 +317,6 @@ class ESP32BLETracker : public Component, | ||||
|         case ClientState::DISCOVERED: | ||||
|           counts.discovered++; | ||||
|           break; | ||||
|         case ClientState::SEARCHING: | ||||
|           counts.searching++; | ||||
|           break; | ||||
|         case ClientState::CONNECTING: | ||||
|         case ClientState::READY_TO_CONNECT: | ||||
|           counts.connecting++; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user