Skip to content

Commit 53dcb26

Browse files
committed
Add upload progress during AP config firmware update
1 parent fb29f4e commit 53dcb26

File tree

5 files changed

+71
-102
lines changed

5 files changed

+71
-102
lines changed

Firmware/RTK_Surveyor/AP-Config/index.html

Lines changed: 4 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,10 @@
7474
<b>Done</b><br><br>RTK device is now rebooting.
7575
</div>
7676

77+
<div class="container" style="display:none; margin-top:20px;max-width:600px;" id="firmwareUploadComplete">
78+
<b>Done</b><br><br>Firmware update complete. RTK device is now rebooting.
79+
</div>
80+
7781
<div class="container" style="margin-top:20px;max-width:600px;" id="mainPage">
7882
<h2>
7983
<div align="center"><img src="src/rtk-setup.png" alt="SparkFun RTK WiFi Setup">
@@ -1080,52 +1084,6 @@ <h2>
10801084
<br>
10811085
Used: <p id="sdUsedSpaceMB" style="display:inline;">0</p>MB
10821086
</div>
1083-
1084-
<div class="form-check" id="firmwareAvailable" style="display:none;">
1085-
Available Firmware:
1086-
<div class="form-check">
1087-
<div style="display:none;" id="firmwareFile0">
1088-
<input type="radio" id="file0" name="firmwareFiles">
1089-
<label for="file0" id="firmwareFileName0">file0</label><br>
1090-
</div>
1091-
<div style="display:none;" id="firmwareFile1">
1092-
<input type="radio" id="file1" name="firmwareFiles">
1093-
<label for="file1" id="firmwareFileName1">file 1</label><br>
1094-
</div>
1095-
<div style="display:none;" id="firmwareFile2">
1096-
<input type="radio" id="file2" name="firmwareFiles">
1097-
<label for="file2" id="firmwareFileName2">file2</label><br>
1098-
</div>
1099-
<div style="display:none;" id="firmwareFile3">
1100-
<input type="radio" id="file3" name="firmwareFiles">
1101-
<label for="file3" id="firmwareFileName3">file3</label><br>
1102-
</div>
1103-
<div style="display:none;" id="firmwareFile4">
1104-
<input type="radio" id="file4" name="firmwareFiles">
1105-
<label for="file4" id="firmwareFileName4">file4</label><br>
1106-
</div>
1107-
<div style="display:none;" id="firmwareFile5">
1108-
<input type="radio" id="file5" name="firmwareFiles">
1109-
<label for="file5" id="firmwareFileName5">file5</label><br>
1110-
</div>
1111-
1112-
<div class="form-check">
1113-
<label class="form-check-label" for="enableFirmwareUpdate">Enable Firmware
1114-
Update:</label><span class="tt" data-bs-placement="right"
1115-
title="Select the firmware file, then check ‘Enable Firmware Update’ to begin update process.">
1116-
<span class="icon-info-circle text-primary ms-2"></span>
1117-
</span>
1118-
<input class="form-check-input" type="checkbox" value="" id="enableFirmwareUpdate"
1119-
unchecked disabled>
1120-
</div>
1121-
1122-
<div id="firmwareUpdateButton">
1123-
<button type="button" id="firmwareUpdate" class="btn btn-primary"
1124-
onClick="sendFirmwareFile()" disabled>Update Firmware</button>
1125-
<p id="firmwareUpdateMsg" class="inlineSuccess"></p>
1126-
</div>
1127-
</div>
1128-
</div>
11291087
</div>
11301088
<div class="col-sm-7 col-6 mt-2">
11311089
<div id="uploadNewFirmwareDiv" class="mb-2">

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,12 @@ function parseIncoming(msg) {
8383
) {
8484
ge(id).innerHTML = val;
8585
}
86+
else if (id.includes("firmwareUploadComplete")) {
87+
firmwareUploadComplete();
88+
}
89+
else if (id.includes("firmwareUploadStatus")) {
90+
firmwareUploadStatus(val);
91+
}
8692

