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:
@@ -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
|
||||
|
||||
@@ -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_();
|
||||
|
||||
Reference in New Issue
Block a user