Skip to content

Commit 2408778

Browse files
committed
Don't delete websocket unless webserver is ended.
1 parent daba8fa commit 2408778

File tree

3 files changed

+34
-22
lines changed

3 files changed

+34
-22
lines changed

Firmware/RTK_Surveyor/Form.ino

Lines changed: 31 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
//Once connected to the access point for WiFi Config, the ESP32 sends current setting values in one long string to websocket
22
//After user clicks 'save', data is validated via main.js and a long string of values is returned.
33

4+
bool websocketConnected = false;
5+
46
//Start webserver in AP mode
57
void startWebServer()
68
{
@@ -9,15 +11,17 @@ void startWebServer()
911

1012
ntripClientStop(true); //Do not allocate new wifiClient
1113
ntripServerStop(true); //Do not allocate new wifiClient
12-
14+
1315
if (wifiStartAP() == false) //Exits calling wifiConnect()
1416
return;
1517

1618
incomingSettings = (char*)malloc(AP_CONFIG_SETTING_SIZE);
17-
18-
//Clear any garbage from settings array
1919
memset(incomingSettings, 0, AP_CONFIG_SETTING_SIZE);
2020

21+
//Pre-load settings CSV
22+
settingsCSV = (char*)malloc(AP_CONFIG_SETTING_SIZE);
23+
createSettingsString(settingsCSV);
24+
2125
webserver = new AsyncWebServer(80);
2226
websocket = new AsyncWebSocket("/ws");
2327

@@ -141,10 +145,6 @@ void startWebServer()
141145

142146
webserver->begin();
143147

144-
//Pre-load settings CSV
145-
settingsCSV = (char*)malloc(AP_CONFIG_SETTING_SIZE);
146-
createSettingsString(settingsCSV);
147-
148148
log_d("Web Server Started");
149149
reportHeapNow();
150150

@@ -157,22 +157,32 @@ void stopWebServer()
157157
#ifdef COMPILE_WIFI
158158
#ifdef COMPILE_AP
159159

160-
if (websocket != NULL)
161-
{
162-
delete websocket;
163-
websocket = NULL;
164-
}
165-
166-
if (webserver != nullptr)
160+
if (webserver != NULL)
167161
{
168162
webserver->end();
163+
free(webserver);
169164
webserver = NULL;
170-
}
171165

172-
if (settingsCSV != NULL)
173-
{
174-
free(settingsCSV);
175-
settingsCSV = NULL;
166+
if (websocket != NULL)
167+
{
168+
Serial.println("Free websocket");
169+
delete websocket;
170+
websocket = NULL;
171+
}
172+
173+
if (settingsCSV != NULL)
174+
{
175+
Serial.println("Freeing settingsCSV");
176+
free(settingsCSV);
177+
settingsCSV = NULL;
178+
}
179+
180+
if (incomingSettings != NULL)
181+
{
182+
Serial.println("Freeing incomingSettings");
183+
free(incomingSettings);
184+
incomingSettings = NULL;
185+
}
176186
}
177187

178188
log_d("Web Server Stopped");
@@ -383,12 +393,14 @@ void onWsEvent(AsyncWebSocket * server, AsyncWebSocketClient * client, AwsEventT
383393
log_d("Websocket client connected");
384394
client->text(settingsCSV);
385395
lastCoordinateUpdate = millis();
396+
websocketConnected = true;
386397
}
387398
else if (type == WS_EVT_DISCONNECT) {
388399
log_d("Websocket client disconnected");
389400

390401
//User has either refreshed the page or disconnected. Recompile the current settings.
391402
createSettingsString(settingsCSV);
403+
websocketConnected = false;
392404
}
393405
else if (type == WS_EVT_DATA) {
394406
for (int i = 0; i < len; i++) {

Firmware/RTK_Surveyor/RTK_Surveyor.ino

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -371,15 +371,15 @@ unsigned long lastRockerSwitchChange = 0; //If quick toggle is detected (less th
371371
AsyncWebServer *webserver = NULL;
372372
AsyncWebSocket *websocket = NULL;
373373

374-
char *settingsCSV; //Push large array onto heap
374+
char *settingsCSV = NULL; //Push large array onto heap
375375

376376
#endif
377377
#endif
378378

379379
//Because the incoming string is longer than max len, there are multiple callbacks so we
380380
//use a global to combine the incoming
381381
#define AP_CONFIG_SETTING_SIZE 5000
382-
char *incomingSettings;
382+
char *incomingSettings = NULL;
383383
int incomingSettingsSpot = 0;
384384
unsigned long timeSinceLastIncomingSetting = 0;
385385
unsigned long lastCoordinateUpdate = 0;

Firmware/RTK_Surveyor/States.ino

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -629,7 +629,7 @@ void updateSystemState()
629629
#ifdef COMPILE_WIFI
630630
#ifdef COMPILE_AP
631631
//Dynamically update the coordinates on the AP page
632-
if (wifiState == WIFI_CONNECTED)
632+
if (websocketConnected == true)
633633
{
634634
if (millis() - lastCoordinateUpdate > 1000)
635635
{

0 commit comments

Comments
 (0)