1
0
mirror of https://github.com/esphome/esphome.git synced 2025-11-15 14:25:45 +00:00

Merge branch 'integration' into memory_api

This commit is contained in:
J. Nick Koston
2025-11-11 08:53:53 -06:00
2 changed files with 20 additions and 12 deletions

View File

@@ -1067,8 +1067,8 @@ void WiFiComponent::check_connecting_finished() {
this->state_ = WIFI_COMPONENT_STATE_STA_CONNECTED;
this->num_retried_ = 0;
// Clear priority tracking if all priorities are identical
this->clear_priorities_if_all_same_();
// Clear priority tracking if all priorities are at minimum
this->clear_priorities_if_all_min_();
#ifdef USE_WIFI_FAST_CONNECT
this->save_fast_connect_settings_();
@@ -1294,22 +1294,30 @@ bool WiFiComponent::transition_to_phase_(WiFiRetryPhase new_phase) {
return false; // Did not start scan, can proceed with connection
}
/// Clear BSSID priority tracking if all priorities are identical (can't differentiate, saves memory)
/// Called when starting a fresh connection attempt or after successful connection
void WiFiComponent::clear_priorities_if_all_same_() {
/// Clear BSSID priority tracking if all priorities are at minimum (saves memory)
/// At minimum priority, all BSSIDs are equally bad, so priority tracking is useless
/// Called after successful connection or after failed connection attempts
void WiFiComponent::clear_priorities_if_all_min_() {
if (this->sta_priorities_.empty()) {
return;
}
int8_t first_priority = this->sta_priorities_[0].priority;
// Only clear if all priorities have been decremented to the minimum value
// At this point, all BSSIDs have been equally penalized and priority info is useless
if (first_priority != std::numeric_limits<int8_t>::min()) {
return;
}
for (const auto &pri : this->sta_priorities_) {
if (pri.priority != first_priority) {
return; // Not all same, nothing to do
}
}
// All priorities are identical - clear the vector to save memory
ESP_LOGD(TAG, "Clearing BSSID priorities (all identical)");
// All priorities are at minimum - clear the vector to save memory and reset
ESP_LOGD(TAG, "Clearing BSSID priorities (all at minimum)");
this->sta_priorities_.clear();
this->sta_priorities_.shrink_to_fit();
}
@@ -1375,9 +1383,9 @@ void WiFiComponent::log_and_adjust_priority_for_failed_connect_() {
ESP_LOGD(TAG, "Failed " LOG_SECRET("'%s'") " " LOG_SECRET("(%s)") ", priority %d → %d", ssid.c_str(),
format_mac_address_pretty(failed_bssid.value().data()).c_str(), old_priority, new_priority);
// After adjusting priority, check if all priorities are now identical
// If so, clear the vector to save memory
this->clear_priorities_if_all_same_();
// After adjusting priority, check if all priorities are now at minimum
// If so, clear the vector to save memory and reset for fresh start
this->clear_priorities_if_all_min_();
}
/// Handle target advancement or retry counter increment when staying in the same phase

View File

@@ -396,8 +396,8 @@ class WiFiComponent : public Component {
int8_t find_next_hidden_sta_(int8_t start_index, bool include_explicit_hidden = true);
/// Log failed connection and decrease BSSID priority to avoid repeated attempts
void log_and_adjust_priority_for_failed_connect_();
/// Clear BSSID priority tracking if all priorities are identical (saves memory)
void clear_priorities_if_all_same_();
/// Clear BSSID priority tracking if all priorities are at minimum (saves memory)
void clear_priorities_if_all_min_();
/// Advance to next target (AP/SSID) within current phase, or increment retry counter
/// Called when staying in the same phase after a failed connection attempt
void advance_to_next_target_or_increment_retry_();