mirror of
				https://github.com/esphome/esphome.git
				synced 2025-11-04 09:01:49 +00:00 
			
		
		
		
	Fix some issues with wifi driver after IDF refactor (#2387)
This commit is contained in:
		@@ -24,11 +24,7 @@ namespace wifi {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static const char *const TAG = "wifi_esp32";
 | 
					static const char *const TAG = "wifi_esp32";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static bool s_sta_connected = false;          // NOLINT(cppcoreguidelines-avoid-non-const-global-variables)
 | 
					static bool s_sta_connecting = false;  // NOLINT(cppcoreguidelines-avoid-non-const-global-variables)
 | 
				
			||||||
static bool s_sta_got_ip = false;             // NOLINT(cppcoreguidelines-avoid-non-const-global-variables)
 | 
					 | 
				
			||||||
static bool s_sta_connect_not_found = false;  // NOLINT(cppcoreguidelines-avoid-non-const-global-variables)
 | 
					 | 
				
			||||||
static bool s_sta_connect_error = false;      // NOLINT(cppcoreguidelines-avoid-non-const-global-variables)
 | 
					 | 
				
			||||||
static bool s_sta_connecting = false;         // NOLINT(cppcoreguidelines-avoid-non-const-global-variables)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool WiFiComponent::wifi_mode_(optional<bool> sta, optional<bool> ap) {
 | 
					bool WiFiComponent::wifi_mode_(optional<bool> sta, optional<bool> ap) {
 | 
				
			||||||
  uint8_t current_mode = WiFiClass::getMode();
 | 
					  uint8_t current_mode = WiFiClass::getMode();
 | 
				
			||||||
@@ -122,8 +118,8 @@ bool WiFiComponent::wifi_sta_ip_config_(optional<ManualIP> manual_ip) {
 | 
				
			|||||||
  info.netmask.addr = static_cast<uint32_t>(manual_ip->subnet);
 | 
					  info.netmask.addr = static_cast<uint32_t>(manual_ip->subnet);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  esp_err_t dhcp_stop_ret = tcpip_adapter_dhcpc_stop(TCPIP_ADAPTER_IF_STA);
 | 
					  esp_err_t dhcp_stop_ret = tcpip_adapter_dhcpc_stop(TCPIP_ADAPTER_IF_STA);
 | 
				
			||||||
  if (dhcp_stop_ret != ESP_OK) {
 | 
					  if (dhcp_stop_ret != ESP_OK && dhcp_stop_ret != ESP_ERR_TCPIP_ADAPTER_DHCP_ALREADY_STOPPED) {
 | 
				
			||||||
    ESP_LOGV(TAG, "Stopping DHCP client failed! %d", dhcp_stop_ret);
 | 
					    ESP_LOGV(TAG, "Stopping DHCP client failed! %s", esp_err_to_name(dhcp_stop_ret));
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  esp_err_t wifi_set_info_ret = tcpip_adapter_set_ip_info(TCPIP_ADAPTER_IF_STA, &info);
 | 
					  esp_err_t wifi_set_info_ret = tcpip_adapter_set_ip_info(TCPIP_ADAPTER_IF_STA, &info);
 | 
				
			||||||
@@ -280,18 +276,14 @@ bool WiFiComponent::wifi_sta_connect_(const WiFiAP &ap) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  this->wifi_apply_hostname_();
 | 
					  this->wifi_apply_hostname_();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  s_sta_connecting = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  err = esp_wifi_connect();
 | 
					  err = esp_wifi_connect();
 | 
				
			||||||
  if (err != ESP_OK) {
 | 
					  if (err != ESP_OK) {
 | 
				
			||||||
    ESP_LOGW(TAG, "esp_wifi_connect failed! %d", err);
 | 
					    ESP_LOGW(TAG, "esp_wifi_connect failed! %d", err);
 | 
				
			||||||
    return false;
 | 
					    return false;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  s_sta_connecting = true;
 | 
					 | 
				
			||||||
  s_sta_connected = false;
 | 
					 | 
				
			||||||
  s_sta_got_ip = false;
 | 
					 | 
				
			||||||
  s_sta_connect_error = false;
 | 
					 | 
				
			||||||
  s_sta_connect_not_found = false;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  return true;
 | 
					  return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
const char *get_auth_mode_str(uint8_t mode) {
 | 
					const char *get_auth_mode_str(uint8_t mode) {
 | 
				
			||||||
@@ -402,35 +394,78 @@ const char *get_disconnect_reason_str(uint8_t reason) {
 | 
				
			|||||||
      return "Unspecified";
 | 
					      return "Unspecified";
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if ESP_IDF_VERSION_MAJOR >= 4
 | 
					#if ESP_IDF_VERSION_MAJOR >= 4
 | 
				
			||||||
void WiFiComponent::wifi_event_callback_(arduino_event_id_t event, arduino_event_info_t info) {
 | 
					
 | 
				
			||||||
#else
 | 
					#define ESPHOME_EVENT_ID_WIFI_READY ARDUINO_EVENT_WIFI_READY
 | 
				
			||||||
void WiFiComponent::wifi_event_callback_(system_event_id_t event, system_event_info_t info) {
 | 
					#define ESPHOME_EVENT_ID_WIFI_SCAN_DONE ARDUINO_EVENT_WIFI_SCAN_DONE
 | 
				
			||||||
#endif
 | 
					#define ESPHOME_EVENT_ID_WIFI_STA_START ARDUINO_EVENT_WIFI_STA_START
 | 
				
			||||||
 | 
					#define ESPHOME_EVENT_ID_WIFI_STA_STOP ARDUINO_EVENT_WIFI_STA_STOP
 | 
				
			||||||
 | 
					#define ESPHOME_EVENT_ID_WIFI_STA_CONNECTED ARDUINO_EVENT_WIFI_STA_CONNECTED
 | 
				
			||||||
 | 
					#define ESPHOME_EVENT_ID_WIFI_STA_DISCONNECTED ARDUINO_EVENT_WIFI_STA_DISCONNECTED
 | 
				
			||||||
 | 
					#define ESPHOME_EVENT_ID_WIFI_STA_AUTHMODE_CHANGE ARDUINO_EVENT_WIFI_STA_AUTHMODE_CHANGE
 | 
				
			||||||
 | 
					#define ESPHOME_EVENT_ID_WIFI_STA_GOT_IP ARDUINO_EVENT_WIFI_STA_GOT_IP
 | 
				
			||||||
 | 
					#define ESPHOME_EVENT_ID_WIFI_STA_GOT_IP6 ARDUINO_EVENT_WIFI_STA_GOT_IP6
 | 
				
			||||||
 | 
					#define ESPHOME_EVENT_ID_WIFI_STA_LOST_IP ARDUINO_EVENT_WIFI_STA_LOST_IP
 | 
				
			||||||
 | 
					#define ESPHOME_EVENT_ID_WIFI_AP_START ARDUINO_EVENT_WIFI_AP_START
 | 
				
			||||||
 | 
					#define ESPHOME_EVENT_ID_WIFI_AP_STOP ARDUINO_EVENT_WIFI_AP_STOP
 | 
				
			||||||
 | 
					#define ESPHOME_EVENT_ID_WIFI_AP_STACONNECTED ARDUINO_EVENT_WIFI_AP_STACONNECTED
 | 
				
			||||||
 | 
					#define ESPHOME_EVENT_ID_WIFI_AP_STADISCONNECTED ARDUINO_EVENT_WIFI_AP_STADISCONNECTED
 | 
				
			||||||
 | 
					#define ESPHOME_EVENT_ID_WIFI_AP_STAIPASSIGNED ARDUINO_EVENT_WIFI_AP_STAIPASSIGNED
 | 
				
			||||||
 | 
					#define ESPHOME_EVENT_ID_WIFI_AP_PROBEREQRECVED ARDUINO_EVENT_WIFI_AP_PROBEREQRECVED
 | 
				
			||||||
 | 
					#define ESPHOME_EVENT_ID_WIFI_AP_GOT_IP6 ARDUINO_EVENT_WIFI_AP_GOT_IP6
 | 
				
			||||||
 | 
					using esphome_wifi_event_id_t = arduino_event_id_t;
 | 
				
			||||||
 | 
					using esphome_wifi_event_info_t = arduino_event_info_t;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#else  // ESP_IDF_VERSION_MAJOR >= 4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define ESPHOME_EVENT_ID_WIFI_READY SYSTEM_EVENT_WIFI_READY
 | 
				
			||||||
 | 
					#define ESPHOME_EVENT_ID_WIFI_SCAN_DONE SYSTEM_EVENT_SCAN_DONE
 | 
				
			||||||
 | 
					#define ESPHOME_EVENT_ID_WIFI_STA_START SYSTEM_EVENT_STA_START
 | 
				
			||||||
 | 
					#define ESPHOME_EVENT_ID_WIFI_STA_STOP SYSTEM_EVENT_STA_STOP
 | 
				
			||||||
 | 
					#define ESPHOME_EVENT_ID_WIFI_STA_CONNECTED SYSTEM_EVENT_STA_CONNECTED
 | 
				
			||||||
 | 
					#define ESPHOME_EVENT_ID_WIFI_STA_DISCONNECTED SYSTEM_EVENT_STA_DISCONNECTED
 | 
				
			||||||
 | 
					#define ESPHOME_EVENT_ID_WIFI_STA_AUTHMODE_CHANGE SYSTEM_EVENT_STA_AUTHMODE_CHANGE
 | 
				
			||||||
 | 
					#define ESPHOME_EVENT_ID_WIFI_STA_GOT_IP SYSTEM_EVENT_STA_GOT_IP
 | 
				
			||||||
 | 
					#define ESPHOME_EVENT_ID_WIFI_STA_LOST_IP SYSTEM_EVENT_STA_LOST_IP
 | 
				
			||||||
 | 
					#define ESPHOME_EVENT_ID_WIFI_AP_START SYSTEM_EVENT_AP_START
 | 
				
			||||||
 | 
					#define ESPHOME_EVENT_ID_WIFI_AP_STOP SYSTEM_EVENT_AP_STOP
 | 
				
			||||||
 | 
					#define ESPHOME_EVENT_ID_WIFI_AP_STACONNECTED SYSTEM_EVENT_AP_STACONNECTED
 | 
				
			||||||
 | 
					#define ESPHOME_EVENT_ID_WIFI_AP_STADISCONNECTED SYSTEM_EVENT_AP_STADISCONNECTED
 | 
				
			||||||
 | 
					#define ESPHOME_EVENT_ID_WIFI_AP_STAIPASSIGNED SYSTEM_EVENT_AP_STAIPASSIGNED
 | 
				
			||||||
 | 
					#define ESPHOME_EVENT_ID_WIFI_AP_PROBEREQRECVED SYSTEM_EVENT_AP_PROBEREQRECVED
 | 
				
			||||||
 | 
					using esphome_wifi_event_id_t = system_event_id_t;
 | 
				
			||||||
 | 
					using esphome_wifi_event_info_t = system_event_info_t;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif  // !(ESP_IDF_VERSION_MAJOR >= 4)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void WiFiComponent::wifi_event_callback_(esphome_wifi_event_id_t event, esphome_wifi_event_info_t info) {
 | 
				
			||||||
  switch (event) {
 | 
					  switch (event) {
 | 
				
			||||||
    case SYSTEM_EVENT_WIFI_READY: {
 | 
					    case ESPHOME_EVENT_ID_WIFI_READY: {
 | 
				
			||||||
      ESP_LOGV(TAG, "Event: WiFi ready");
 | 
					      ESP_LOGV(TAG, "Event: WiFi ready");
 | 
				
			||||||
      break;
 | 
					      break;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    case SYSTEM_EVENT_SCAN_DONE: {
 | 
					    case ESPHOME_EVENT_ID_WIFI_SCAN_DONE: {
 | 
				
			||||||
#if ESP_IDF_VERSION_MAJOR >= 4
 | 
					#if ESP_IDF_VERSION_MAJOR >= 4
 | 
				
			||||||
      auto it = info.wifi_scan_done;
 | 
					      auto it = info.wifi_scan_done;
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
      auto it = info.scan_done;
 | 
					      auto it = info.scan_done;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
      ESP_LOGV(TAG, "Event: WiFi Scan Done status=%u number=%u scan_id=%u", it.status, it.number, it.scan_id);
 | 
					      ESP_LOGV(TAG, "Event: WiFi Scan Done status=%u number=%u scan_id=%u", it.status, it.number, it.scan_id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      this->wifi_scan_done_callback_();
 | 
				
			||||||
      break;
 | 
					      break;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    case SYSTEM_EVENT_STA_START: {
 | 
					    case ESPHOME_EVENT_ID_WIFI_STA_START: {
 | 
				
			||||||
      ESP_LOGV(TAG, "Event: WiFi STA start");
 | 
					      ESP_LOGV(TAG, "Event: WiFi STA start");
 | 
				
			||||||
      tcpip_adapter_set_hostname(TCPIP_ADAPTER_IF_STA, App.get_name().c_str());
 | 
					      tcpip_adapter_set_hostname(TCPIP_ADAPTER_IF_STA, App.get_name().c_str());
 | 
				
			||||||
      break;
 | 
					      break;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    case SYSTEM_EVENT_STA_STOP: {
 | 
					    case ESPHOME_EVENT_ID_WIFI_STA_STOP: {
 | 
				
			||||||
      ESP_LOGV(TAG, "Event: WiFi STA stop");
 | 
					      ESP_LOGV(TAG, "Event: WiFi STA stop");
 | 
				
			||||||
      break;
 | 
					      break;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    case SYSTEM_EVENT_STA_CONNECTED: {
 | 
					    case ESPHOME_EVENT_ID_WIFI_STA_CONNECTED: {
 | 
				
			||||||
#if ESP_IDF_VERSION_MAJOR >= 4
 | 
					#if ESP_IDF_VERSION_MAJOR >= 4
 | 
				
			||||||
      auto it = info.wifi_sta_connected;
 | 
					      auto it = info.wifi_sta_connected;
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
@@ -441,10 +476,10 @@ void WiFiComponent::wifi_event_callback_(system_event_id_t event, system_event_i
 | 
				
			|||||||
      buf[it.ssid_len] = '\0';
 | 
					      buf[it.ssid_len] = '\0';
 | 
				
			||||||
      ESP_LOGV(TAG, "Event: Connected ssid='%s' bssid=" LOG_SECRET("%s") " channel=%u, authmode=%s", buf,
 | 
					      ESP_LOGV(TAG, "Event: Connected ssid='%s' bssid=" LOG_SECRET("%s") " channel=%u, authmode=%s", buf,
 | 
				
			||||||
               format_mac_addr(it.bssid).c_str(), it.channel, get_auth_mode_str(it.authmode));
 | 
					               format_mac_addr(it.bssid).c_str(), it.channel, get_auth_mode_str(it.authmode));
 | 
				
			||||||
      s_sta_connected = true;
 | 
					
 | 
				
			||||||
      break;
 | 
					      break;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    case SYSTEM_EVENT_STA_DISCONNECTED: {
 | 
					    case ESPHOME_EVENT_ID_WIFI_STA_DISCONNECTED: {
 | 
				
			||||||
#if ESP_IDF_VERSION_MAJOR >= 4
 | 
					#if ESP_IDF_VERSION_MAJOR >= 4
 | 
				
			||||||
      auto it = info.wifi_sta_disconnected;
 | 
					      auto it = info.wifi_sta_disconnected;
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
@@ -455,17 +490,26 @@ void WiFiComponent::wifi_event_callback_(system_event_id_t event, system_event_i
 | 
				
			|||||||
      buf[it.ssid_len] = '\0';
 | 
					      buf[it.ssid_len] = '\0';
 | 
				
			||||||
      if (it.reason == WIFI_REASON_NO_AP_FOUND) {
 | 
					      if (it.reason == WIFI_REASON_NO_AP_FOUND) {
 | 
				
			||||||
        ESP_LOGW(TAG, "Event: Disconnected ssid='%s' reason='Probe Request Unsuccessful'", buf);
 | 
					        ESP_LOGW(TAG, "Event: Disconnected ssid='%s' reason='Probe Request Unsuccessful'", buf);
 | 
				
			||||||
        s_sta_connect_not_found = true;
 | 
					 | 
				
			||||||
      } else {
 | 
					      } else {
 | 
				
			||||||
        ESP_LOGW(TAG, "Event: Disconnected ssid='%s' bssid=" LOG_SECRET("%s") " reason='%s'", buf,
 | 
					        ESP_LOGW(TAG, "Event: Disconnected ssid='%s' bssid=" LOG_SECRET("%s") " reason='%s'", buf,
 | 
				
			||||||
                 format_mac_addr(it.bssid).c_str(), get_disconnect_reason_str(it.reason));
 | 
					                 format_mac_addr(it.bssid).c_str(), get_disconnect_reason_str(it.reason));
 | 
				
			||||||
        s_sta_connect_error = true;
 | 
					 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      s_sta_connected = false;
 | 
					
 | 
				
			||||||
 | 
					      uint8_t reason = it.reason;
 | 
				
			||||||
 | 
					      if (reason == WIFI_REASON_AUTH_EXPIRE || reason == WIFI_REASON_BEACON_TIMEOUT ||
 | 
				
			||||||
 | 
					          reason == WIFI_REASON_NO_AP_FOUND || reason == WIFI_REASON_ASSOC_FAIL ||
 | 
				
			||||||
 | 
					          reason == WIFI_REASON_HANDSHAKE_TIMEOUT) {
 | 
				
			||||||
 | 
					        err_t err = esp_wifi_disconnect();
 | 
				
			||||||
 | 
					        if (err != ESP_OK) {
 | 
				
			||||||
 | 
					          ESP_LOGV(TAG, "Disconnect failed: %s", esp_err_to_name(err));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        this->error_from_callback_ = true;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      s_sta_connecting = false;
 | 
					      s_sta_connecting = false;
 | 
				
			||||||
      break;
 | 
					      break;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    case SYSTEM_EVENT_STA_AUTHMODE_CHANGE: {
 | 
					    case ESPHOME_EVENT_ID_WIFI_STA_AUTHMODE_CHANGE: {
 | 
				
			||||||
#if ESP_IDF_VERSION_MAJOR >= 4
 | 
					#if ESP_IDF_VERSION_MAJOR >= 4
 | 
				
			||||||
      auto it = info.wifi_sta_authmode_change;
 | 
					      auto it = info.wifi_sta_authmode_change;
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
@@ -487,27 +531,26 @@ void WiFiComponent::wifi_event_callback_(system_event_id_t event, system_event_i
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
      break;
 | 
					      break;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    case SYSTEM_EVENT_STA_GOT_IP: {
 | 
					    case ESPHOME_EVENT_ID_WIFI_STA_GOT_IP: {
 | 
				
			||||||
      auto it = info.got_ip.ip_info;
 | 
					      auto it = info.got_ip.ip_info;
 | 
				
			||||||
      ESP_LOGV(TAG, "Event: Got IP static_ip=%s gateway=%s", format_ip4_addr(it.ip).c_str(),
 | 
					      ESP_LOGV(TAG, "Event: Got IP static_ip=%s gateway=%s", format_ip4_addr(it.ip).c_str(),
 | 
				
			||||||
               format_ip4_addr(it.gw).c_str());
 | 
					               format_ip4_addr(it.gw).c_str());
 | 
				
			||||||
      s_sta_got_ip = true;
 | 
					      s_sta_connecting = false;
 | 
				
			||||||
      break;
 | 
					      break;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    case SYSTEM_EVENT_STA_LOST_IP: {
 | 
					    case ESPHOME_EVENT_ID_WIFI_STA_LOST_IP: {
 | 
				
			||||||
      ESP_LOGV(TAG, "Event: Lost IP");
 | 
					      ESP_LOGV(TAG, "Event: Lost IP");
 | 
				
			||||||
      s_sta_got_ip = false;
 | 
					 | 
				
			||||||
      break;
 | 
					      break;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    case SYSTEM_EVENT_AP_START: {
 | 
					    case ESPHOME_EVENT_ID_WIFI_AP_START: {
 | 
				
			||||||
      ESP_LOGV(TAG, "Event: WiFi AP start");
 | 
					      ESP_LOGV(TAG, "Event: WiFi AP start");
 | 
				
			||||||
      break;
 | 
					      break;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    case SYSTEM_EVENT_AP_STOP: {
 | 
					    case ESPHOME_EVENT_ID_WIFI_AP_STOP: {
 | 
				
			||||||
      ESP_LOGV(TAG, "Event: WiFi AP stop");
 | 
					      ESP_LOGV(TAG, "Event: WiFi AP stop");
 | 
				
			||||||
      break;
 | 
					      break;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    case SYSTEM_EVENT_AP_STACONNECTED: {
 | 
					    case ESPHOME_EVENT_ID_WIFI_AP_STACONNECTED: {
 | 
				
			||||||
#if ESP_IDF_VERSION_MAJOR >= 4
 | 
					#if ESP_IDF_VERSION_MAJOR >= 4
 | 
				
			||||||
      auto it = info.wifi_sta_connected;
 | 
					      auto it = info.wifi_sta_connected;
 | 
				
			||||||
      auto &mac = it.bssid;
 | 
					      auto &mac = it.bssid;
 | 
				
			||||||
@@ -518,7 +561,7 @@ void WiFiComponent::wifi_event_callback_(system_event_id_t event, system_event_i
 | 
				
			|||||||
      ESP_LOGV(TAG, "Event: AP client connected MAC=%s", format_mac_addr(mac).c_str());
 | 
					      ESP_LOGV(TAG, "Event: AP client connected MAC=%s", format_mac_addr(mac).c_str());
 | 
				
			||||||
      break;
 | 
					      break;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    case SYSTEM_EVENT_AP_STADISCONNECTED: {
 | 
					    case ESPHOME_EVENT_ID_WIFI_AP_STADISCONNECTED: {
 | 
				
			||||||
#if ESP_IDF_VERSION_MAJOR >= 4
 | 
					#if ESP_IDF_VERSION_MAJOR >= 4
 | 
				
			||||||
      auto it = info.wifi_sta_disconnected;
 | 
					      auto it = info.wifi_sta_disconnected;
 | 
				
			||||||
      auto &mac = it.bssid;
 | 
					      auto &mac = it.bssid;
 | 
				
			||||||
@@ -529,11 +572,11 @@ void WiFiComponent::wifi_event_callback_(system_event_id_t event, system_event_i
 | 
				
			|||||||
      ESP_LOGV(TAG, "Event: AP client disconnected MAC=%s", format_mac_addr(mac).c_str());
 | 
					      ESP_LOGV(TAG, "Event: AP client disconnected MAC=%s", format_mac_addr(mac).c_str());
 | 
				
			||||||
      break;
 | 
					      break;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    case SYSTEM_EVENT_AP_STAIPASSIGNED: {
 | 
					    case ESPHOME_EVENT_ID_WIFI_AP_STAIPASSIGNED: {
 | 
				
			||||||
      ESP_LOGV(TAG, "Event: AP client assigned IP");
 | 
					      ESP_LOGV(TAG, "Event: AP client assigned IP");
 | 
				
			||||||
      break;
 | 
					      break;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    case SYSTEM_EVENT_AP_PROBEREQRECVED: {
 | 
					    case ESPHOME_EVENT_ID_WIFI_AP_PROBEREQRECVED: {
 | 
				
			||||||
#if ESP_IDF_VERSION_MAJOR >= 4
 | 
					#if ESP_IDF_VERSION_MAJOR >= 4
 | 
				
			||||||
      auto it = info.wifi_ap_probereqrecved;
 | 
					      auto it = info.wifi_ap_probereqrecved;
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
@@ -545,31 +588,6 @@ void WiFiComponent::wifi_event_callback_(system_event_id_t event, system_event_i
 | 
				
			|||||||
    default:
 | 
					    default:
 | 
				
			||||||
      break;
 | 
					      break;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					 | 
				
			||||||
#if ESP_IDF_VERSION_MAJOR >= 4
 | 
					 | 
				
			||||||
  if (event == ARDUINO_EVENT_WIFI_STA_DISCONNECTED) {
 | 
					 | 
				
			||||||
    uint8_t reason = info.wifi_sta_disconnected.reason;
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
  if (event == SYSTEM_EVENT_STA_DISCONNECTED) {
 | 
					 | 
				
			||||||
    uint8_t reason = info.disconnected.reason;
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
    if (reason == WIFI_REASON_AUTH_EXPIRE || reason == WIFI_REASON_BEACON_TIMEOUT ||
 | 
					 | 
				
			||||||
        reason == WIFI_REASON_NO_AP_FOUND || reason == WIFI_REASON_ASSOC_FAIL ||
 | 
					 | 
				
			||||||
        reason == WIFI_REASON_HANDSHAKE_TIMEOUT) {
 | 
					 | 
				
			||||||
      err_t err = esp_wifi_disconnect();
 | 
					 | 
				
			||||||
      if (err != ESP_OK) {
 | 
					 | 
				
			||||||
        ESP_LOGV(TAG, "Disconnect failed: %s", esp_err_to_name(err));
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      this->error_from_callback_ = true;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
#if ESP_IDF_VERSION_MAJOR >= 4
 | 
					 | 
				
			||||||
  if (event == ARDUINO_EVENT_WIFI_SCAN_DONE) {
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
  if (event == SYSTEM_EVENT_SCAN_DONE) {
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
    this->wifi_scan_done_callback_();
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
void WiFiComponent::wifi_pre_setup_() {
 | 
					void WiFiComponent::wifi_pre_setup_() {
 | 
				
			||||||
  auto f = std::bind(&WiFiComponent::wifi_event_callback_, this, std::placeholders::_1, std::placeholders::_2);
 | 
					  auto f = std::bind(&WiFiComponent::wifi_event_callback_, this, std::placeholders::_1, std::placeholders::_2);
 | 
				
			||||||
@@ -579,16 +597,14 @@ void WiFiComponent::wifi_pre_setup_() {
 | 
				
			|||||||
  this->wifi_mode_(false, false);
 | 
					  this->wifi_mode_(false, false);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
WiFiSTAConnectStatus WiFiComponent::wifi_sta_connect_status_() {
 | 
					WiFiSTAConnectStatus WiFiComponent::wifi_sta_connect_status_() {
 | 
				
			||||||
  if (s_sta_connected && s_sta_got_ip) {
 | 
					  auto status = WiFiClass::status();
 | 
				
			||||||
 | 
					  if (status == WL_CONNECTED) {
 | 
				
			||||||
    return WiFiSTAConnectStatus::CONNECTED;
 | 
					    return WiFiSTAConnectStatus::CONNECTED;
 | 
				
			||||||
  }
 | 
					  } else if (status == WL_CONNECT_FAILED || status == WL_CONNECTION_LOST || status == WL_DISCONNECTED) {
 | 
				
			||||||
  if (s_sta_connect_error) {
 | 
					 | 
				
			||||||
    return WiFiSTAConnectStatus::ERROR_CONNECT_FAILED;
 | 
					    return WiFiSTAConnectStatus::ERROR_CONNECT_FAILED;
 | 
				
			||||||
  }
 | 
					  } else if (status == WL_NO_SSID_AVAIL) {
 | 
				
			||||||
  if (s_sta_connect_not_found) {
 | 
					 | 
				
			||||||
    return WiFiSTAConnectStatus::ERROR_NETWORK_NOT_FOUND;
 | 
					    return WiFiSTAConnectStatus::ERROR_NETWORK_NOT_FOUND;
 | 
				
			||||||
  }
 | 
					  } else if (s_sta_connecting) {
 | 
				
			||||||
  if (s_sta_connecting) {
 | 
					 | 
				
			||||||
    return WiFiSTAConnectStatus::CONNECTING;
 | 
					    return WiFiSTAConnectStatus::CONNECTING;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  return WiFiSTAConnectStatus::IDLE;
 | 
					  return WiFiSTAConnectStatus::IDLE;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -309,6 +309,14 @@ bool WiFiComponent::wifi_sta_connect_(const WiFiAP &ap) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  this->wifi_apply_hostname_();
 | 
					  this->wifi_apply_hostname_();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Reset flags, do this _before_ wifi_station_connect as the callback method
 | 
				
			||||||
 | 
					  // may be called from wifi_station_connect
 | 
				
			||||||
 | 
					  s_sta_connecting = true;
 | 
				
			||||||
 | 
					  s_sta_connected = false;
 | 
				
			||||||
 | 
					  s_sta_got_ip = false;
 | 
				
			||||||
 | 
					  s_sta_connect_error = false;
 | 
				
			||||||
 | 
					  s_sta_connect_not_found = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ETS_UART_INTR_DISABLE();
 | 
					  ETS_UART_INTR_DISABLE();
 | 
				
			||||||
  ret = wifi_station_connect();
 | 
					  ret = wifi_station_connect();
 | 
				
			||||||
  ETS_UART_INTR_ENABLE();
 | 
					  ETS_UART_INTR_ENABLE();
 | 
				
			||||||
@@ -325,12 +333,6 @@ bool WiFiComponent::wifi_sta_connect_(const WiFiAP &ap) {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  s_sta_connecting = true;
 | 
					 | 
				
			||||||
  s_sta_connected = false;
 | 
					 | 
				
			||||||
  s_sta_got_ip = false;
 | 
					 | 
				
			||||||
  s_sta_connect_error = false;
 | 
					 | 
				
			||||||
  s_sta_connect_not_found = false;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  return true;
 | 
					  return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -377,17 +377,20 @@ bool WiFiComponent::wifi_sta_connect_(const WiFiAP &ap) {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
#endif  // USE_WIFI_WPA2_EAP
 | 
					#endif  // USE_WIFI_WPA2_EAP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Reset flags, do this _before_ wifi_station_connect as the callback method
 | 
				
			||||||
 | 
					  // may be called from wifi_station_connect
 | 
				
			||||||
 | 
					  s_sta_connecting = true;
 | 
				
			||||||
 | 
					  s_sta_connected = false;
 | 
				
			||||||
 | 
					  s_sta_got_ip = false;
 | 
				
			||||||
 | 
					  s_sta_connect_error = false;
 | 
				
			||||||
 | 
					  s_sta_connect_not_found = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  err = esp_wifi_connect();
 | 
					  err = esp_wifi_connect();
 | 
				
			||||||
  if (err != ESP_OK) {
 | 
					  if (err != ESP_OK) {
 | 
				
			||||||
    ESP_LOGW(TAG, "esp_wifi_connect failed: %s", esp_err_to_name(err));
 | 
					    ESP_LOGW(TAG, "esp_wifi_connect failed: %s", esp_err_to_name(err));
 | 
				
			||||||
    return false;
 | 
					    return false;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  s_sta_connecting = true;
 | 
					 | 
				
			||||||
  s_sta_connected = false;
 | 
					 | 
				
			||||||
  s_sta_got_ip = false;
 | 
					 | 
				
			||||||
  s_sta_connect_error = false;
 | 
					 | 
				
			||||||
  s_sta_connect_not_found = false;
 | 
					 | 
				
			||||||
  return true;
 | 
					  return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user