examples: gracefully shut down Wi-Fi before restart
This fixes the issue that if Wi-Fi is stopped from a shutdown handler, the code in connect.c tries to reconnect, and fails because Wi-Fi is already stopped. Also make the error check in connect.c less strict.
This commit is contained in:
parent
f0563b3844
commit
28a440521e
|
@ -73,6 +73,7 @@ esp_err_t example_connect(void)
|
||||||
}
|
}
|
||||||
s_connect_event_group = xEventGroupCreate();
|
s_connect_event_group = xEventGroupCreate();
|
||||||
start();
|
start();
|
||||||
|
ESP_ERROR_CHECK(esp_register_shutdown_handler(&stop));
|
||||||
xEventGroupWaitBits(s_connect_event_group, CONNECTED_BITS, true, true, portMAX_DELAY);
|
xEventGroupWaitBits(s_connect_event_group, CONNECTED_BITS, true, true, portMAX_DELAY);
|
||||||
ESP_LOGI(TAG, "Connected to %s", s_connection_name);
|
ESP_LOGI(TAG, "Connected to %s", s_connection_name);
|
||||||
ESP_LOGI(TAG, "IPv4 address: " IPSTR, IP2STR(&s_ip_addr));
|
ESP_LOGI(TAG, "IPv4 address: " IPSTR, IP2STR(&s_ip_addr));
|
||||||
|
@ -101,7 +102,11 @@ static void on_wifi_disconnect(void *arg, esp_event_base_t event_base,
|
||||||
int32_t event_id, void *event_data)
|
int32_t event_id, void *event_data)
|
||||||
{
|
{
|
||||||
ESP_LOGI(TAG, "Wi-Fi disconnected, trying to reconnect...");
|
ESP_LOGI(TAG, "Wi-Fi disconnected, trying to reconnect...");
|
||||||
ESP_ERROR_CHECK(esp_wifi_connect());
|
esp_err_t err = esp_wifi_connect();
|
||||||
|
if (err == ESP_ERR_WIFI_NOT_STARTED) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ESP_ERROR_CHECK(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_EXAMPLE_CONNECT_IPV6
|
#ifdef CONFIG_EXAMPLE_CONNECT_IPV6
|
||||||
|
@ -149,7 +154,11 @@ static void stop(void)
|
||||||
ESP_ERROR_CHECK(esp_event_handler_unregister(IP_EVENT, IP_EVENT_GOT_IP6, &on_got_ipv6));
|
ESP_ERROR_CHECK(esp_event_handler_unregister(IP_EVENT, IP_EVENT_GOT_IP6, &on_got_ipv6));
|
||||||
ESP_ERROR_CHECK(esp_event_handler_unregister(WIFI_EVENT, WIFI_EVENT_STA_CONNECTED, &on_wifi_connect));
|
ESP_ERROR_CHECK(esp_event_handler_unregister(WIFI_EVENT, WIFI_EVENT_STA_CONNECTED, &on_wifi_connect));
|
||||||
#endif
|
#endif
|
||||||
ESP_ERROR_CHECK(esp_wifi_stop());
|
esp_err_t err = esp_wifi_stop();
|
||||||
|
if (err == ESP_ERR_WIFI_NOT_INIT) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ESP_ERROR_CHECK(err);
|
||||||
ESP_ERROR_CHECK(esp_wifi_deinit());
|
ESP_ERROR_CHECK(esp_wifi_deinit());
|
||||||
}
|
}
|
||||||
#endif // CONFIG_EXAMPLE_CONNECT_WIFI
|
#endif // CONFIG_EXAMPLE_CONNECT_WIFI
|
||||||
|
|
Loading…
Reference in a new issue