mirror of
https://github.com/meshtastic/firmware.git
synced 2025-05-10 07:11:59 +00:00
fix wifi hang when bad password used, cleanup wifi in general
This commit is contained in:
parent
72807f0fa0
commit
39df7108a8
@ -1,5 +1,6 @@
|
|||||||
#include "mesh/http/WiFiAPClient.h"
|
#include "mesh/http/WiFiAPClient.h"
|
||||||
#include "NodeDB.h"
|
#include "NodeDB.h"
|
||||||
|
#include "concurrency/Periodic.h"
|
||||||
#include "configuration.h"
|
#include "configuration.h"
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "mesh/http/WebServer.h"
|
#include "mesh/http/WebServer.h"
|
||||||
@ -9,6 +10,8 @@
|
|||||||
#include <ESPmDNS.h>
|
#include <ESPmDNS.h>
|
||||||
#include <WiFi.h>
|
#include <WiFi.h>
|
||||||
|
|
||||||
|
using namespace concurrency;
|
||||||
|
|
||||||
static void WiFiEvent(WiFiEvent_t event);
|
static void WiFiEvent(WiFiEvent_t event);
|
||||||
|
|
||||||
// DNS Server for the Captive Portal
|
// DNS Server for the Captive Portal
|
||||||
@ -23,6 +26,32 @@ bool forcedSoftAP = 0;
|
|||||||
|
|
||||||
bool APStartupComplete = 0;
|
bool APStartupComplete = 0;
|
||||||
|
|
||||||
|
static bool needReconnect = true; // If we create our reconnector, run it once at the beginning
|
||||||
|
|
||||||
|
static int32_t reconnectWiFi()
|
||||||
|
{
|
||||||
|
if (radioConfig.has_preferences && needReconnect) {
|
||||||
|
|
||||||
|
const char *wifiName = radioConfig.preferences.wifi_ssid;
|
||||||
|
const char *wifiPsw = radioConfig.preferences.wifi_password;
|
||||||
|
|
||||||
|
if (!*wifiPsw) // Treat empty password as no password
|
||||||
|
wifiPsw = NULL;
|
||||||
|
|
||||||
|
if (*wifiName) {
|
||||||
|
needReconnect = false;
|
||||||
|
|
||||||
|
DEBUG_MSG("... Reconnecting to WiFi access point");
|
||||||
|
WiFi.mode(WIFI_MODE_STA);
|
||||||
|
WiFi.begin(wifiName, wifiPsw);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 30 * 1000; // every 30 seconds
|
||||||
|
}
|
||||||
|
|
||||||
|
static Periodic *wifiReconnect;
|
||||||
|
|
||||||
bool isSoftAPForced()
|
bool isSoftAPForced()
|
||||||
{
|
{
|
||||||
return forcedSoftAP;
|
return forcedSoftAP;
|
||||||
@ -155,12 +184,8 @@ void initWifi(bool forceSoftAP)
|
|||||||
},
|
},
|
||||||
WiFiEvent_t::SYSTEM_EVENT_STA_DISCONNECTED);
|
WiFiEvent_t::SYSTEM_EVENT_STA_DISCONNECTED);
|
||||||
|
|
||||||
DEBUG_MSG("JOINING WIFI: ssid=%s\n", wifiName);
|
DEBUG_MSG("JOINING WIFI soon: ssid=%s\n", wifiName);
|
||||||
if (WiFi.begin(wifiName, wifiPsw) == WL_CONNECTED) {
|
wifiReconnect = new Periodic("WifiConnect", reconnectWiFi);
|
||||||
DEBUG_MSG("MY IP ADDRESS: %s\n", WiFi.localIP().toString().c_str());
|
|
||||||
} else {
|
|
||||||
DEBUG_MSG("Started Joining WIFI\n");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -205,7 +230,7 @@ static void WiFiEvent(WiFiEvent_t event)
|
|||||||
DEBUG_MSG("Disconnected from WiFi access point\n");
|
DEBUG_MSG("Disconnected from WiFi access point\n");
|
||||||
// Event 5
|
// Event 5
|
||||||
|
|
||||||
reconnectWiFi();
|
needReconnect = true;
|
||||||
break;
|
break;
|
||||||
case SYSTEM_EVENT_STA_AUTHMODE_CHANGE:
|
case SYSTEM_EVENT_STA_AUTHMODE_CHANGE:
|
||||||
DEBUG_MSG("Authentication mode of access point has changed\n");
|
DEBUG_MSG("Authentication mode of access point has changed\n");
|
||||||
@ -302,26 +327,6 @@ void handleDNSResponse()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void reconnectWiFi()
|
|
||||||
{
|
|
||||||
if (radioConfig.has_preferences) {
|
|
||||||
|
|
||||||
const char *wifiName = radioConfig.preferences.wifi_ssid;
|
|
||||||
const char *wifiPsw = radioConfig.preferences.wifi_password;
|
|
||||||
|
|
||||||
if (!*wifiPsw) // Treat empty password as no password
|
|
||||||
wifiPsw = NULL;
|
|
||||||
|
|
||||||
if (*wifiName) {
|
|
||||||
|
|
||||||
DEBUG_MSG("... Reconnecting to WiFi access point");
|
|
||||||
|
|
||||||
WiFi.mode(WIFI_MODE_STA);
|
|
||||||
WiFi.begin(wifiName, wifiPsw);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t getWifiDisconnectReason()
|
uint8_t getWifiDisconnectReason()
|
||||||
{
|
{
|
||||||
return wifiDisconnectReason;
|
return wifiDisconnectReason;
|
||||||
|
@ -16,8 +16,6 @@ bool isWifiAvailable();
|
|||||||
|
|
||||||
void handleDNSResponse();
|
void handleDNSResponse();
|
||||||
|
|
||||||
void reconnectWiFi();
|
|
||||||
|
|
||||||
bool isSoftAPForced();
|
bool isSoftAPForced();
|
||||||
|
|
||||||
uint8_t getWifiDisconnectReason();
|
uint8_t getWifiDisconnectReason();
|
||||||
|
Loading…
Reference in New Issue
Block a user