Skip to content

Commit 2d25085

Browse files
committed
Handle WiFi Station failure gracefully during web config
1 parent 643cef0 commit 2d25085

File tree

4 files changed

+72
-46
lines changed

4 files changed

+72
-46
lines changed

Firmware/RTK_Everywhere/AP-Config/src/main.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2358,7 +2358,13 @@ function checkingNewFirmware() {
23582358

23592359
function newFirmwareVersion(firmwareVersion) {
23602360
clearMsg('firmwareCheckNewMsg');
2361-
if (firmwareVersion == "ERROR") {
2361+
if (firmwareVersion == "NO_INTERNET") {
2362+
showMsgError('firmwareCheckNewMsg', "No internet");
2363+
hide("divGetNewFirmware");
2364+
ge("btnCheckNewFirmware").disabled = false;
2365+
return;
2366+
}
2367+
else if (firmwareVersion == "NO_SERVER") {
23622368
showMsgError('firmwareCheckNewMsg', "Network or Server not available");
23632369
hide("divGetNewFirmware");
23642370
ge("btnCheckNewFirmware").disabled = false;

Firmware/RTK_Everywhere/WebServer.ino

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ static const char *const webServerStateNames[] = {
2727

2828
static const int webServerStateEntries = sizeof(webServerStateNames) / sizeof(webServerStateNames[0]);
2929

30-
static NetPriority_t webServerPriority = NETWORK_OFFLINE;
3130
static uint8_t webServerState;
3231

3332
// Once connected to the access point for WiFi Config, the ESP32 sends current setting values in one long string to
@@ -784,8 +783,8 @@ void webServerUpdate()
784783

785784
// Wait for connection to the network
786785
case WEBSERVER_STATE_WAIT_FOR_NETWORK:
787-
// Wait until the network is connected to the media
788-
if (networkIsConnected(&webServerPriority))
786+
// Wait until the network is connected to the internet or has WiFi AP
787+
if (networkHasInternet() || wifiApIsRunning())
789788
{
790789
if (settings.debugWebServer)
791790
systemPrintln("Web Server connected to network");
@@ -797,7 +796,7 @@ void webServerUpdate()
797796
// Start the web server
798797
case WEBSERVER_STATE_NETWORK_CONNECTED: {
799798
// Determine if the network has failed
800-
if (!networkIsConnected(&webServerPriority))
799+
if (networkHasInternet() == false && wifiApIsRunning() == false)
801800
webServerStop();
802801
if (settings.debugWebServer)
803802
systemPrintln("Assigning web server resources");
@@ -813,7 +812,7 @@ void webServerUpdate()
813812
// Allow web services
814813
case WEBSERVER_STATE_RUNNING:
815814
// Determine if the network has failed
816-
if (!networkIsConnected(&webServerPriority))
815+
if (networkHasInternet() == false && wifiApIsRunning() == false)
817816
webServerStop();
818817

819818
// This state is exited when webServerStop() is called

Firmware/RTK_Everywhere/menuCommands.ino

Lines changed: 54 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1290,38 +1290,56 @@ SettingValueResponse updateSettingWithValue(bool inCommands, const char *setting
12901290

12911291
sendStringToWebsocket((char *)"checkingNewFirmware,1,"); // Tell the config page we received their request
12921292

1293-
// Indicate to the OTA state machine that we need to do a version check
1294-
otaRequestFirmwareVersionCheck = true;
1293+
// We don't use the OTA state machine here because we need to respond to
1294+
// Web Config immediately of success or failure
1295+
1296+
// If we're in AP only mode (no internet), try WiFi with current SSIDs
1297+
if (networkIsInterfaceStarted(NETWORK_WIFI) && networkHasInternet() == false)
1298+
{
1299+
wifiStart();
1300+
}
12951301

12961302
// Get firmware version from server
1297-
// otaCheckVersion will call wifiConnect if needed
1298-
// if (otaCheckVersion(reportedVersion, sizeof(reportedVersion)))
1299-
// {
1300-
// // We got a version number, now determine if it's newer or not
1301-
// char currentVersion[21];
1302-
// getFirmwareVersion(currentVersion, sizeof(currentVersion), enableRCFirmware);
1303-
// if (isReportedVersionNewer(reportedVersion, currentVersion) == true)
1304-
// {
1305-
// if (settings.debugWebServer == true)
1306-
// systemPrintln("New version detected");
1307-
// snprintf(newVersionCSV, sizeof(newVersionCSV), "newFirmwareVersion,%s,", reportedVersion);
1308-
// }
1309-
// else
1310-
// {
1311-
// if (settings.debugWebServer == true)
1312-
// systemPrintln("No new firmware available");
1313-
// snprintf(newVersionCSV, sizeof(newVersionCSV), "newFirmwareVersion,CURRENT,");
1314-
// }
1315-
// }
1316-
// else
1317-
// {
1318-
// // Failed to get version number
1319-
// if (settings.debugWebServer == true)
1320-
// systemPrintln("Sending error to AP config page");
1321-
// snprintf(newVersionCSV, sizeof(newVersionCSV), "newFirmwareVersion,ERROR,");
1322-
// }
1323-
1324-
// sendStringToWebsocket(newVersionCSV);
1303+
char newVersionCSV[40];
1304+
if (networkHasInternet() == false)
1305+
{
1306+
// No internet. Report error.
1307+
if (settings.debugWebServer == true)
1308+
systemPrintln("No internet available. Sending error to Web config page.");
1309+
snprintf(newVersionCSV, sizeof(newVersionCSV), "newFirmwareVersion,NO_INTERNET,");
1310+
}
1311+
else
1312+
{
1313+
char otaReportedVersion[50];
1314+
if (otaCheckVersion(otaReportedVersion, sizeof(otaReportedVersion)))
1315+
{
1316+
// We got a version number, now determine if it's newer or not
1317+
char currentVersion[40];
1318+
getFirmwareVersion(currentVersion, sizeof(currentVersion), enableRCFirmware);
1319+
if (isReportedVersionNewer(otaReportedVersion, currentVersion) == true)
1320+
{
1321+
if (settings.debugWebServer == true)
1322+
systemPrintln("New version detected");
1323+
snprintf(newVersionCSV, sizeof(newVersionCSV), "newFirmwareVersion,%s,", otaReportedVersion);
1324+
}
1325+
else
1326+
{
1327+
if (settings.debugWebServer == true)
1328+
systemPrintln("No new firmware available");
1329+
snprintf(newVersionCSV, sizeof(newVersionCSV), "newFirmwareVersion,CURRENT,");
1330+
}
1331+
}
1332+
else
1333+
{
1334+
// Failed to get version number
1335+
if (settings.debugWebServer == true)
1336+
systemPrintln("Sending error to Web config page");
1337+
snprintf(newVersionCSV, sizeof(newVersionCSV), "newFirmwareVersion,NO_SERVER,");
1338+
}
1339+
}
1340+
1341+
sendStringToWebsocket(newVersionCSV);
1342+
13251343
knownSetting = true;
13261344
}
13271345
else if (strcmp(settingName, "getNewFirmware") == 0)
@@ -2326,12 +2344,12 @@ SettingValueResponse getSettingValue(bool inCommands, const char *settingName, c
23262344
break;
23272345
// System state at power on. Convert various system states to either Rover, Base, NTP, or BaseCast.
23282346
// Manually handled below
2329-
// case tSysState: {
2330-
// SystemState *ptr = (SystemState *)var;
2331-
// writeToString(settingValueStr, (int)*ptr);
2332-
// knownSetting = true;
2333-
// }
2334-
break;
2347+
// case tSysState: {
2348+
// SystemState *ptr = (SystemState *)var;
2349+
// writeToString(settingValueStr, (int)*ptr);
2350+
// knownSetting = true;
2351+
// }
2352+
break;
23352353
case tPulseEdg: {
23362354
pulseEdgeType_e *ptr = (pulseEdgeType_e *)var;
23372355
writeToString(settingValueStr, (int)*ptr);

Firmware/RTK_Everywhere/menuFirmware.ino

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ static const int otaStateEntries = sizeof(otaStateNames) / sizeof(otaStateNames[
3333
//----------------------------------------
3434

3535
static uint32_t otaLastUpdateCheck;
36-
static NetPriority_t otaPriority = NETWORK_OFFLINE;
3736
static uint8_t otaState;
3837

3938
#endif // COMPILE_OTA_AUTO
@@ -841,7 +840,9 @@ void otaUpdate()
841840
otaUpdateStop();
842841

843842
// Wait until the network is connected to the media
844-
else if (networkIsConnected(&otaPriority))
843+
// else if (networkHasInternet())
844+
else if (networkInterfaceHasInternet(
845+
NETWORK_WIFI)) // TODO Remove once OTA works over other network interfaces
845846
{
846847
if (settings.debugFirmwareUpdate)
847848
systemPrintln("Firmware update connected to network");
@@ -854,7 +855,9 @@ void otaUpdate()
854855
// Get firmware version from server
855856
case OTA_STATE_GET_FIRMWARE_VERSION:
856857
// Determine if the network has failed
857-
if (!networkIsConnected(&otaPriority))
858+
// if (networkHasInternet() == false)
859+
if (networkInterfaceHasInternet(NETWORK_WIFI) ==
860+
false) // TODO Remove once OTA works over other network interfaces
858861
otaUpdateStop();
859862
if (settings.debugFirmwareUpdate)
860863
systemPrintln("Checking for latest firmware version");
@@ -910,7 +913,7 @@ void otaUpdate()
910913
// Update the firmware
911914
case OTA_STATE_UPDATE_FIRMWARE:
912915
// Determine if the network has failed
913-
if (!networkIsConnected(&otaPriority))
916+
if (networkHasInternet() == false)
914917
otaUpdateStop();
915918
else
916919
{

0 commit comments

Comments
 (0)