8793
//Check boxes / radio buttons
8894
else if (val == "true") {
@@ -479,6 +485,15 @@ function firmwareUploadWait() {
479485
ge("firmwareUploadMsg").innerHTML = "<br>Uploading, please wait...";
480486
}
481487

488+
function firmwareUploadStatus(val) {
489+
ge("firmwareUploadMsg").innerHTML = val;
490+
}
491+
492+
function firmwareUploadComplete() {
493+
show("firmwareUploadComplete");
494+
hide("mainPage");
495+
}
496+
482497
document.addEventListener("DOMContentLoaded", (event) => {
483498

484499
ge("measurementRateHz").addEventListener("change", function () {

Firmware/RTK_Surveyor/Form.ino

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,28 @@ static void handleFirmwareFileUpload(AsyncWebServerRequest *request, String file
224224
{
225225
if (Update.write(data, len) != len)
226226
return request->send(400, "text/plain", "OTA could not begin");
227+
else
228+
{
229+
binBytesSent += len;
230+
231+
//Send an update to browser every 100k
232+
if (binBytesSent - binBytesLastUpdate > 100000)
233+
{
234+
binBytesLastUpdate = binBytesSent;
235+
236+
char bytesSentMsg[100];
237+
sprintf(bytesSentMsg, "%d bytes sent", binBytesSent);
238+
239+
Serial.printf("bytesSentMsg: %s\n\r", bytesSentMsg);
240+
241+
char statusMsg[200] = {'\0'};
242+
stringRecord(statusMsg, "firmwareUploadStatus", bytesSentMsg); //Convert to "firmwareUploadMsg,11214 bytes sent,"
243+
244+
Serial.printf("msg: %s\n\r", statusMsg);
245+
ws.textAll(statusMsg);
246+
}
247+
248+
}
227249
}
228250

229251
if (final)
@@ -235,10 +257,8 @@ static void handleFirmwareFileUpload(AsyncWebServerRequest *request, String file
235257
}
236258
else
237259
{
238-
Serial.print("Update complete: ");
239-
Serial.println(fileName);
240-
request->send(200, "text/html", "<b>Done</b><br><br>Firmware update complete. RTK device is rebooting.");
241-
Serial.println("Restarting");
260+
ws.textAll("firmwareUploadComplete,1,");
261+
Serial.println("Firmware update complete. Restarting");
242262
delay(500);
243263
ESP.restart();
244264
}

Firmware/RTK_Surveyor/RTK_Surveyor.ino

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -397,6 +397,8 @@ int ggaSentenceEndSpot = 0;
397397

398398
bool newAPSettings = false; //Goes true when new setting is received via AP config. Allows us to record settings when combined with a reset.
399399

400+
unsigned int binBytesSent = 0; //Tracks firmware bytes sent over WiFi OTA update via AP config.
401+
int binBytesLastUpdate = 0; //Allows websocket notification to be sent every 100k bytes
400402
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
401403

402404
void setup()

Firmware/RTK_Surveyor/form.h

Lines changed: 26 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,12 @@ function parseIncoming(msg) {
106106
) {
107107
ge(id).innerHTML = val;
108108
}
109+
else if (id.includes("firmwareUploadComplete")) {
110+
firmwareUploadComplete();
111+
}
112+
else if (id.includes("firmwareUploadStatus")) {
113+
firmwareUploadStatus(val);
114+
}
109115

110116
//Check boxes / radio buttons
111117
else if (val == "true") {
@@ -502,6 +508,15 @@ function firmwareUploadWait() {
502508
ge("firmwareUploadMsg").innerHTML = "<br>Uploading, please wait...";
503509
}
504510

511+
function firmwareUploadStatus(val) {
512+
ge("firmwareUploadMsg").innerHTML = val;
513+
}
514+
515+
function firmwareUploadComplete() {
516+
show("firmwareUploadComplete");
517+
hide("mainPage");
518+
}
519+
505520
document.addEventListener("DOMContentLoaded", (event) => {
506521

507522
ge("measurementRateHz").addEventListener("change", function () {
@@ -548,7 +563,7 @@ document.addEventListener("DOMContentLoaded", (event) => {
548563
ge("fixedEcefX").disabled = false;
549564
ge("fixedEcefY").disabled = false;
550565
ge("fixedEcefZ").disabled = false;
551-
//Disable Geographic inputs
566+
//Disable Geodetic inputs
552567
ge("fixedLat").disabled = true;
553568
ge("fixedLong").disabled = true;
554569
ge("fixedAltitude").disabled = true;
@@ -558,7 +573,7 @@ document.addEventListener("DOMContentLoaded", (event) => {
558573
ge("fixedEcefX").disabled = true;
559574
ge("fixedEcefY").disabled = true;
560575
ge("fixedEcefZ").disabled = true;
561-
//Disable Geographic inputs
576+
//Disable Geodetic inputs
562577
ge("fixedLat").disabled = false;
563578
ge("fixedLong").disabled = false;
564579
ge("fixedAltitude").disabled = false;
@@ -573,7 +588,7 @@ document.addEventListener("DOMContentLoaded", (event) => {
573588
ge("fixedEcefX").disabled = false;
574589
ge("fixedEcefY").disabled = false;
575590
ge("fixedEcefZ").disabled = false;
576-
//Disable Geographic inputs
591+
//Disable Geodetic inputs
577592
ge("fixedLat").disabled = true;
578593
ge("fixedLong").disabled = true;
579594
ge("fixedAltitude").disabled = true;
@@ -583,7 +598,7 @@ document.addEventListener("DOMContentLoaded", (event) => {
583598
ge("fixedEcefX").disabled = true;
584599
ge("fixedEcefY").disabled = true;
585600
ge("fixedEcefZ").disabled = true;
586-
//Disable Geographic inputs
601+
//Enable Geodetic inputs
587602
ge("fixedLat").disabled = false;
588603
ge("fixedLong").disabled = false;
589604
ge("fixedAltitude").disabled = false;
@@ -597,7 +612,7 @@ document.addEventListener("DOMContentLoaded", (event) => {
597612
ge("fixedEcefX").disabled = true;
598613
ge("fixedEcefY").disabled = true;
599614
ge("fixedEcefZ").disabled = true;
600-
//Enable Geographic inputs
615+
//Enable Geodetic inputs
601616
ge("fixedLat").disabled = false;
602617
ge("fixedLong").disabled = false;
603618
ge("fixedAltitude").disabled = false;
@@ -607,7 +622,7 @@ document.addEventListener("DOMContentLoaded", (event) => {
607622
ge("fixedEcefX").disabled = false;
608623
ge("fixedEcefY").disabled = false;
609624
ge("fixedEcefZ").disabled = false;
610-
//Disable Geographic inputs
625+
//Disable Geodetic inputs
611626
ge("fixedLat").disabled = true;
612627
ge("fixedLong").disabled = true;
613628
ge("fixedAltitude").disabled = true;
@@ -764,6 +779,10 @@ static const char *index_html = R"=====(
764779
<b>Done</b><br><br>RTK device is now rebooting.
765780
</div>
766781

782+
<div class="container" style="display:none; margin-top:20px;max-width:600px;" id="firmwareUploadComplete">
783+
<b>Done</b><br><br>Firmware update complete. RTK device is now rebooting.
784+
</div>
785+
767786
<div class="container" style="margin-top:20px;max-width:600px;" id="mainPage">
768787
<h2>
769788
<div align="center"><img src="src/rtk-setup.png" alt="SparkFun RTK WiFi Setup">
@@ -1770,52 +1789,6 @@ static const char *index_html = R"=====(
17701789
<br>
17711790
Used: <p id="sdUsedSpaceMB" style="display:inline;">0</p>MB
17721791
</div>
1773-
1774-
<div class="form-check" id="firmwareAvailable" style="display:none;">
1775-
Available Firmware:
1776-
<div class="form-check">
1777-
<div style="display:none;" id="firmwareFile0">
1778-
<input type="radio" id="file0" name="firmwareFiles">
1779-
<label for="file0" id="firmwareFileName0">file0</label><br>
1780-
</div>
1781-
<div style="display:none;" id="firmwareFile1">
1782-
<input type="radio" id="file1" name="firmwareFiles">
1783-
<label for="file1" id="firmwareFileName1">file 1</label><br>
1784-
</div>
1785-
<div style="display:none;" id="firmwareFile2">
1786-
<input type="radio" id="file2" name="firmwareFiles">
1787-
<label for="file2" id="firmwareFileName2">file2</label><br>
1788-
</div>
1789-
<div style="display:none;" id="firmwareFile3">
1790-
<input type="radio" id="file3" name="firmwareFiles">
1791-
<label for="file3" id="firmwareFileName3">file3</label><br>
1792-
</div>
1793-
<div style="display:none;" id="firmwareFile4">
1794-
<input type="radio" id="file4" name="firmwareFiles">
1795-
<label for="file4" id="firmwareFileName4">file4</label><br>
1796-
</div>
1797-
<div style="display:none;" id="firmwareFile5">
1798-
<input type="radio" id="file5" name="firmwareFiles">
1799-
<label for="file5" id="firmwareFileName5">file5</label><br>
1800-
</div>
1801-
1802-
<div class="form-check">
1803-
<label class="form-check-label" for="enableFirmwareUpdate">Enable Firmware
1804-
Update:</label><span class="tt" data-bs-placement="right"
1805-
title="Select the firmware file, then check ‘Enable Firmware Update’ to begin update process.">
1806-
<span class="icon-info-circle text-primary ms-2"></span>
1807-
</span>
1808-
<input class="form-check-input" type="checkbox" value="" id="enableFirmwareUpdate"
1809-
unchecked disabled>
1810-
</div>
1811-
1812-
<div id="firmwareUpdateButton">
1813-
<button type="button" id="firmwareUpdate" class="btn btn-primary"
1814-
onClick="sendFirmwareFile()" disabled>Update Firmware</button>
1815-
<p id="firmwareUpdateMsg" class="inlineSuccess"></p>
1816-
</div>
1817-
</div>
1818-
</div>
18191792
</div>
18201793
<div class="col-sm-7 col-6 mt-2">
18211794
<div id="uploadNewFirmwareDiv" class="mb-2">
@@ -1867,6 +1840,7 @@ static const char *index_html = R"=====(
18671840
</body>
18681841

18691842
</html>
1843+
18701844
)====="; //End index.html
18711845

18721846
//Content of bootstrap.bundle.min.jss with gzip compression

0 commit comments

Comments
 (0)