sta: fix reconnect ap when ap lost
Signed-off-by: YoungSoo Shin <shinys000114@gmail.com>
This commit is contained in:
@@ -8,5 +8,6 @@
|
|||||||
void wifi_init_sta(void);
|
void wifi_init_sta(void);
|
||||||
void wifi_init_ap(void);
|
void wifi_init_ap(void);
|
||||||
void initialize_sntp(void);
|
void initialize_sntp(void);
|
||||||
|
void wifi_set_auto_reconnect(bool enable);
|
||||||
|
|
||||||
#endif // ODROID_POWER_MATE_PRIV_WIFI_H
|
#endif // ODROID_POWER_MATE_PRIV_WIFI_H
|
||||||
|
|||||||
@@ -81,6 +81,14 @@ void wifi_scan_aps(wifi_ap_record_t** ap_records, uint16_t* count)
|
|||||||
*count = 0;
|
*count = 0;
|
||||||
*ap_records = NULL;
|
*ap_records = NULL;
|
||||||
|
|
||||||
|
wifi_set_auto_reconnect(false);
|
||||||
|
|
||||||
|
wifi_ap_record_t ap_info;
|
||||||
|
if (esp_wifi_sta_get_ap_info(&ap_info) != ESP_OK)
|
||||||
|
{
|
||||||
|
esp_wifi_disconnect();
|
||||||
|
}
|
||||||
|
|
||||||
// Start scan, this is a blocking call
|
// Start scan, this is a blocking call
|
||||||
if (esp_wifi_scan_start(NULL, true) == ESP_OK)
|
if (esp_wifi_scan_start(NULL, true) == ESP_OK)
|
||||||
{
|
{
|
||||||
@@ -100,6 +108,16 @@ void wifi_scan_aps(wifi_ap_record_t** ap_records, uint16_t* count)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wifi_set_auto_reconnect(true);
|
||||||
|
|
||||||
|
if (esp_wifi_sta_get_ap_info(&ap_info) != ESP_OK)
|
||||||
|
{
|
||||||
|
if (!nconfig_value_is_not_set(WIFI_SSID))
|
||||||
|
{
|
||||||
|
wifi_connect();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
esp_err_t wifi_get_current_ap_info(wifi_ap_record_t* ap_info)
|
esp_err_t wifi_get_current_ap_info(wifi_ap_record_t* ap_info)
|
||||||
|
|||||||
@@ -16,9 +16,13 @@
|
|||||||
#include "wifi.h"
|
#include "wifi.h"
|
||||||
|
|
||||||
#include "indicator.h"
|
#include "indicator.h"
|
||||||
|
static bool s_auto_reconnect = true;
|
||||||
|
|
||||||
static const char* TAG = "WIFI";
|
static const char* TAG = "WIFI";
|
||||||
|
|
||||||
|
void wifi_set_auto_reconnect(bool enable) { s_auto_reconnect = enable; }
|
||||||
|
|
||||||
|
|
||||||
static void wifi_event_handler(void* arg, esp_event_base_t event_base, int32_t event_id, void* event_data)
|
static void wifi_event_handler(void* arg, esp_event_base_t event_base, int32_t event_id, void* event_data)
|
||||||
{
|
{
|
||||||
if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_AP_STACONNECTED)
|
if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_AP_STACONNECTED)
|
||||||
@@ -46,10 +50,18 @@ static void wifi_event_handler(void* arg, esp_event_base_t event_base, int32_t e
|
|||||||
}
|
}
|
||||||
else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED)
|
else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED)
|
||||||
{
|
{
|
||||||
led_set(LED_RED, BLINK_TRIPLE);
|
led_set(LED_BLU, BLINK_TRIPLE);
|
||||||
wifi_event_sta_disconnected_t* event = (wifi_event_sta_disconnected_t*)event_data;
|
wifi_event_sta_disconnected_t* event = (wifi_event_sta_disconnected_t*)event_data;
|
||||||
ESP_LOGW(TAG, "Disconnected from AP, reason: %s", wifi_reason_str(event->reason));
|
ESP_LOGW(TAG, "Disconnected from AP, reason: %s", wifi_reason_str(event->reason));
|
||||||
// ESP-IDF will automatically try to reconnect by default.
|
|
||||||
|
if (event->reason != WIFI_REASON_ASSOC_LEAVE)
|
||||||
|
{
|
||||||
|
if (s_auto_reconnect && !nconfig_value_is_not_set(WIFI_SSID))
|
||||||
|
{
|
||||||
|
ESP_LOGI(TAG, "Connection lost, attempting to reconnect...");
|
||||||
|
esp_wifi_connect();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP)
|
else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user